Zum Inhalt springen

Typo3 6.1.3 PHP über USER einbinden

Erstellt am 10. August 2013 · 7 Antworten · letzte Antwort am 13. August 2013

Tags: TYPO3 6.x, Frage

Mango89 ·

Hallo Zusammen

ich hoffe Ihr könnt mir etwas weiter helfen. Ich versuche schon seid ca. 1 Woche ein PHP-Script einzubinden. Mittlerweile bin ich soweit, dass ich weis, dass es wohl nur über die USER-Funktion geht...

im TS Config habe ich nun folgendes eingetragen:

includeLibs.my_functions = fileadmin/templates/GrundScripte/test.php
page {
  20 = USER
  20.userFunc = user_meineKlasse->meineFunktion
  20.stdWrap.wrap = |
}

Zu Testzwecken habe ich folgendes PHP-Script verwendet:

<?php
class user_meineKlasse{
  function meineFunktion(){
    return "abc";
  }
}
?>

Soweit so gut! Das "abc" wird mir jedoch auf allen Seiten angezeigt, was jedoch nicht meine Vorstellung war.
Ich möchte gern diese Ausgabe als Inhaltselement angezeigt bekommen.
Mein versuch bestand darin es mit

[globalVar = TSFE:id = 12]...[end]

zu versuchen... Wunderbar wird schon mal nur auf einer Seite angezeigt, jedoch nicht als Inhaltselement 🙁...

Kann mir jemand weiterhelfen, irgendwie stehe ich auf dem Schlauch. Habe auch versucht anstelle die ID:12 der Seite zunehmen, die ID des Inhaltselement, dann wird mir aber gar nichts angezeigt.

Liebe Grüße

Chrissli ·

Was genau versuchst du denn zu bezwecken ?
Wenn du ein PHP-Skript per USER an einen Container bindest wird dessen Ausgabe eben genau da angezeigt.

Du könntest es z.b. an einen Marker auf deiner Seite binden der im Anschluss zu deinen anderen Inhaltselementen steht. Oder aber auch an den entsprechenden Inhaltstyp in tt_content anhängen.

Aber so pauschal ist dir relativ schlecht zu helfen...

Mango89 ·

Einfach gesagt: ich habe einen main-bereich, der ist in 2 Spalten aufgeteilt. Spalte1=linke Spalte, Spalte2= rechte Spalte. Jetzt will ich einfach ein externes PHP-Script ein binden, welches mir Verzeichnisse außerhalb des Webseit-Rootordners ausliest und mir gewisse Dateitypen nach aktualität ausgibt. Diese Ausgabe hätte ich dann gerne in Spalte1 angezeigt.

Notfalls falls es Hilft könnte man sich das ganze auch per VNC oder Teamviewer anschauen...

Deine Aussage: "... Wenn ich... an ein Content binde..." Öhm wie binde ich das denn an ein Content bzw. an Spalte1 ? Gerade das scheint nicht zu funktionieren

LG

Mango89 ·

Hier mal mein PHP-Script, welches ich gerne einbinden möchte

<?php 

class FileExtensionFilterIterator extends FilterIterator 
{ 
    protected $whitelist; 

    public function __construct(Iterator $iterator, array $whitelist) 
    { 
        parent::__construct($iterator); 
        $this->whitelist = $whitelist; 
    } 

    public function accept() 
    { 
        $fileInfo = parent::current(); 

        // Nur Dateien 
        if (!$fileInfo->isFile()) { 
            return false; 
        } 

        // Nur mit Endung aus $whitelist 
        $pi = pathinfo($fileInfo->getFilename()); 
        if (!in_array(strtolower($pi['extension']), $this->whitelist)) { 
            return false; 
        } elseif (strtolower($pi['filename']) == "sample") {
            // wenn name sample ist
            return false;
		}

        return true; 
    } 
      
     
} 



$path      = 'K:\FTP\VIDEO\Cinema'; 
$whitelist = array('avi', 'mkv', 'flv', 'mp4', 'divx'); // Aufzulistende Dateiendungen 

