Zum Inhalt springen

[Tutorial] Eigene PHP-Skripte einbinden

Erstellt am 9. Juni 2003 · 42 Antworten · letzte Antwort am 18. Juli 2006 · Seite 1 von 3

Tags: Frage

Jörg Roth ·

Die Frage wurde schon öfters hier im Forum gestellt und ist eigentlich bei der täglichen Arbeit mit Typo3 unerlässlich.

Deswegen hier eine detailierte Anleitung, wie man seine eigenen PHP-Skripte in Typo3 ohne Umwege "inkludiert".

1. Template erweitern
Damit man nicht ein komplett neues Template für die eine Seite, in der das Skript eingebunden werden soll, erstellen muss, klickst Du in der Template-Ansicht auf "Click here to create an extension template". Der dort eingefügte Code erweitert das nächst übergeordnete Template im Baum.

2. SETUP
Im Setup-Feld gibst Du folgenden Code ein:

  tt_content.script = CASE
  tt_content.script {
    key.field = select_key
    ANKUNFT = PHP_SCRIPT_EXT
    ANKUNFT.file = media/scripts/deinscript.php
  }

Für "ANKUNFT" definierst Du Dir einen eindeutigen Marker. Den brauchen wir im nächsten Schritt. Passe den Pfad zu Deinem Skript entsprechend an.

3. Seiteninhalt
Als Seiteninhalt legst Du sinngemäß ein SKRIPT an. Im Feld "CODE" fügst Du den Namen des verwendeten Markers aus dem Setup-Feld ein.

Das war's auch schon. Sollte das wider erwarten nicht klappen, bedenke, dass Dein Skript vom root des Typo3-Verzeichnisses aus inkludiert wird. Du musst alle Pfade zu Bildern, DB-Verbindungen, etc. entsprechend anpassen.
Tipp am Rande: Skript ins root kopieren, Pfade anpassen, testen. Wenn gut, verschieben. 😉

Dieses Tutorial ist auch unter www.typo3faq.net zu finden.

Viel Spaß,

Jörg

Horian ·

Ich habe damit jetzt eine Weile rumprobiert, finde aber keinen Seiteninhalt namens Skript?!?
Html-Seiteninhalt klappt jedenfalls nicht bei mir.
Kann mir bitte jemand sagen, wo ich einen Seiteninhalt namens SKRIPT herbekomme?

Edit: Ah ok, jetzt hab ichs:
1)Auf die Seite gehen wo der Inhalt erscheinen soll.
2)"Neuer Inhalt" bzw. "Neuen Datensatz anlegen" anklicken.
3)"Normaler Text" auswählen.
4)Ganz oben bei Typ "Skript" auswählen.
(von Thomas Reichelt)

Unbekannter Benutzer ·

Oh Mann, ich kann gar nicht sagen, wie dankbar ich dir für diesen Thread bin!

Ich habe heute über 4 Stunden rumprobiert, ein eigenes Script einzubinden und ich war schon am verzweifeln.

DANKE DANKE DANKE 😃

thoko ·

Wobei das einbinden von externen Dateien durchaus ziemlich relevant ist, vor allem wenn man vorhandene Applikationen integrieren will/muss.

Außerdem halte ich es nur partiell für eine gute Idee, eine PHP-Applikation im Typo3-Backend zu entwickeln...

rolli ·
KeyserSoze schrieb

Es gibt jetzt eine viel einfachere Möglichkeit, PHP-Skripten einzubinden:

http://typo3.org/1383.0.html?&tx_extrepmgm_pi1[mode]=1&tx_extrepmgm_pi1[showUid]=1019

