2014-03-19 11 views
5

Ich baue eine Joomla 3-Website, aber ich muss einige Seiten anpassen. Ich weiß, dass ich PHP mit Joomla verwenden kann, aber ist es auch möglich, Python damit zu verwenden? Insbesondere möchte ich CherryPy verwenden, um einige benutzerdefinierte Codeteile zu schreiben, aber ich möchte, dass sie in nativen Joomla-Seiten angezeigt werden (nicht nur iFrames). Ist das möglich?Können Sie Python-Webcode in Joomla anzeigen?

+1

Haben Sie bereits die Joomla-Website? Wenn Sie PHP nicht mögen und Python mögen (ich mache Ihnen keine Vorwürfe), warum sollten Sie nicht ein in Python geschriebenes CMS verwenden? –

Antwort

1

PHP Ausführung von Python „Skripte“

Dies wird für Skripte arbeiten, die Dinge zu tun und die Ausgabe zurückgeben, nicht für CherryPy.

<?php 
    // execute your Python script from PHP 
    $command = escapeshellcmd('myPythonScript.py'); 
    $output = shell_exec($command); 

    echo $output; 

    // take response content to embed it into the page 
?> 

PHP ein Python/CherryPy zuzugreifen serviert Website

import cherrypy 
class HelloWorld(object): 
    def index(self): 
     return "Hello World!" 
    index.exposed = True 

cherrypy.quickstart(HelloWorld()) 

Dies beginnt ein http://localhost:8080 und Sie sollten Hello world! sehen.

Jetzt können Sie CherryPy-Ausgabe zugreifen, indem Sie auf es localhost:port zugreifen. Nicht gut Leistung, aber funktioniert.

<?php 
    $output = file_get_contents('http://localhost:8080/'); 
    echo $output; 
?> 

Joomla + Ajax einen Pyhton/CherryPy zuzugreifen serviert Webseite

Eine alternative Lösung wäre, um nicht zu PHP, um den Inhalt zu holen, sondern von Client-Seite die holen zu tun. Im Grunde genommen würden Sie einen Ajax-Request auf der CherryPy-Webseite verwenden, um dessen Inhalt zu holen und ihn in das Dom der Joomla-Seite einzubetten.

// add jQuery Ajax reqeust from your Joomla page to CherryPy 
$.ajax({ 
    url: "https://localhost:8080/", // <-- access the 2nd served website 
    type: 'GET', 
    success: function(res) { 
     //console.log(res); 
     alert(res); 
     $("#someElement").html(res); 
    } 
}); 
0

Sie können es über eine PHP-Datei ausführen. Versuchen Sie folgendes:

exec("python/path/your-script.py"); 
+0

Oh sehr interessant. Gilt dies auch für Python-Skripte, die in einem Web-Framework wie CherryPy ausgegeben werden? Oder wie würde ich das Python-Skript dazu bringen, Web Items auszugeben? –

+0

@JimBeam Dies funktioniert * nur * für Prozesse, die Ausgaben ausgeben und beenden. Wie Sie vermutet haben, ist CherryPy ein langwieriger Prozess, der Ihren Webinhalt nicht druckt. –

0

Es ist möglich, aber nicht sehr effizient.

Sie können einen Python-Skript von PHP mit der exec() Funktion ausführen: PHP-Code:

exec("python /path/to/python-script.py"); 

Es gibt auch eine Vielzahl von ähnlichen PHP-Funktionen, die auf verwendet werden können, mit dem Gleiche erreichen Geringfügige Unterschiede zu der Art und Weise, wie Eingaben und Ausgaben verarbeitet werden (passthru, system, proc_open, backticks).

Die Python-Skript wird ausgeführt seine Kommandozeilen-Schnittstelle - nicht CGI (oder ähnlich) Schnittstelle, wie Sie, wenn der Web-Server direkt haben würden, wurde den Python-Skript ausgeführt wird. Dies bedeutet, dass das Python-Skript keinen Zugriff auf Informationen über die HTTP-Anforderung - GET/POST-Werte, die IP-Adresse des Clients, die Seiten-URL usw. hat. Sie könnten diese Informationen von PHP an Python über die Befehlszeilenparameter übergeben eine Pipe, eine temporäre Datei oder eine andere Form von Inter-Prozess-Kommunikation, aber Sie müssen jedes Stück erforderlichen Informationen explizit übergeben.

Der Grund dafür ist ineffizient, weil jeder Aufruf von exec einen ganz neuen Prozess für das Python-Skript erzeugt. Das ist eine ziemlich teure Operation auf jeder HTTP-Anfrage (deshalb Server wie Apache und Schnittstellen wie Fast-CGI wieder Kindprozesse und Threads verwenden, anstatt neue zu erstellen). Wenn Sie mehr als als einen Aufruf an exec haben, spawn jedes einzelne einen neuen Prozess.

Extrahiert von here.

Weitere Informationen: Unable to put Python code to Joomla

+0

"Python-Code kann nicht zu Joomla hinzugefügt werden" scheint eher eine Portierung einer Python-Webanwendung auf Joomla zu sein. –

1

Wahrscheinlich die effizienteste Art und Weise Seiten aus unterschiedlichen Quellen zu konstruieren (Joomla und CherryPy) ist wahrscheinlich Edge Side Includes .

Im Wesentlichen führen Sie eine Joomla-Instanz aus, die die Dokumente bedient, die ESI-Tags enthalten. Sie führen eine CherryPy-Instanz aus, die die Teile bereitstellt, die Sie an den Speicherort der esi-Tags einfügen möchten. Und Sie führen einen Reverse-Proxy, der ESI-ähnlichen Lack unterstützt, um alles zusammenzustecken.

Das mag wie eine Menge beweglicher Teile aussehen, aber es reagiert wie ... etwas, das wirklich anspricht. Stimmen Sie die Caching-Teile und Sie erleichtern Ihre Joomla und Datenbank von einer Menge Arbeit.

Die exec Weg von den anderen Antworten wird für kleine Python-Skripts, die etwas drucken, funktionieren, aber nicht arbeiten für CherryPy.

+0

Es gibt einige Diskussionen dazu https://groups.google.com/forum/#!topic/joomla-dev-framework/-3TU_ab5M3A – Elin

0

Bevor Python unter Berücksichtigung

  • Was Sie anpassen wollen, sind? (vielleicht existiert bereits ein cleveres Javascript oder eine Joomla-Erweiterung)

  • Ist der Joomla-Weg keine bessere Lösung für Ihr Problem, wenn Sie Joomla verwenden? (Ändern Sie die Vorlage, oder die Ansicht-Vorlagen der Module und Komponenten insbesondere)

    i.o.w .: verstehst du Joomla genug zu wissen, dass Sie etwas anderes brauchen? Siehe unten:

Wenn Python immer noch der Weg zu gehen:

  • Gibt es in Ihrem Hosting-Unterstützung Python?

  • Sollten Sie Ihre Wahl des CMS überdenken?

Ich mag Ihre Wahl von CherryPy.

Verwandte Themen