Zum Inhalt springen

phpfunction einem marker zuweisen

Erstellt am 16. Juli 2012 · 6 Antworten · letzte Antwort am 19. Juli 2012

Tags: Frage

newbie12 ·

Hallo liebe T3-Community,
also bisher bin ich ja recht weit alleine gekommen, bei meinem ersten Typo3 Projekt. Allerdings steck ich jetzt an nem Problem, wofür ich noch keine Lösung im www gefunden habe, und hoffe jemand hier kann mir eine Lösung oder auch einen Ansatz irgendwie zeigen?!

Also, ich habe eine eigene Extension geschrieben. In dieser ist eine etwas spezielle PHP-Function definiert. Ist es nun irgendwie möglich, dass ich nur diese Funktion über einen im HTML-Template gesetzten Marker aufrufen kann?

sprich in der art: ###AKTUELL### ruft mir die PHP-Funktion "function actual() { ... } auf.

Wäre zutiefst für jede Hilfe dankbar.

Lieben Gruß
newbie12

P.S.
gesucht hatte ich - leider ohne Erfolg (und zugegeben nur in google, aber dafür dort schon seit längerer Zeit!!!)

Chrissli ·

Sieh mal nach unter "PHP_SCRIPT" / "PHP_SCRIPT_INT"
bzw.
"USER" und "USER_INT", das sollte dir weiterhelfen.
Es ist mir aber bis heute ein Rätsel wie manche Leute hier anscheinen vollwertige Extensions schreiben ohne irgendwelche Typoscript-Grundlagen zu kennen.
Aber vielleicht haben wir auch nur unterschiedliche Ansichten was eine Extension ist...

newbie12 ·

Hy Chrissli,
danke für deine Hinweise - geh ich mir mal gleich anschauen.

Ich sag immer "Learning by doing" - Ist doch der beste Weg was zu lernen 😉
Und bisher konnte ich doch schon erfolgreich ein paar kleinere Module umsetzen 🙂
Aber irgendwann braucht doch jeder mal Hilfe 8-)

THX nochmal
newbie12

P.S.
Nice Avatar 8-)

Chrissli ·

Sorry, war gestern etwas angefressen, deshalb die pampige Antwort.

Um PHP zu verwenden gibt es folgende 2 Optionen ( abgesehen vom schreiben eigener Extensions ).

1. PHP_SCRIPT ( oder auch _INT wenn das Script nicht gecached und somit jedes mal ausgeführt werden soll.
Hier für erstellst du eine PHP-Datei, z.b.

<?php
function meine_funktion() {
  return "blahblahblah";
}
$content = meine_funktion();
?>

und bindest diese z.b. mit

lib.meinscript = PHP_SCRIPT
lib.meinscript.file = fileadmin/meinphpscript.php

in dein TS ein und weißt dies einem Marker zu ( oder auch direkt ohne Umweg über lib/temp )
And dieser Stelle wird das PHP-Script eingefügt ( vermutlich per include ) und der Wert aus $content ( das ist Vorgabe )
darin stehen

2. per USER ( _INT, hier funktioniert das mit dem Cached anders herum, als USER_INT markierte Skripte werden gecached )
Die aufgerufenen METHODEN berufen sich auf Funktionen von Klassen, die vorher eingebunden wurden:

<?php
class user_MeineKleineToolbox {
  public function meine_funktion($content,$conf) {
    if(isset($conf['haenge_an') && !empty($conf['haenge_an')) {
      $content .= $conf['haenge_an'];
    }
    return $content;
  }
}
?>

Wichtig: die zu übergebenden Parameter sollten enthalten sein. $content beinhaltet den Inhalt der zu diesem Zeitpunkt mit übergeben werden kann ( soweit vorhanden ) und conf evtl. übergebene Parameter, siehe unten.
Die Klasse MUSS mit user_ beginnen, sonst muss dies im Install-Tool extra angegeben werden.

Eingebunden wird das ganze so:

page.includeLibs.toolbox = fileadmin/user_MeineKleineToolbox.php
...
lib.meinscript = USER
lib.meinscript {
  userFunc = user_MeineKleineToolbox->meine_funktion
  haenge_an = dieser Text wird angehaengt
  userFunc.haenge_an = dieser Text wird angehaengt
  # Bin mir an dieser Stelle nicht sicher ob der Parameter an userFunc angehängt werden muss nicht
}

Bei der Angabe von userFunc kann auf die Klammer am Methodenname verzichtet werden, da automatisch die Parameter content und conf übergeben werden und diese Notation nur dazu verwendet wird um die Klasse und Funktion anzugeben.

Scheinbar instantiiert Typo hier jedes Mal ein Objekt mit dem Namen der Klasse und entfernt dieses wieder nach Ausführung der Methode. Solltest du Objektattribute übergreifend verwenden wollen, solltest du diese in einer statischen Variable innerhalb der Klasse hinterlegen.

newbie12 ·

Hi Chrissli,
ist doch kein Problem - Nen schlechten Tag hat ja jeder mal 😉

Danke für deine ausführliche Erklährung.
Ich hab das ganze jetzt so gelöst, dass ich diese spezielle function in eine eigene PHP-Datei gepackt habe, und diese weise ich dann mit dem von dir genannten "PHP_SCRIPT" über TS meinem Marker zu.
Funktioniert auch einwandfrei 😃

Danke & Gruß
newbie12

Edith:
Dumme Frage, aber wie kann ich den Beitrag bzw. meine Frage als "gelöst" markieren???
Ich find das leider nirgendwo 🙁

Chrissli ·

Du machst deinen Thread auf, scrollst ganz nach unten, dann findest du dort drei große Icons.

1: Benachrichtung per E-Mail wenn etwas im Threat gepostet wird ( an | aus )
2: Thread zu deinen Favoriten hinzufügen
3: Thread als gelöst markieren ( unter dem Icon sollte derzeit "offen" stehen )

newbie12 ·

#angry#
Bin ich doof 🙁

SORRY - Ich hab die ganze zeit versucht auf das Icon direkt zu klicken - Auf die Idee auf den Text zu klicken bin ich irgendwie nicht gekommen.

1.000 Dank - und nochmals TSCHULDIGUNG :o