blog.bartlweb - a technologist's external brain

Thema: TYPO3

eingeloggte Benutzer in Typo3-Extension abfragen

Um in einer Typo3-Extension abzufragen ob ein Frontend-Benutzer angemeldet ist genügt die Abfrage der folgenden boolschen Variable:

$GLOBALS['TSFE']->loginUser

Des weiteren liest Typo3 falls ein Benutzer eingeloggt ist immer den kompletten Datensatz des Benutzers aus der Tabelle fe_users aus. Somit entfällt hier eine Datenbankabfrage und alle Spalten können bequem über das Array $GLOBALS['TSFE']->fe_user->user ausgelesen werden. So ist z.B. in folgender Variable das Passwort des Benutzers gespeichert:

$GLOBALS['TSFE']->fe_user->user['password']

Caching einer Extension per Typoscript deaktivieren

Die meisten Extensions benutzen das Typo3-interne Cachingsystem. Dieses lässt sich entweder durch umschreiben der Extension deaktivieren oder auch ganz einfach jederzeit per Typoscript.

plugin.tx_pluginname_pi1 = USER_INT

Typo3-Cache aus einer Extension heraus löschen

In Ausnahmesituation kann es erforderlich sein den Frontend-Cache einer Seite oder auch aller Seiten aus einer Typo3-Extension heraus zu löschen. Setzen Sie diese Lösung mit bedacht ein, da bei zu häufigem Einsatz die Ladezeiten Ihrer Website stark steigen können.

alle Cache-Tabellen leeren

$TCE = t3lib_div::makeInstance('t3lib_TCEmain');
$TCE->admin = 1;
$TCE->clear_cacheCmd('all');

gesamten Seiten-Cache löschen

$TCE = t3lib_div::makeInstance('t3lib_TCEmain');
$TCE->admin = 1;
$TCE->clear_cacheCmd('pages');

Cache einer bestimmten Seite löschen

$TCE = t3lib_div::makeInstance('t3lib_TCEmain');
$TCE->clear_cacheCmd(<pid>);

Beispiel: Cache für die Seite mit ID 3 löschen

$TCE = t3lib_div::makeInstance('t3lib_TCEmain');
$TCE->clear_cacheCmd(3);

Typo3 4.2.x List-Module Error

Manchmal kann es vorkommen, dass in Typo3 4.2.x im List Modul folgender Fehler auftritt:

Warning: Invalid argument supplied for foreach() in /typo3_src-4.2.3/typo3/class.db_list.inc on line 694

Diese Fehlermeldung im List-Modul lässt sich durch eine kleine Abfrage in der Datei “class.db_list.inc” abfangen. Dazu ändern Sie ab Zeile 694 den folgenden Code-Block:

  foreach($TCA[$table]['columns'] as $fN => $fieldValue) {
    ...
  }
}

in

  if (is_array($TCA[$table]['columns'])) {
    foreach($TCA[$table]['columns'] as $fN => $fieldValue) {
      ...
    }
  }
}

Achtung: Änderungen gehen bei einem Typo3-Update verloren!

RealUrl Konfiguration

Hier finden Sie eine sinnvolle Beispiel-RealUrl-Konfiguration, die auch bereits die Extension tt_news abdeckt.

RealUrl installieren

Laden Sie die Extension aus dem Typo3-Repository und Installieren Sie diese.

Apache .htaccess anlegen

Bei den meisten Typo3-Installationen ist die benötigte .htaccess-Datei bereits vorhanden, ansonsten sollte der Inhalt wie folgt lauten:

RewriteEngine On
RewriteRule ^(typo3|typo3temp|typo3conf|t3lib|tslib|fileadmin|uploads|showpic\.php)/ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* index.php [L]

Konfiguration einfügen

Laden Sie die unten gelistete Datei herunter und entfernen Sie die Endung .txt, legen Sie diese dann unter "typo3conf/" ab.

realurl_conf.php.txt

RealUrl aktivieren

Fügen Sie das folgende TypoScript zu Ihrem Template hinzu um RealUrl zu aktivieren.

#deactivate simulateStaticDocuments
config.simulateStaticDocuments = 0
#prefix local anchors with baseurl
config.prefixLocalAnchors = all
#enable realurl
config.tx_realurl_enable = 1

Typo3 Standardheader anpassen

Mit dem folgenden TypoScript passen Sie den Standard-Header der Content-Elemente an. Sollte kein Header angegeben worden sein, wird dieser automatisch ausgeblendet.

lib.stdheader >
lib.stdheader=TEXT
lib.stdheader.field=header
lib.stdheader.stdWrap.wrap=<h2>|</h2>
lib.stdheader.stdWrap.required = 1

Info: Standardmäßig ist der Header als H1 definiert.

Eine weitere Möglichkeit den Standardheader unter Berücksichtigung der Header-Layouts selbst zu definieren, könnte so aussehen:

lib.stdheader >
lib.stdheader=CASE
lib.stdheader{
  key.field=header_layout
 
  1=TEXT
  1 {
    field=header
    stdWrap.wrap=<h2>+ |</h2>
    stdWrap.required = 1
  }
 
  default < .1
}

RealUrl Fehlermeldung “Segment was not a keyword for a postVarSet as expected”

Fehlermeldung

Error!  Reason: Segment "pagetitle" was not a keyword for a postVarSet as expected!

Problem

Wird auf eine Typo3-Installation mit einer existierenden RealUrl aber einer per TypoScript nicht definierten BaseUrl zugegriffen, kommt RealUrl ins schleudern und wirft oben genannte Fehlermeldung. Selbiges kann bei einem inkonsistenten RealUrl-Cache passieren. Achtung: Wird der RealUrl-Cache gelöscht gelingt kurzfristig der Zugriff auch mit nicht eingestellter BaseUrl.

Lösung

Abhilfe schafft das Löschen des Caches und der Zugriff nur über die definierte BaseUrl.

Subtitel anstatt des Titels in einem mit TypoScript generierten Menü ausgeben

Gerade bei unkonventionellen oder sehr langen Seitentiteln ist es oft erwünscht im Menü andere Titel darzustellen. Typo3 bietet dazu das Feld "Subtitle" an, damit dieses jedoch falls ausgefüllt anstatt des Titels im Menü aufscheint muss dort die Zeile:

NO.stdWrap.field = title

in folgendes geändert werden:

NO.stdWrap.field = subtitle // title

RTE Content in Extension ausgeben

Datenbankfelder in einer eigenen Extension ausgeben ist keine Hexerei, um jedoch RichTextEditor-Felder sammt Formatierung auszugeben, müssen dieses Felder an eine spezielle Funktion übergeben werden, die als Rückgabe den richtig formatierten Quelltext zurückliefert.

$this->pi_RTEcssText($text)

Aktuelle Seiten ID in Typo3 Extension auslesen

Um die ID der aktuell aufgerufenen Seite (also jene die die Extension enthält) in einer Extension auszulesen gibt es 2 Möglichkeiten:

$GLOBALS["TSFE"]->id

oder

$this->cObj->data['pid']