Posts Tagged ‘ TYPO3

TYPO3 6 und frühere Versionen – Angepasstes TCA für unterschiedliche TYPO3-Versionen

Bezogen auf diese Post, wo wir ein Problem mit dem t3editor und dem TCA gelöst haben, tritt nun ein neues Problem auf.

Der t3editor in unserer Extension funktioniert nun super mit TYPO3 6 – aber in TYPO3 4.x haben wir die Funktionalität leider zerstört.

Aber mit einem kleinen ‚TCA-Hack‘ können wir das Problem beheben. Füge einfach den folgenden PHP-Code hinter dem TCA ein in dem der t3editor verwendet wird, etwa so:

if(isset($GLOBALS['TYPO3_CONF_VARS']['SYS']['compat_version'])) {
  if((float)$GLOBALS['TYPO3_CONF_VARS']['SYS']['compat_version']<6) {
      $TCA['tx_ftm_domain_model_templatemarker']['columns']['marker_typo_script']['config']['wizards']['t3editorTypoScript']['userFunc'] = 
        'EXT:t3editor/classes/class.tx_t3editor_tceforms_wizard.php:tx_t3editor_tceforms_wizard->main';
  }
}

In der ersten Zeile stellen wir sicher, das die Compat-Version definiert ist. Danach prüfen wir ob die TYPO3-Version kleiner 6 ist. Wenn dies der Fall ist, überschreiben wir das TCA-Feld in dem die userFunc definiert wurde und machen das Classes-C zu einem kleinen Buchstaben.

Wenn Du Optimierungen oder Ideen für Erweiterungen hast, schreibe gerne einen Kommentar zu diesem Post 🙂

TYPO3 6 – Wie man eine Extension von Hand deinstalliert

Oft passiert es, das eine neue Extension im TYPO3 6 installiert wird, aber die Extension ist noch nicht kompatibel mit der neuen TYPO3 version.
Im schlechtesten Fall wirft TYPO3 bei jedem Aufruf einen 500 Internal Server Error – und jetzt?

Kein Problem, deinstalliere die Extension einfach per Hand in ein paar Schritten (in diesem Fall ist es die gridelements v1.4.0):

