Tag: TYPO3

TYPO3: PHP Runtime Deprecation Notice: Function split() is deprecated

Eine selbst geschriebene Bibliothek, welche von einer anderen Erweiterung eingebunden wird, erzeugt in einer TYPO3 6 Version die Fehlermeldung “PHP Runtime Deprecation Notice: Function split() is deprecated” beim Aufruf im Backend. Die Meldung ist zwar grün und es ist auch nur eine Notice, trotzdem sieht es für den Benutzer etwas befremdlich aus. Nach kurzer Recherche im Internet findet sich folgender Hinweis: split ersetzen durch explode (Quelle: http://www.muellerwirtz.de/schnipsel.html).

Theoretisch kann hier wirklich eine 1:1 Wortersetzung durchgeführt werden, wenn nicht zufälligerweise auch Variablen “split” heißen oder enthalten, ggf. einfach nach ” split(” suchen und dies entsprechend durch ” explode(” ersetzen.

[random_content group_id=”211″ num_posts=”1″]

Call to undefined method GeneralUtility::readLLXMLfile()

Eine Aktualisierung von der TYPO3 CMS Version 4.5 LTS auf die 6.2 LTS wird wahrscheinlich die Tage häufiger durchgeführt, da es sich um die LTS-Versionen handelt und bei der 4.5 der Support ausläuft. Besonders wenn viele Extensions installiert sind, kann der Umstieg mehr als holprig werden. In diesem Fall kam es im Backend zu einer Fehlermeldung, wenn man neue Inhalte anlegen wollte:

Fatal error: GeneralUtility::readLLXMLfile

Folgende Fehlermeldung wird angezeigt, wenn auch ggf. in einer anderen Datei:

Fatal error: Call to undefined method TYPO3\CMS\Core\Utility\GeneralUtility::readLLXMLfile() in class.tx_xyz_wizicon.php on line 65

Glück im Unglück, die Fehlermeldung ist sehr sprechend und es ist auch gleich der Dateiname und die Zeilennummer angegeben, wodurch die Behebung schnell durchgeführt werden kann.

Der Fix: makeInstance(‘t3lib_l10n_parser_Llxml’)

Einfach in die angezeigte Datei wechseln und mittels Strg+F die entsprechende Stelle suchen und folgende Ersetzung durchführen:

// $LOCAL_LANG = t3lib_div::readLLXMLfile($llFile, $GLOBALS['LANG']->lang);
$parser = t3lib_div::makeInstance('t3lib_l10n_parser_Llxml');
$LOCAL_LANG = $parser->getParsedData($llFile, $GLOBALS['LANG']->lang);

Anschließend den Cache leeren und erneut Testen, ggf. kommt in einer Datei der Aufruf mehrmals vor, bzw. in vielen unterschiedlichen Dateien.

Gefunden hier: http://forge.typo3.org/issues/44413

Eine weitere Problematik ist häufig die Depraction-Meldung bzgl. Split().

[random_content group_id=”211″ num_posts=”1″]

TYPO3 Merksatz #11: TYPO3 ist eine Familie

Auf der T3CON12 in Stuttgart hat Robert Lemke das neue Namens-Konzept von TYPO3 vorgestellt. Dazu gibt es auf der offiziellen Seite auch verschiedene Artikel (http://typo3.org/news/article/a-brand-new-way/, http://typo3.org/the-brand/a-brand-new-way/). Vollkommen richtig wäre es in Zukunft TYPO3 CMS bzw. TYPO3 Neos und TYPO3 Flow zu sagen. Jedoch steht nur TYPO3 weiterhin für das CMS und Neos und Flow können auch ohne den TYPO3 Prefix betitelt werden.

[random_content group_id=”211″ num_posts=”1″]

CoSchni#10: TYPO3 CMS Register

Im TypoScript kann auf verschiedene Konstanten bzw. Register zurückgegriffen werden. Diese beinhalten z.B. die Anzahl vom Menüelementen bei der jeweiligen Seite oder viele andere Sachen. Der häufigste Anwendungszweck den ich bisher kenne, ist die dynamische Aufteilung des Menüs in zwei Teile, wie in diesem Beispiel verdeutlicht: http://www.typo3wizard.com/de/snippets/menus/menue-dynamisch-in-2-teile-aufteilen.html

Neben dem Register “count_menuItems” gibt es noch eine Reihe weiterer. Die einzige Dokumentation die ich bisher kenne, ist im Bugtracker (http://forge.typo3.org/issues/11564) von Francois Suter und schon über zwei Jahre alte. Die letzte Aktualisierung erfolgte jedoch vor 28 Tagen, von daher gehe ich aus, das es aktuell ist. Nachfolgend mal alle Register aufgeschlüsselt:

[PHP]
class.tx_cssstyled_content_pi1.php

function render_uploads($content,$conf) – Rendering the “Filelinks” type content element, called from TypoScript (tt_content.uploads.20):
$GLOBALS[‘TSFE’]->register[‘ICON_REL_PATH’] – keeps relative path to file + filename
$GLOBALS[‘TSFE’]->register[‘filename’] – self-explainable
$GLOBALS[‘TSFE’]->register[‘path’] – self-explainable
$GLOBALS[‘TSFE’]->register[‘fileSize’] – self-explainable
$GLOBALS[‘TSFE’]->register[‘fileExtension’] – self-explainable
$GLOBALS[‘TSFE’]->register[‘description’] – description for current file from ‘imagecaption’ field
$GLOBALS[‘TSFE’]->register[‘linkedIcon’] – not sure about that, but I think is is bool value, defining, should file icon be linked or not
$GLOBALS[‘TSFE’]->register[‘linkedLabel’] – same as above, but for label

function render_textpic($content, $conf) – Rendering the IMGTEXT content element, called from TypoScript (tt_content.textpic.20)
$GLOBALS[‘TSFE’]->register[‘imageCount’] – count of all image in block
$GLOBALS[‘TSFE’]->register[‘renderGlobalCaption’] – bool value, which defines, shoul a global caption be rendered below image block
$GLOBALS[‘TSFE’]->register[‘IMAGE_NUM’] – number of current image in set (DEPRECATED)
$GLOBALS[‘TSFE’]->register[‘IMAGE_NUM_CURRENT’] – number of current image in set (not deprecated :))
$GLOBALS[‘TSFE’]->register[‘ORIG_FILENAME’] – path to the image + image name
$GLOBALS[‘TSFE’]->register[‘imagewidth’] – self-explainable
$GLOBALS[‘TSFE’]->register[‘imagespace’] – self-explainable
$GLOBALS[‘TSFE’]->register[‘imageheight’] – self-explainable
$GLOBALS[‘TSFE’]->register[‘rowwidth’] – width of whole block of images
$GLOBALS[‘TSFE’]->register[‘rowWidthPlusTextMargin’] – same, as above + margin to the text
$GLOBALS[‘TSFE’]->register[‘columnwidth’] – maximum possible width of image block + spaces at left and right side of block
$GLOBALS[‘TSFE’]->register[‘totalwidth’] – not sure, but I guess it is same as $GLOBALS[‘TSFE’]->register[‘rowwidth’]

class.tslib_content.php

function IMGTEXT
$GLOBALS[‘TSFE’]->register[‘IMAGE_NUM’]
$GLOBALS[‘TSFE’]->register[‘IMAGE_NUM_CURRENT’]

function HMENU
$GLOBALS[‘TSFE’]->register[‘count_HMENU’] – current number of a generated HMENU on a website
$GLOBALS[‘TSFE’]->register[‘count_HMENU_MENUOBJ’] – number of current menu item for current HMENU object

function SEARCHRESULT
$GLOBALS[‘TSFE’]->register[‘SWORD_PARAMS’] – search words

function TEMPLATE
$GLOBALS[‘TSFE’]->register[‘SUBPART_’.$theKey] – contains html code of subpart, defined by $theKey

public function SWFOBJECT
$GLOBALS[‘TSFE’]->register[‘MMSWFID’] – not sure, what it used for, but it holds: uniqid(‘mmswf’);

public function QTOBJECT
$GLOBALS[‘TSFE’]->register[‘MMQTID’] – uniqid(‘mmqt’);

function lastChanged($tstamp) – Sets the SYS_LASTCHANGED timestamp
$GLOBALS[‘TSFE’]->register[‘SYS_LASTCHANGED’] – timestamp of page (or content on current page) last modification

function splitObj($value, $conf) – Implements the “split” property of stdWrap; Splits a string based on a token (given in TypoScript properties), sets the “current” value to each part and then renders a content object pointer to by a number.
$GLOBALS[‘TSFE’]->register[‘SPLIT_COUNT’] – current number of item in split

class.tslib_menu.php
function makeMenu() – Creates the menu in the internal variables, ready for output.
$GLOBALS[‘TSFE’]->register[‘count_menuItems’] – number of all items in current menu

function subMenu($uid, $objSuffix=”) – Creates a submenu level to the current level – if configured for.
$GLOBALS[‘TSFE’]->register[‘count_menuItems’] – as I understood this register holds number of items not for the whole menu, but for current menu level

function writeMenu() – Traverses the result array of menu items configuration (made by generate()) and renders each item.
$GLOBALS[‘TSFE’]->register[‘count_HMENU_MENUOBJ’] – number of current menu item for current HMENU object
$GLOBALS[‘TSFE’]->register[‘count_MENUOBJ’] – number of current menu item for ALL HMENU objects on a page
[/PHP]

[random_content group_id=”211″ num_posts=”1″]

CoSchni#5: Seiteninhalt ohne Head ausgeben für Ajax Requests

Angenommen man hat eine Seite mit dynamischem Inhaltsbereich, der zum Zeitpunkt, wenn die Seite geladen wird, noch nicht feststeht, bzw. man diesen aus Performance-Gründen nicht gleich mitladen will. Der Inhalt soll erst beim Klicken auf “Weiter” oder scrollen dynamisch in den bereits angezeigten Inhalt geladen werden. Der nachgeladene Inhalt, bzw. das HTML braucht somit bspw. keine head-Angabe, weil die bereits vorhanden ist. Um dies zu erreichen, muss ein neuer Seitentyp definiert werden, bei dem alle weiteren “Ausgaben” unterdrückt werden:

[PHP]
dynCall = PAGE
dynCall {
typeNum = 999
10 < dyn.Content config { disableAllHeaderCode = 1 xhtml_cleaning = 0 admPanel = 0 debug = 0 no_cache = 1 } } [/PHP] Aufrufen kann man später den Inhalt wie folgt: [PHP] http://www.example.com/index.php?id=123&type=999 [/PHP]