$iterator = new FileExtensionFilterIterator( 
                new RecursiveIteratorIterator( 
                    new RecursiveDirectoryIterator($path)), 
                $whitelist); 
                 

 
$data = array();
// erstellen eines ArrayObjects mit den SplFileInfo-Objekten 
foreach($iterator as $value) 
{ 
    $data[$value->getatime()] = $iterator->getFileInfo(); 
} 

// sortieren 
krsort($data); 


// ausgeben 
foreach($data as $key=> $value) 
{ 
    if($value->getatime() >= strtotime ('-30 day')){ 
        return  $value->getFilename() . '<br/>' . ' Aktualisiert: ' . date ("d.m.Y H:i:s.", $value->getatime()) .' <br/>'
		.'===================================================================== '.' <br/>'; 
    } 
}  

?>

Der Code listet mir die neusten Film-Dateien auf.
Diese Auflistung hätte ich nun gerne als Inhalt in Spalte1 (linke) im Main-Bereich angezeigt. In Spalte2 (rechte) sollen mir alle Dateien aufgelistet werden.

Mit:

includeLibs.my_functions = fileadmin/templates/GrundScripte/test.php
page {
  20 = USER
  20.userFunc = FileExtensionFilterIterator->accept [b](<- Ist dies Richtig?)[/b]
  20.stdWrap.wrap = |
}

wir mir leider nichts außer die "Oops-Seite" von Typo3 angezeigt.

Mit der Test.php und dem Befehl:

[globalVar = TSFE:id = 12]...[end]

bekom ich es schon mal hin, dass es mir nur auf Seite 12 angezeigt wird, aber leider nicht als Inhalt sondern, es wird zwischen dem Main-Bereich und dem Foot-Bereich angezeigt.

Und jetzt stehe ich irgendwie auf dem Schlauch und sehe vor lauter Bäumen den Wald nicht mehr!

Chrissli ·

Du hast hoffentlich noch mehr TS auf deiner Seite als das was du gepostet hast 🙂
Im normalfall arbeitest du ja z.b. mit Template und Marker.
D.h. anstelle dein PHP-Skript an page.20 zu hängen, übernimmst du diesen Code für den Marker der Spalte1.
Dabei solltest du auch beachten, dass eigene Klassen die via USER eingebunden sind mit "user_" beginnen müssen um zu funktionieren.

Später sieht das etwa so aus:

includeLibs.MeineKlasse = fileadmin/scripts/MeineKlasse.php

page = PAGE
page {
  typeNum = 0
  config {
    noPageTitle = 2
    metaCharset = utf-8        
  }
}

...

temp.irgendwas = USER_INT
temp.irgendwas {
  userFunc = user_MeineKlasse->meineFunktion 
  meinParameter = 1  // beim Funktionsaufruf koennen Parameter ueber die $conf-Variable uebergeben werden 
}

...

page.10 = TEMPLATE
page.10 {

  template = FILE
  template.file = fileadmin/templates/meintemplate.html  

  marks.spalte1 < temp.irgendwas
}

Edit:

Für die Parameterübergabe sollte dein PHP etwa so aussehen:

<?php
class user_meineKlasse{
    function meineFunktion($content,$conf){
		// $content beinhaltet den Content zu diesem Zeitpunkt
		// $conf u.a. die uebergebenen Paramter
		// einfach mal mit var_dump() ausgeben lassen
		return "abc";
	}
}
?>
Mango89 ·

Danke werde es später mal ausprobieren, nur sehe ich mein Problem jetzt schon darin, dass ich mein Template mit templavoila gemacht habe! Marker verwende ich so gut wie keine, da es bei mir bisher nicht funktioniert hat! Die Marker werden nie ausgetauscht.

Chrissli ·

Sorry, TV ist nicht mein Gebiet, d.h. die Integration deines USER-Skripts in den TV-Marker muss jemand anderes klären.

Mango89 ·

Naja ich denke spricht ja trotzdem nichts dagegen, das per TypoScript einzubinden... Nur irgendwie funktioniert das nicht so ganz mit dem Marker...