1. Öffne die LocalConfiguration.php Datei welche im typo3conf-Verzeichnis liegt. Hier müssen die folgenden Zeilen entfernt werden:

	'EXT' => array(
		'extConf' => array(
			... -> diesen gridelements Eintrag
			'gridelements' => 'a:1:{s:20:"additionalStylesheet";s:0:"";}',
			... <- ende
	'EXT' => array(
		'extListArray' => array(
			... -> und den zweiten gridelements Eintrag
			'gridelements',
			... <- ende

2. Im nächsten Schritt müssen die gecachten Konfigurations-Dateien gelöscht werden. Um dies zu tun, kann man in TYPO3 6 einfach das Cache-Verzeichnis löschen, welches im typo3temp-Verzeichnis liegt.
3. Schließlich bist Du in der Lage die Extension einfach über den Extension-Manager zu entfernen.

TYPO3 6 mit integriertem t3editor in eigener Extbase-Extension

In einem aktuellen Projekt von mir, dem Fluid Template Manager, benutze ich den t3editor im entwickelten Backend Modul. Danke dem großartigen Post vom typo3blogger war es leicht diesen in TYPO3 4.7.x zu integrieren.
Nur, bei der Vorbereitung der ftm Extension für TYPO3 6.1 passierte ein kleiner Fehler. Die Seite mit dem t3editor wird wegen einem 500er Internal Server Error nicht geladen.

Die Lösung ist einfach.
Laut Konvention der ExtBase-Extensions muss der erste Buchstabe des classes-Verzeichnisses großgeschrieben werden. Das korrekte TCA-Snippet sieht nun wie folgt aus:

'template_code' => array(
    'exclude' => 0,
    'label' => 'LLL:EXT:ftm/Resources/Private/Language/locallang_db.xml:tx_ftm_domain_model_templatefluid.template_code',
    'config' => array(
        'type' => 'text',
        'cols' => 112,
        'rows' => 36,
        'eval' => 'trim',
        'wizards' => array(
            't3editorHtml' => array(
                'enableByTypeConfig' => 1,
                'type' => 'userFunc',
                'userFunc' => 'EXT:t3editor/Classes/class.tx_t3editor_tceforms_wizard.php:tx_t3editor_tceforms_wizard->main',
                'params' => array(
                    'format' => 'html',
                ),
            ),
        ),
    ),
),

Nebenbei fand ich auch heraus, das die cols und rows nun auch funktionieren wie sie sollten. 🙂

Notiz: Bezogen auf dieses Problem gibt es hier noch einen weiteren Post, der die Integration in unterschiedlichen TYPO3-Versionen behandelt.

TYPO3 6 Debugging eines 500 Internal Server Errors

Um eine TYPO3 6.1 Website zu debuggen, auf der nur eine weiße Seite angezeigt wird (als Folge eines 500 Internal Server Errors), kann man das displayErrors aktivieren, ähnlich wie man es aus früheren Versionen von TYPO 3 kennt.

Einfach die LocalConfiguration.php editieren, die sich im typo3conf Verzeichnis befindest, und den folgenden Eintrag hinzufügen:

	...
	'SYS' => array(
		...
		'displayErrors' => '1',
	),
);
?>

Aber nicht vergessen diese Zeile nach dem erfolgreichen debuggen wieder zu entfernen 😉

Typo3 4.7.4 Installations-Fehler – Class ‚Tx_Extbase_Utility_Extension‘ not found

Heute habe ich mal wieder ein frisches TYPO3 aufgesetzt – natürlich kommt da wie immer nur die neuste Version zum Einsatz.. 😉

Für gewöhnlich, wenn man nicht gerade einen Wald und Wiesen Hoster hat, läuft alles schnell und reibungslos. Dieses mal gab es allerdings eine interessante neue Fehlermeldung:

Fatal error: Class 'Tx_Extbase_Utility_Extension' not found in /var/customers/webs/greeneye/ploom/cms/typo3conf/temp_CACHED_psf69f_ext_tables.php on line 462 

Die Fehlermeldung ist etwas unglücklich und gibt nicht viele Anhaltspunkte darüber was hier schiefläuft. Nach einer kleinen Recherche ist schnell klar, die extBase-Extension ist zwar pysikalisch vorhanden – aber nicht in der Konfiguration eingebunden.

Das Problem lässt sich schnell lösen:

  • localconf.php aus dem Verzeichnis /typo3conf/ zum Editieren öffnen
  • Den untersten Eintrag des $TYPO3_CONF_VARS[‚EXT‘][‚extList‘] finden und am Ende den Eintrag ‚,exbase‘ anhängen. Die neue Zeile könnte nun wie folgt aussehen:
    $TYPO3_CONF_VARS['EXT']['extList'] = 
    'info,perm,func,filelist,about,version,tsconfig_help,context_help,
    extra_page_cm_options,impexp,sys_note,tstemplate,tstemplate_ceditor,
    tstemplate_info,tstemplate_objbrowser,tstemplate_analyzer,func_wizards,
    wizard_crpages,wizard_sortpages,lowlevel,install,belog,beuser,
    aboutmodules,setup,taskcenter,info_pagetsconfig,viewpage,rtehtmlarea,
    css_styled_content,t3skin,t3editor,reports,felogin,form,rsaauth,
    saltedpasswords,extbase';
    
  • Nun noch den Cache leeren. Dazu löschen wir alle mit temp_* beginnenden Dateien aus dem /typo3conf/ Verzeichnis.

..und das war’s auch schon. Ich hoffe das dieser Post auch anderen hilft! 🙂

Typo3-Snippet: Fluid-Ausgabe nur auf einer bestimmten Seite

Dieses Snippet zeigt eine Ausgabe auf der Seite mit id 791:

<f:if condition="{0:data.uid} == {0:'791'}">
    <f:then>
      Ausgabe auf der Seite
    </f:then>
    <f:else>
      Ausgabe, wenn nicht auf der Seite
    </f:else>
</f:if>

Die verwendeted Typo3 Storage-ID in einer ExtBase Controller-Action verwenden

Um die Storage-ID in einer ExtBase-Extension sauber auslesen zu können müssen wir unsere setup.txt TypoScript Datei ein wenig erweitern, und die storagePid auch im settings-Zweig verfügbar machen:

plugin.tx_yourext {
    persistence {
        storagePid = {$plugin.tx_yourext.persistence.storagePid}
    }
    settings {
        storagePid = {$plugin.tx_yourext.persistence.storagePid}
    }
}

Einfach nur das tx_yourext durch den Extension-Key deiner Extension ersetzen.
Nach dem Speichern und Einspiele in Typo3, nicht vergessen den Typo3-Cache zu leeren 😉

Danach kann man einfach innerhalb einer ExtBase Controller-Action mit der folgenden Zeile darauf zugreifen:

$this->settings['storagePid']

Nun sollte mit die Storage-ID zum Eimsatz bereit sein.

Sollte die Storage-ID leer sein, hast Du vielleicht vergessen sie im Typo3 entsprechend zu setzen 😉

LESS mit Fluid-Templates verwenden in Typo3 4.5

TIPP: Um LESS optimal mit TYPO3 Fluid-Templates nutzen zu können empfehle ich die Verwendung des Fluid-Template-Manager (kurz FTM).

Um Templates und Designs schneller und effektiver zu entwickeln ist es zu empfehlen LESS zu verwenden.
LESS ist eine ähnliche Technik wie SASS bietet einem viele Möglichkeiten wie bspw. Variablen-Definition, Mixins, etc., welche die CSS-Erstellung beschleunigen und die Wiederverwendbarkeit erhöhen.
Vorallem bei der Verwendung vieler neuer CSS3-Features, wo oft jeder Browser sein eigenes Statement erwartet, ist es sinnvoll LESS-Mixins einzusetzen.

Alle Infos und die Dokumentation zu LESS findet Ihr hier:
http://lesscss.org/.

Viele brauchbare Mixins findet man hier:
http://lesselements.com/.

Starten wir nun um ‚mal eben‘ LESS in unser Typo3 einzubinden. Folge einfach den nächsten Punkten Schritt für Schritt:

  1. Als erstes wechseln wir in den Extension-Manager und installieren die notwendigen Extensions. Ich arbeite hier gerne mit der LESS Extension cs_less, da diese einen View-Helper mitbringt, mit dem man sein LESS direkt im Fluid-Template einbinden kann. Da diese jedoch wiederum Abhängigkeiten zu anderen Extensions hat, installieren wir diese beiden zuerst. Dies wären aktuell fed (1.4.12) und flux (1.4.1). Nach dem die beiden Extensions importiert und installiert sind, nur noch schnell die cs_less Exxtension hinterher installieren
  2. Nach dem die notwendigen Extensions vorhanden sind können wir beginnen unsere LESS-Dateien zu erstellen. Die erste nennen wir styles.less und legen sie in unserem fileadmin/templates/css/-Verzeichnis ab. Danach laden wir uns die less-elements runter, und legen die Datei elements.less in das gleiche Verzeichnis.
  3. In unsere styles.less importieren wir die less-elements und wenden zum testen einfach mal Gradient auf den Body-Tag an:
    @import "elements.less";
    body {
       .gradient(#F00, #F00, #FFF);
    }
    

    .gradient() ist an dieser Stelle ein Mixin, welches von den less-elements bereitgestellt wird. Das .gradient() Mixin ist mit einer Funktion vergleichbar, welche drei Parameter erwartet. Als Rückgabe fügt diese bei der Compilierung des LESS alle erforderlichen CSS-Statements für die jeweiligen Browser in das CSS ein.
    Das Ergebnis sieht wie folgt aus:

    body {
      background:#ff0000;
      background:-webkit-gradient(linear,left bottom,left top,color-stop(0,#ff0000),color-stop(1,#ffffff));
      background:-ms-linear-gradient(bottom,#ff0000,#ffffff);
      background:-moz-linear-gradient(center bottom,#ff0000 0%,#ffffff 100%);
    }
    
  4. Nun müssen wir nur noch den View-Helper der cs_less-Extension verwenden, um unser LESS einzubinden. An diesem Punkt gehen ich einfach mal davon aus, das eh schon Fluid als Template-Engine verwendet wird 😉
    Also öffnen wir uns die Layout-Datei unseres Fluid-Templates. Meine liegt bspw. unter /fileadmin/templates/layouts/main.html. Wir öffnen diese und fügen den folgenden Code hinzu:

    {namespace less=Tx_CsLess_ViewHelpers}
    <less:style href="fileadmin/templates/css/styles.less" />

    In der ersten Zeile definieren wir den Namespace, in dem unser View-Helper zu finden ist. Danach wird dieser einfach nur noch verwendet. Das Attribute href bekommt den Pfad zu unserer Less-Datei, alles andere passiert automatisch. Wenn man nun alle seine Styles über die LESS-Datei definiert, ist keine weitere CSS-Datei notwendig. Natürlich kann man auch normales CSS in der LESS-Datei verwenden, aber das kann man alles auf der LESS-Dokumentation nachlesen. 😉

Typo3 Multisite/MultiDomain: Fluid-Website zu bestehender TemplaVoila-Website hinzufügen

Woah.. Nachdem ich nun über zwei Stunden an einem Fluid/TemplaVoila-Problem verbracht habe, hier nun die Lösung für alle, die vielleicht mal ein ähnliches Problem haben.

Ziel war es in eine bestehende TemplaVoila-Website, eine komplette neue Website zu integrieren, welche jedoch auf Fluid als Template-Engine setzt. Alles im Allgemeinen kein Problem, da ich schon sehr lange mit Fluid arbeite und es lieben gelernt habe 😉
Das Vorgehen zur Integration der zusätzlichen Website ging nun wie gewohnt von statten:

  1. fluid und extbase über den Extension-Manager installiert
  2. Im fileadmin ein neues Verzeichnis angelegt, wo die üblichen Template-Dateien für Fluid liegen
  3. Im Typo3-Root einen neuen Shortcut für meine neuen Website-Root erstellt. Darin liegen wie gewohnt die Pages der Websites.
  4. Auf der Website-Root Seite wird nun ein neues Root-Template erstellt. Hier werden im TypoScript-Template auf dem Tab:Options die folgenden Checkboxen angehakt:
    Clear: Constants & Setup; Rootlevel
  5. Zusätzlich werden auf der Website-Root Seite die erforderlichen Backend-Templates erstellt

Alles in allem, bis auf die Einstellungen zur zweiten Website, wurden die Schritte wie in diesem Artikel ausgeführt: Create a complete Typo3 website by using the Fluid Template Engine

Nun sollte eigentlich soweit alles startklar sein, um die Inhalte einzupflegen..

Aber stop, was ist das!?

Wenn wir die Page-Properties einer Seite von uns öffnen und unter Appearance ->Backend Template eines unserer angelegten Backend-Templates auswählen wollen, ist die Select-Box leer?! Stutzig macht auch ein wenig, das dort nicht wie gewohnt das Label ‚Backend Layout (this page only)‘, sondern ‚Use Template Design‘ steht.

Nach langer Recherche, Testen und Debugging – keine Lösung in Sicht. Durch Zufall, da ich noch ein deaktiviertes WEB->Page Module wieder aktivieren wollte, bin ich dann in die Extension-Einstellungen der TemplaVoila-Extension gegangen – und siehe da: Die Extension biete Datenbank-Tabellen Updates an. Nach dem diese ausgeführt worden sind, der Cache proforma einmal geleert, sind auf mal alle vorhandenen Backend-Templates vorhanden. Auch das Label hat wieder wie gewohnt den Inhalt ‚Backend Layout (this page only)‘


Ich sag nur, Sachen gibts – die gibts gar nicht. 😉

Kombinierte AND / OR Conditions mit mit TypoScript erstellen

Oft kommt es vor das man auf bestimmten Typo3 Seiten-IDs speziellen TypoScript Code einfügen möchte, der sich von anderen Seite unterscheidet.
Für diesen Fall gibt es in TypoScript Conditions. So hatte ich diese Woche den Fall das ich auf zwei bestimmten Seiten jeweils ein Dojo-Modul einbinden und ausführen wollte, aber auf allen anderen Seiten diese Module aus Performance Gründen nicht eingebunden werden sollten – die Dojo-Einbindung aber nicht fehlen sollte.
Für diesen Fall brauchte ich eine Condition mit zwei ‚ungleich‘ / ‚!=‘ Bedingungen, die ich mit einem ‚logischem UND‘ / ‚AND‘ verknüpfe.
Das Resultat ist das folgende TypoScript:

[globalVar = TSFE:id = 3]
page {
  headerData {
    11 = TEXT
    11.value (
      <script type="text/javascript">
        // Require in Dojo's i18n utilities first
        dojo.require("dojo.i18n");
        dojo.require("dojox.image.Lightbox");
			
        // Own Module and Translation
        dojo.require("mop.Collection");
        dojo.requireLocalization("mop", "collection");	
        dojo.addOnLoad(function() {
          startUp();
          mop.Collection.create("./fileadmin/templates/collection.php", "content_main_full", "subNavi");
        });
      </script>
    )    
  }
}
[global]

[globalVar = TSFE:id = 8]
page {
  headerData {
    11 = TEXT
    11.value (
      <script type="text/javascript">
        // Require in Dojo's i18n utilities first
        dojo.require("dojo.i18n");
        dojo.require("dojox.image.Lightbox");
			
        // Own Module and Translation
        dojo.require("mop.Slider");
        dojo.requireLocalization("mop", "slider");	
        dojo.addOnLoad(function() {
          startUp();
          mop.Slider.create("./fileadmin/templates/slider.php", "sliderCampaign");
        });
      </script>
    )    
  }
}
[global]

[globalVar = TSFE:id != 3] AND [globalVar = TSFE:id != 8]
page {
  headerData {
    11 = TEXT
    11.value (
      <script type="text/javascript">
        // Require in Dojo's i18n utilities first
        dojo.require("dojo.i18n");
        dojo.require("dojox.image.Lightbox");
        
        dojo.addOnLoad(function() {
          startUp();
        });
      </script>
    )    
  }
}
[global]