Zum Inhalt springen

Standalone PHP-Programm über userFunc in Typo3 Content einfügen

Erstellt am 17. Juli 2014 · 3 Antworten · letzte Antwort am 18. Juli 2014

Tags: TYPO3 6.x, Frage

icke_der_tolga ·

Typo3 Versiono: 6.2.3

Hallo liebe Typo3-Gemeinde,

ich versuche das auf PHP basierende Programm QuiXplorer manuell im Content-Bereich eines Templates einzubinden (gibt es auch als Backend Extension), bekomme es aber einfach nicht hin. So sieht das PHP-Script der index.php von QuiXplorer aus:

<?php

umask(002); 

require "./.include/init.php";

switch($GLOBALS["action"]) {	
case "edit":
	require "./.include/fun_edit.php";
	edit_file($GLOBALS["dir"], $GLOBALS["item"]);
break;

case "delete":
	require "./.include/fun_del.php";
	del_items($GLOBALS["dir"]);
break;

.
.
.
?>

Es werden also viele andere PHP-Dateien included. Jetzt habe ich folgendes versucht.

1includeLibs.user_quix = fileadmin/pfad/user_quix.php
lib.phpskript = USER
lib.phpskript.userFunc = user_quix -> ausgabe

Hier die Marker-Einbindung ins Template:

<f:format.raw> <f:cObject typoscriptObjectPath="lib.phpscript" /> </f:format.raw>

Kann man mit userFunc nur einzelne Klassen oder ein gesamtes Script aufrufen lassen? Kann mir Jemand weiterhelfen? Gibt es eine Alternative zu userFunc?

Beste Grüße, Dank und Grüße aus Chemnitz
Tolga

Chrissli ·

Zumindes das was du als userFunc hinterlegst muss Klasse->Methode sein.
Was diese Methode dann macht, sprich ein PHP-Skript inkludiert oder was auch immer ist ein anderes paar Stiefel 😉
Der saubere Weg führt aber über OOP

Wie das dann per USER eingebunden wird wurde schon des öfteren hier erläutert, z.b. hier #118299

icke_der_tolga ·

Ich habe versucht das Beispiel, wohin der Link verweist, anzuwenden; hat aber nicht funktioniert. 1. Läd der Browser etwa eine Minute, bis ich nachprüfen kann, ob es funktioniert hat 2. Lade ich ja auch wieder eine Funktion.

Du meinst über die Funktion die QuiXplorer index.php inkludieren quasi? Jetzt bekomme ich nicht mal mehr eine Ausgabe hin. In vorherigen Versuchen konnte ich wenigstens dem Script ein echo "Test"; entlocken. Ich meine, da hätte ich auch gar keine Funktion verwendet *lautdenk Heeeeelp.

icke_der_tolga ·

Hallo,

falls wer noch die Probleme hat, hier eine funktionierende Variante.

Typoscript

includeLibs.user_klasse = fileadmin/templates/vdw/layouts/user_klasse.php
lib.phpscript = USER
lib.phpscript.userFunc = user_klasse->funktion

PHP

<?php
 class user_klasse
     {
         function funktion() {
		  $foo = include 'quix.php';
		  return $foo;
     }	 
    }

?>

Wie man in dem PHP-Script sieht, habe ich ein komplettes PHP-Script includiert und gebe es mit return aus. Hier treten einige Probleme auf, was die relativen Pfade angeht. Einige konnte ich eleminieren, Beispiel:

# aus 
require ./.include/init.php";
# wird
require (dirname(__FILE__) . "/.include/init.php");

# In den Unterverzeichnissen muss man gegebenenfalls eine Pfad-Ebene rausschneiden.
# Anlehnend and den "../"-Befehl, das geht mit zwei dirname-Befehlen hintereinander.

require (dirname(dirname((__FILE__))) . "/.config/conf.php");

Ok, und eingebette im HTML-Code habe ich es wie folgt (also die Marker-Setzung):

<f:format.raw> <f:cObject typoscriptObjectPath="lib.phpscript" /> </f:format.raw>

Ich hoffe, dass ich irgendwem weiterhelfen konnte. Ich kämpfe mich jetzt weiter durch die Pfad-Anpassungen vom PHP-Script. Das kann ganz schön frickelig werden, aber es wird schon mal das gesamte PHP-Programm angesprochen und ausgegeben. Probleme könnten noch auftauchen, dass das Script nicht in dem dafür vorgesehenem Marker-Bereich bleibt, weil neue Unterseiten aufgerufen werden. Aber schauen wir mal.

Wenn wer eine andere Methode hat, um ein gesamtes PHP-Programm an einer Markerposition einzufügen, kann er/sie es gerne posten.

Beste Grüße
Tolga