Zum Inhalt springen

Typo3-Methoden aus PHP-Script aufrufen

Erstellt am 21. März 2006 · 2 Antworten · letzte Antwort am 27. März 2006

Tags: Frage

f i s c h a ·

Hallo zusammen!

Ich habe eine Frgae zum Aufruf von T3-Methoden aus einem PHP-Script heraus.

Aber hier erst mal eine kurze Beschreibung:

In der mittleren Spalte des Webauftritts habe ich 6 verschiedene Layouts für den Inhaltstyp 'textpic' verbaut.
Das Layout wird über die Auswahlbox 'header_layout' eingestellt.
Nummer 0 - 3 werden mittels Tyopscript beschrieben, Nummer 4 und 5 über eine mit USER_INT eingebundene Klasse.

Die Beschreibung für Typ 0 schaut z.B. so aus:

  # header_layout 0: 'Normal' - Headline/Text

  renderObj.0 = COA
  renderObj.0 {

    10 = TEXT
    10.fieldRequired = header
    10.field = header
    10.wrap = <h4>|</h4>
    
    20 = TEXT
    20.fieldRequired = bodytext
    20.field = bodytext
    20.wrap = |
    # convert linebreaks to html-breaks
    20.brTag= <br />
    20.parseFunc < tmp_tt_content_text.20.parseFunc
    20.editIcons < tmp_tt_content_text.20.editIcons
    
    30 = TEXT
    30.value = <div class="spacing"></div>
  }

Das PHP für Typ 4 und 5 sieht dann in etwa so aus:

<?php

class user_content_rendering {
  
  var $cObj;        // Reference to the parent (calling) cObj set from TypoScript

  function getShortTeasers($content,$conf) {

    $res = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tt_content', 'tt_content.deleted=0 AND tt_content.hidden=0 AND header_layout=4 AND pid='.intval($GLOBALS['TSFE']->id).' ORDER BY sorting');
    $counter = 0;
    $output = "";
        
  while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
        
    if ($counter%2==0) {
      $output.='<div class="twin">';
      $div_open = true; 
    }
  
    $output .= '<div class="tsSibling">';
    $output .= '<h4 class="tsHead"><span>'.$row['header'].'</span></h4>';
    $output .= '<img src="uploads/pics/'.$row['image'].'" alt="" height="65" width="203" />';
    $output .= '<div class="tsBody">'.$row['bodytext'].'</div>';
    $output .= '</div>';
               
    if ($counter%2!=0) {
      $output.='</div><div class="spacing"></div>';
      $div_open = false;
    } 

    $counter++;
  }

  if ($div_open) {
    $output.='</div><div class="spacing"></div>';
    $div_open = false;
  } 
  
  return $output;
  }  
}

?>

So weit, so gut. Die TS-Varianten machen das, was sie sollen.
Die PHP-Version zeigt alles an, wie gewünscht, bis auf die Links (<link /> zu <a>), die ich ja im TS mit Hilfe der parseFunc-Funktionen umwandele, sowie der Icons für das FE-Editing.

Wie mache ich das #paralyzed# ?? Wie kann ich z.B. auf die Methode TS_links_rte der Klasse t3lib_parsehtml_proc zugreifen??
Ich habe Sachen gesehen, wie t3lib_div::methode_xy(), bekomme aber die Verbindung nicht hin.

Danke schonmal und Gruß an das Forum!

f i s c h a

troopy ·

Hi fischa,

kannst Du Deine Styledefinition auch als USER-OBJECT einbinden? Ich sehe jedenfalls keinen Grund, warum das vom Caching ausgenommen werden sollte.
Auf diese Weise hättest Du folgende Möglichkeit, die Links ordentlich dazustellen:

includeLibs.content_rendering = pfad/zum/script

10 = USER
10.parseFunc < lib.parseFunc_RTE
10.userFunc = user_content_rendering->getShortTeasers

im PHP-Code kommst Du so an die Funktion ran:

$bodytext = $this->cObj->parseFunc($row['bodytext'],$conf['parseFunc.']);
$output .= '<div class="tsBody">'.$bodytext.'</div>';

So funktioniert das bei mir ganz sauber und es hat den Vorteil, dass der Bereich nicht jedesmal beim Seitenabruf generiert wird sondern sauber im Cache liegt.

f i s c h a ·

.. ja genau danke!

Ich bin inzwischen auch schon darauf gekommen. Ich hatte das die ganze Zeit schon als USER_INT eingebunden (geht auch). Wusste nur a) nicht, dass ich weiterhin im TS das Objekt konfigurieren kann. Hab' ich jetzt so gemacht:

tmp_tt_content_text < tt_content.text

# fill marker CONTENT_MIDDLE_SHORT_TEASERS with content
page.10.marks.CONTENT_MIDDLE_SHORT_TEASERS {

  table = tt_content
  select.begin = 0
  select.max = 1
  select.orderBy = sorting
  select.where = colPos = 0 and header_layout = 4
    
  renderObj = CASE
  renderObj.key.field = header_layout

  
  # # #
  # header_layout 4: 'Layout 4' - Short Teaser
  # # #  

  # call userfunction
  renderObj.4 = USER_INT
  renderObj.4.userFunc = user_content_rendering->getShortTeasers

  renderObj.4.brTag= <br />
  renderObj.4.parseFunc < tmp_tt_content_text.20.parseFunc
  renderObj.4.editIcons < tmp_tt_content_text.20.editIcons
    
} # end CONTENT fill CONTENT_MIDDLE_SHORT_TEASERS

und b) hab' ich die Objekthierarchie nicht geblickt. Jetzt hab ich das aber geschnallt und es so gemacht, wir du es auch vorschlägst:

<?php
$output .= '<div class="tsBody">'.$this->cObj->stdWrap($row['bodytext'], $conf).'</div>';
?>