Tutorials

Einige nützliche Hilfen und Code-Schnipsel, die ich immer wieder benötige und deshalb hier für alle sammle.

Zurück zur Übersicht

TYPO3: ViewHelper zum rendern von tt_content anhand der Uid

#Tutorials#TYPO3#PHP

Um in Fluid tt_content Elemente anhand ihrer UID fertig gerendert auszugeben, benötigt man einen kleinen ViewHelper. Dieser ruft das RecordsContentObject auf und rendert dieses anhand einer Konfiguration heraus. In diesem Beispiel funktioniert das Ganze mit tt_content und der Uid eines tt_content Datensatzes.

Der ViewHelper Code:

<?php
namespace Vendor\Artest\ViewHelpers;
/**
 * ViewHelper zur Rückgabe eines geparsten tt_content Elementes
 */

class ContentViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {
  // output html since TYPO3 8LTS
  protected $escapeOutput = false;

  /**
   * Parse content element
   *
   * @param  int     UID des Content Element
   * @return   string  Geparstes Content Element
   */
  public function render($uid) {
    $conf = array( // config
      'tables' => 'tt_content',
      'source' => $uid,
      'dontCheckPid' => 1
    );
    return $this->objectManager->get('TYPO3\CMS\Frontend\ContentObject\RecordsContentObject')->render($conf);
  }
}

Kommentare

  • frank
    Danke! deine Seite hat mir schon oft geholfen. Auch der praktische ContentViewHelper hier ist mir grade sehr nuetzlich!
    Antworten
    • Andre Rinas
      Freut mich sehr!
      Antworten
  • Marc
    Schade, tut in TYPO3 9.5 nicht mehr, führt jetzt zu einem
    "Maximum function nesting level of '400' reached, aborting!"
    Antworten
  • macpat
    Wie sieht es mit Sprachen aus. Wenn ich das verwende bekomme ich wohl die Standardsprache ausgegeben aber die tt_content in der Übersetzung nicht. Hier wird die l10_parent anstatt der Uid im Fluid ausgegeben

    <f:for each="{contents}" as="content">
    <f:if condition="{content.casestudy}=={caseStudy.uid} || {content.casestudy}=={l10parent}">
    <f:format.raw><m:Content uid="{content.uid}" /></f:format.raw>
    </f:if>
    </f:for>
    Antworten
  • Hans
    Soweit, so gut ... aber wie kann ich einzelne CE eigene Templates zuweisen?
    Irgendwas wie das hier ...
    'templateName' => 'Contents/Boxenteaser',
    Antworten
    • Andre Rinas
      Hallo Hans, ich verstehe nicht genau was du meinst, erreichen willst?

      Grüße André
      Antworten
      • Hans
        render() rendert je nach CE die Typo3 Fluid Templates. Jetzt möchte ich eine Box erstellen und dafür ein eigenes Template verwenden, da z.B. nicht alle Inhalte von textmedia Template übernommen werden sollen.
        Also etwa so wie in Typoscript:
        xmLib.xmBoxenteaser = COA
        xmLib.xmBoxenteaser.10 = CONTENT
        xmLib.xmBoxenteaser.10.renderObj.textmedia.templateName = xmBoxenteaser
        Viele Grüße, Hans
        Antworten

Hinterlasse einen Kommentar

Antworten abbrechen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Kommentar wird gespeichert
Danke für deinen Kommentar! Sobald er freigegeben wurde erscheint er hier.