Zum Inhalt springen

PHP-Script einbinden

Erstellt am 3. Januar 2014 · 6 Antworten · letzte Antwort am 9. Januar 2014

Tags: PHP, TYPO3 6.x, Frage

Crockett ·

Hallo,

ich möchte ein in meiner Seite den Marker "PROFIL" durch den Inhalt ersetzen, der mir von einem PHP-Script geliefert wird. Seit der Version 6 geht ja anscheinenden die Funktion PROFIL = PHP_SCRIPT nicht mehr und man muss mit USER arbeiten. Leider funktioniert das noch nicht so, wie ich das gerne hätte. Am Ende wird der Marker immer nur durch nichts ersetzt.

Zuerst mein Typoscriptausschnitt

  includeLibs.random = fileadmin/scripte/randomimage.php
  
  PROFIL = USER
  PROFIL.userFunc = random->main

Und hier noch die PHP-Klasse

<?php

class random
   {
      function main()
      {
         $fpath='./../Bilder_Design/Profilmaennchen/';
         $rimage=array();
         $dh = opendir($fpath);
         while (false !== ($filename = readdir($dh)))
         {
             if ($filename != "." && $filename != ".." && !is_dir($fpath.$filename)) { $rimage[] =$fpath.$filename;  }
         }
         if(count($rimage)>0) {
         shuffle($rimage);
         return '<img src="'.$rimage[0].'" alt="random" width="200">';
}
      }
   }

?>
toifel ·

Von typo3.org zum Thema userFunc:

Note: When using a function, the name of the function has to start with "user_". When using a class, the name of the class must start with "user_" (there are no conditions on the name of the method).

Crockett ·

Danke für die Antwort, wer lesen kann ist halt doch im Vorteil 🙁
Doch leider funktioniert es immer noch nicht. Der entsprechende Marker wird durch nichts ersetze. (Und ja da sind Dateien in diesem Ordner)
Hier noch einmal die beiden Codeausschnitte:

<?php
class user_random
   {
      function main()
      {
         $fpath='./../Bilder_Design/Profilmaennchen/';
         $rimage=array();
         $dh = opendir($fpath);
         while (false !== ($filename = readdir($dh)))
         {
            if ($filename != "." && $filename != ".." && !is_dir($fpath.$filename)) { $rimage[] = $fpath.$filename;  }
         }
         if(count($rimage)>0)
         {
            shuffle($rimage);
            return '<img src="'.$rimage[0].'" alt="random" width="50">';
         }
      }
   }
?>
  includeLibs.user_random = fileadmin/scripte/randomimage.php
  
  PROFIL = USER
  PROFIL.userFunc = user_random->main
jenses ·
Crockett schrieb

Danke für die Antwort, wer lesen kann ist halt doch im Vorteil

Wer richtig lesen kann, ist noch mehr im Vorteil:
Note: When using a function, the name of the function has to start with "user_"

Crockett ·

Ich hatte das so verstanden, dass es egal ist, wenn man die Klasse mit user_ deklariert. Aber egal ... ich habe den Hinweis natürlich gleich mal umgesetzt, aber leider funktioniert es immer noch nicht #angry#. Ich verstehe das einfach nicht.

jenses ·
jenses schrieb
Crockett schrieb

Danke für die Antwort, wer lesen kann ist halt doch im Vorteil

Wer richtig lesen kann, ist noch mehr im Vorteil:
Note: When using a function, the name of the function has to start with "user_"

Tja, gilt auch für mich :-p
"When using a class, the name of the class must start with "user_" (there are no conditions on the name of the method)."
Du hast es also schon mal richtig gemacht.

Zu deinem Problem:
Lies nochmal in der TSRef zum Thema nach,
vor allem auch den Hinweis auf typo3/sysext/cms/tslib/media/scripts/example_callfunction.php.
Beispielsweise hast du vergessen, deiner Funktion $content und $conf zu übergeben sowie $content per return zurückzugeben.
Dann ist es bei unerwarteten Ergebnissen immer eine gute Idee,
sich per debug($my_variable,'irgendein Label'); zu überprüfen,
ob überhaupt irgendetwas vorhanden ist, was sich zurückgeben läßt.
Im InstallTool mußt du eventuell die entsprechenden Parameter ändern,
falls du Fehlermeldungen abgeschaltet hast.

Chrissli ·

Kann mich täuschen, aber die Funktionsnamen die mit user_ beginnen müssen waren bei den User-Conditions, so wie Crockett es umgesetzt hat sollte, wie jenses bereits gesagt hat, vollkommen korrekt sein, ebenso wie das Fehlen der Übergabeparameter, in wie weit die erforderlich sind kann ich dir nicht sagen, aber korrekterweise solltest dudie Übergeben, auch wenn nicht benötigt.

Eines ist mir aber aufgefallen:
Dein return erfolgt nur wenn $rimage nicht leer ist.
Versuch doch mal
1. Pfad absolut anzugeben zum Test. Da Fehler von Typo3 nicht direkt angezeigt werden, kann es ja einfach sein, dass der relative Pfad nicht ganz passt.
2. Sollte auch das nicht funktionieren, versuche doch mal die Funktion ( zuerst mit absolutem Pfad ) ausserhalb von Typo3 aufzurufen. Vielleicht liegt der Fehler ganz wo anders