Hallo,
wobei es da wiederum ein Problem gibt :-(
Die Typo3-Seite unterhalb der Weltkugel selbst wird aufgerufen mit:
http://irgendwo.net/index.php
In eine Seite, die unterhalb von index.php liegt, also:
Weltkugel
|- erste Seite (index.php)
|-- Seite in der ein PHP-Script aufgerufen werden soll (aufruf.php)
gebe ich als Seiteninhaltselement "PHP Script" an (die Extention "Page PHP Content" muß installiert sein).
Folgender Code kommt ins Feld:

<?php
include("http://irgendwo.net/ordner-mit-skripts/index.php");
?>

Es wird eine Seite aufgerufen (index.php), die wiederum mehrere includes beherbergt und dazu ein Sessionmanagement.
Der erzeugte Inhalt dieser Seite wird zunächst angezeigt.
Einen Link innerhalb dieser Seite wird falsch dargestellt.
Statt nun auf http://irgendwo.net/ordner-mit-skripts/link1.php zu verweisen, zeigt der Link logischerweise auf http://irgendwo.net/link1.php :-( :-( :-(
D.h., alle verweise innerhalb des includeten Skripts sind falsch und werden auf die Ebene gelenkt, in der auch "aufruf.php" liegt :-(

Gibt es eine Möglichkeit, diese Extention doch noch für diesen Zweck nutzen zu können?
Gibt es einen "Trick", diese Links und Sessions auf die Dateien im Ordner "ordner-mit-skripts" zuszuweisen und nicht der Datei "aufruf.php" bzw. deren Ebene in der Seitenstruktur ?

MFG
rolli

Jörg Roth ·

Erm...

Üblicherweise lege ich externe Skripte in den Ordner media/scripts (kann ja auch irgendein anderer sein). Das wird wie beschrieben eingebunden und fertig. Muss ich GET oder POST-Daten auslesen (z.b. auf einer weiteren Seite), hole ich mir die einfach über TypoScript rein... ergo lege ich mir die Seitenstruktur kurz und knapp in Typo3 genauso an, wie ich sie brauche. Funzt prima und geht je nach Lösung schon mal schneller, als eine neue Extension zu schreiben...

rolli ·
Jörg Roth schrieb

Erm...

Üblicherweise lege ich externe Skripte in den Ordner media/scripts (kann ja auch irgendein anderer sein). Das wird wie beschrieben eingebunden und fertig. Muss ich GET oder POST-Daten auslesen (z.b. auf einer weiteren Seite), hole ich mir die einfach über TypoScript rein... ergo lege ich mir die Seitenstruktur kurz und knapp in Typo3 genauso an, wie ich sie brauche. Funzt prima und geht je nach Lösung schon mal schneller, als eine neue Extension zu schreiben...

Hallo Jörg,

bitte nicht schlagen, aber . . .
Ich habe das jetzt noch einmal nachvollzogen.
Als einfaches Beispiel mit einem einfachen Skript von:
http://www.artmedic-webdesign.de/scripts/artmedic_kleinanzeigen.php
(das letzte einfache Anzeigenskript ganz unten, ich habe mit denen nichts zu tun und absolut nichts am Hut, es geht lediglich um ein Beispiel).

Ich habe die Dateien, wie von Dir beschrieben nach /media/artmedic-kleinanzeigen/ kopiert. Habe über :
http://localhost/media/artmedic-kleinanzeigen/setup.php das Setup für genanntes Skript ausgeführt. Der Test mit http://localhost/media/artmedic-kleinanzeigen/index.php ergab eine richtige Funktion dieses Kleinanzeigenmarktes.
Ich kann das Skript (index.php) über die PHP Extention in eine Typo3 Seite integrieren (neuer Seiteninhalt -> Typ: PHP Script) Die Seite wird auch korrekt angezeigt (außer deren direkt zugewiesener Stylesheetdatei).
Jetzt das Problem. Wenn ich auf einen Link innerhalb der angezeigten Datei klicke (hier auf "Kleinanzeige aufgeben") soll die index.php in /media/artmedic-kleinanzeigen/ mit dem Parameter "?id=eingabe.htm" aufgerufen werden. Also:
http://localhost/media/artmedic-kleinanzeigen/index.php?id=eingabe.htm
Aufgerufen wird aber (logisch?) :
http://localhost/index.php?id=eingabe.htm
Jetzt verstehe ich also überhaupt nichts mehr.

Was meinst Du mit:

. . . hole ich mir die einfach über TypoScript rein... ergo lege ich mir die Seitenstruktur kurz und knapp in Typo3 genauso an, wie ich sie brauche.

Ich kann doch dieses o.g. Skript nicht einfach aufträufeln. Zumal das nur als kleines Beispiel gedacht ist. Praktisch denke ich da an ein viel größeres Paket. Das besteht dann nicht nur aus einer Handvoll PHP-Dateien, sondern aus einer großen Ordnerstruktur, die das Paket selbst mitbringt.
Hilfreich wäre schon ein Tip, wie o.g. Skript unter Typo3 zum funktionieren zu bringen ist.
Nochmals, es soll als Beispiel dienen. Ich weiß, das die Profis unter Euch daraus im Handumdrehen eine Extention schreiben können. Mir geht es darum, wie ich o.g. Anwendung mit oder auch ohne der Extention "Page PHP Content" zum "laufen" bringe, so das die dort integrierten Links auch funktionieren. Wäre mir sehr wichtig. Danke für die Hilfe.

MFG
rolli

Jörg Roth ·

Leider ist grade Bettzeit angesagt... morgen poste ich mal mehr... hab aber den ganzen Tag Kundenbesuch... mal sehn, wann ich Zeit bekomme...

Gemacht habe ich das sehr einfach unter www.ihk-siegen.de -> Über uns -> Themen A-Z

Sind zwar nur 2 Seiten, aber der Aufwand die beiden Skripte einzubinden war verschwindend gering. Das PHP-Skript holt sich aus den fe_users die Themen raus (wurden erweitert), sortiert diese und das übliche halt (unique, etc.).
Wählst Du ein Thema aus, wird das an die URL per GET drangehängt und auf der nächsten Seite - wo ebenfalls ein kleines Skript seinen Dienst versieht - ausgelesen.

Der Verweis auf der Person führt dann auf die Seite, wo das Plugin "New Login Box" eingebunden ist und zeigt die Details.

Auf den Seiten selbst liegt ein erweitertes Template:

tt_content.script = CASE 
tt_content.script { 
  key.field = select_key 
  THEMEN = PHP_SCRIPT_EXT 
  THEMEN.file = xxxxx/xxxxxxxxx/themen_index.php 
}

That's all.

Es geht noch viel eleganter und komplizierter, aber so reicht es auch. Wenn Du das von Dir ausgewählte Skript einbinden willst, wirst Du um Anpassungen kaum herum kommen. Die Variable "id" wäre schon der erste Schritt, denn die ist von Typo3 belegt. Weitere Namenskonventionen findest Du in der Doku. Zumal das Beispiel mehr als nur schlecht ist... habe aber nicht dabei geschaut

rolli ·

Hallo Jörg,

danke für Deine Antwort und Entschuldigung, daß ich Stücke deines Schlafes geraubt habe.
Das von Dir erwähnte "Nachbilden" einer Reihe von PHP-Dateien innerhalb von Typo3 im Seitenbaum anhand der ID (<a href="index.php?id=eingabe.htm", hier in der delete.php) kann ich theoretisch nachvollziehen. Nur wird es dann unverständlich, wenn das Formular innerhalb der eingabe.htm auf

<form name="form1" method="post" action="eingabe.php">

verweist.
OK eine Anpassung aller Skripts die mit der Extension "Page PHP Content" oder per

tt_content.script = CASE 
tt_content.script { 
  key.field = select_key 
  THEMEN = PHP_SCRIPT_EXT 
  THEMEN.file = xxxxx/xxxxxxxxx/themen_index.php 
}

eingebunden werden, wird wohl immer noch notwendig sein.
Eine größere PHP-Anwendung mit vielen PHP-Dateien, einer eigenen Ordner Struktur, in dem diese Dateien abgelegt sind, vielen Formularen innerhalb dieser Anwendung und vielen includes ihrer eigenen Configurationsdateien wird sicher nicht in Typo3 zu integrieren sein über die Extension "Page PHP Content" oder per

tt_content.script = CASE 
tt_content.script { 
  key.field = select_key 
  THEMEN = PHP_SCRIPT_EXT 
  THEMEN.file = xxxxx/xxxxxxxxx/themen_index.php 
}

Diese Anwendung muß dann sicher selbständig außerhalb von Typo3 aufgerufen weden und dort auch "laufen" ???
Ein Aufruf innerhalb eines IFrame ist ja wohl mehr als häßlich (über Geschmack läßt sich nicht streiten ;-) und manche Browser bzw. User lassen eine solche Darstellung auch nicht zu).
Fragen über eine funktionierende Extension "WebGrabber" und deren Inbetriebnahme wurden hier um Forum auch noch nie beantwortet.

Es wäre schön, wenn Du das einmal erläutern könntest:

hole ich mir die einfach über TypoScript rein . . .

und

Es geht noch viel eleganter und komplizierter . . .

Danke und einen schönen und erfolgreichen Tag
rolli

MrGunn ·

Hallo,

schade, daß der Thread einfach "gestorben" ist - ich habe ein ähnliches Problem und suche nach einer Lösung...

Ich habe ein PHP-Skript als Contentelement eingebunden was eine Suchfunktion beinhaltet. Die Ausgabe der Suchergebnisse sollte natürlich wieder über mein Template ausgegeben werden, tut es aber nicht: es wird (logischerweise) ganz normal aufgerufen.

Wie kann ich also den Suchstring an eine PID weitergeben, die wiederum das Output-PHP als Content-Element besitzt?

Gruß, MrGunn 😃

thoko ·

Hi,

leider fehlt mir grade die Zeit für eine komplette Lösung, aber...

Du kannst mit PHP einfach alle GET-Parameter ($_GET) durchsuchen, bis Du die ID hast.
Dazu liest Du noch den Script-Pfad aus und packst das dann einfach in das Formular (<form action="scriptpfad/script.php?ID=xyz" method="post")
Damit ist das Ziel gleich der aufrufenden Seite. Das Script muß dann blos noch schauen, ob entweder in $_POST was drinsteht oder ob halt in $_GET eine bestimmte Variable gesetzt ist (würde ich aber nicht machen).

Sollte eigentlich recht gut gehen.

HTH,

thoko

wersi77 ·

Wofür steht eigentlich das Feld Parameter beim Skripteinbinden.
Im Seiteninhalt von Skript findet ihr dies und mir konnte noch niemand die Funktionsweise erklären. Wenn man damit Parameter anhängen kann an die auszuführende PHP-Datei wäre ich sehr glücklich!!!

Unbekannter Benutzer ·

So jetzt bitte nochmal für die die etwas länger brauchen o.O

Zu meinem Root-Template erstelle ich ein extension Template mit Inhalt:

tt_content.script = CASE
tt_content.script {
key.field = select_key
ANKUNFT = PHP_SCRIPT_EXT
ANKUNFT.file = media/scripts/deinscript.php
}

In meiner gewünschten Seite einen Content Typ "script"
und in dessen CODE Feld den Marker "ANKUNFT"

Und so sollte es gehn?

Wenn ja mache ich was falsch oder ich hab's falsch verstanden.
Kann mir da bitte noch jemand auf die sprünge helfen? #giggle#

Danke...peay

[edit]
Oopss....hab's doch richtig verstanden
aber immer diese kleinen Schreibfehler :o

jetzt funzt's

Danke für das TUT.
peay

smilecloud ·

Hi wersi77 und alle anderen,

wersi77 schrieb

Wofür steht eigentlich das Feld Parameter beim Skripteinbinden.
Im Seiteninhalt von Skript findet ihr dies und mir konnte noch niemand die Funktionsweise erklären. Wenn man damit Parameter anhängen kann an die auszuführende PHP-Datei wäre ich sehr glücklich!!!

Das Feld Parameter kannst du in deinem PHP-Script ganz einfach auslesen:

$this->cObj->data["bodytext"]

Hier ein komplettes Beispiel:

class user_change_login_class
{
  var $cObj;
  
  function machwas($content, $conf)
  {
     $out = $this->cObj->data["bodytext"];

    return $out; 
  }

}

auf diese weise kann man auch diverse andere infos über das SCRIPT-content element erhalten z.B. die uid:

$this->cObj->data["uid"]

Ich hoffe das hilft...

Gruß,
smile

Doegi ·
Jörg Roth schrieb
  tt_content.script = CASE
  tt_content.script {
    key.field = select_key
    ANKUNFT = PHP_SCRIPT_EXT
    ANKUNFT.file = media/scripts/deinscript.php
  }

Für "ANKUNFT" definierst Du Dir einen eindeutigen Marker. Den brauchen wir im nächsten Schritt. Passe den Pfad zu Deinem Skript entsprechend an.

3. Seiteninhalt
Als Seiteninhalt legst Du sinngemäß ein SKRIPT an. Im Feld "CODE" fügst Du den Namen des verwendeten Markers aus dem Setup-Feld ein.

Sagt mal, bin ich blöd? Ich find auf verrecken den Typ "SKRIPT" im Seiteninhalt nicht. Was hab ich übersehen?

Danke schonmal

Alex

Doegi ·

ok, ich hab's:

Der Page-Type "Skript" ist nur verfügbar, wenn die Extension "CSS Styled Content" *nicht* aktiv ist.

Sehr dämlich :-(

hendrik ·

Ich habe mit Hilfe der Tips in diesem Thread meine alten PHP Skripte soweit integriert, die Datenbankabfragen funktionieren, die Ausgabe ist auch ok. Dafür schon mal vielen Dank.
Ich habe aber noch folgendes Problem: Manche dieser Skripte bearbeiten Eingaben des Benutzers weiter, dass heißt, es muss wiederholt aufgerufen werden und Eingaben aus einem Formular auslesen. Leider wird aber immer die Startseite aufgerufen und nicht die Seite mit dem Skript wiederaufgerufen.
Wie kann ich dieses Verhalten verändern?

Vielen Dank schon mal für alle Hinweise
Hendrik

n1gHt ·

Du kannst die CSS Style content auch aktiviert lassen.
Damit du dann SCRIPT als Contentelement angezeigt bekommst öffne die Datei .. ypo3extcss_styled_contentpageTSconfig.txt und kommentiere folgendes aus "CType.removeItems = script, rte".