Title und Meta-Description in Extbase setzen

Gerade kürzlich stand ich vor dem Problem, dass ich in einem Extbase-Plugin, welches non-cacheable sein musste, den Title-Tag und die Meta-Description dynanisch aus der Extension setzen musste.
Der häufig genutzter Ansatz den Title und die Description im GLOBALS-Array zu überschreiben

$GLOBALS['TSFE']->page['title'] = $newTitle;
$GLOBALS['TSFE']->indexedDocTitle = $newTitle;
$GLOBALS['TSFE']->page['description'] = $newDescription;

was in dem Fall eines nicht-cachebaren Plugins leider nicht funktioniert. Daher habe ich dann einen eher einfachen aber effektiven Ansatz verfolgt. In den Projekt wird die seo_basics-Extension genutzt, also deaktivieren wir alle Head-Tags der seo_basics-Extensin im Typoscript-Template der entsprechenden Seite:

plugin.tx_seobasics >

Nun werden kein Title und keine Meta-Description mehr in den Head gerendert und wir können diese in unserer Extension „händisch“ mittels der addAddtionalHeaderData-Methode in unserem Controller neu setzen:

$title = '<title>' . $myNewTitle . '</title>';
$metaDescription = '<meta name="description" content="' .  $myNewMetaDescription . '">';
$this->response->addAdditionalHeaderData($title . PHP_EOL . $metaDescription);
Google+

TYPO3-Planer (scheduler) – crontab installieren

Um den Planer in TYPO3 nutzen zu können, müssen zwei Voraussetzungen erfüllt sein:

  • Es muss im TYPO3-Backend ein User mit dem Namen _cli_scheduler angelegt werden. Passwort ist dabei völlig egal, darf nur nicht leer sein.

Screenshot 2014-10-09 13.56.05

  • Es muss ein cronjob auf eurem Server angelegt werden, dies erfolgt bei Shell-Zugriff am einfachsten über
    root@server:~# crontab -u www-data -e

    diese solltet ihr für Benutzer des Webservers (in der Regel www-data) anlegen wie im Beispiel um Rechte-Problemen vorzubeugen.
    Dann kann der cronjob eingetragen werden:

    * * * * * /usr/bin/php /pfad_zur_typo3_installation/typo3/cli_dispatch.phpsh scheduler > /dev/null 2>&1

Nun speichern  und fortan wird jede Minute nach auszuführenden Tasks im Planer geschaut und diese bei Fälligkeit ausgeführt.

Google+

TYPO3 6.2 – Environment Variable TYPO3_CONTEXT nutzen

Seit der Version 6.2 gibt es in TYPO3 die Möglichkeit eine vordefinierte Environment-Variable TYPO3_CONTEXT zur Unterscheidung zwischen der Development-, Testing- und Production-Umgebung zu nutzen. Diese kann für eigene Zwecke in PHP aufgefangen werden, z.B. für Unterscheidungen in der Konfiguration, oder kann auch im Typoscript genutzt werden um Einstellungen festzulegen.

[applicationContext = Development*]
config.no_cache=1
[global]

Im TYPO3-Backend gibt es in der Development-Umgebung über den wohlbekannten Blitz zusätzlich die System-Caches zu leeren.
System-Caches über den "Blitz" leeren
Gesetzt wird Environment-Variable im Apache in der VirtualHost-Section mit

SetEnv TYPO3_CONTEXT "Development"

und in einer NGINX-PHP5-FPM-Umgebung am Besten über die fastcgi_params in location-Section für die PHP-Verarbeitung mit

        
location ~ \.php$ {
    fastcgi_pass unix:/var/run/php5-fpm.sock;
    fastcgi_index index.php;
    include fastcgi_params;
    fastcgi_param TYPO3_CONTEXT Development;
}
Google+

Redis als Cache-Backend in TYPO3

Das Caching-Framework bietet seit TYPO3 4.5 viele Möglichkeiten das Caching zu optimieren.

Eine, wie ich finde, sehr gute Möglichkeit, gerade wenn man mehrere TYPO3-Installationen auf einem Server versammelt sind, ist die Möglichkeit Teile des Cache in Redis abzulegen.

Durch die Möglichkeit in Redis viele verschiedene Datenbanken anzulegen werden die Caches sauber voneinander getrennt und man kann die Vorteile einer RAM-basierten Datenbank zu nutzen. Dies ist für mich ein entscheidender Vorteil gegenüber Memcache und lässt sich für die verschiedenen Cache-Backends nutzen.

Für TYPO3 < 6.2

$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_pages‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 0
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_pagesection‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 1
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚cache_hash‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 2
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚extbase_object‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 3
        )
    );
$TYPO3_CONF_VARS[‚SYS‘][‚caching‘][‚cacheConfigurations‘][‚extbase_reflection‘] = array(
    ‚backend‘ => ‚t3lib_cache_backend_RedisBackend‘,
    ‚options‘ => array(
        ‚defaultLifetime‘ => 86400,
        ‚database‘ => 4
        )
    );

Für TYPO3 >= 6.2 sieht das dann folgendermaßen aus:

$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 0
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 1
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 2
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 3
        );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['options'] = array(
        'defaultLifetime' => 86400,
        'database' => 4
        );

oder zum direkten Einfügen in das caching-Array in der LocalConfiguration.php:

'cacheConfigurations' => array(
    'cache_pages' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 0
        )
    ),
    'cache_pagesection' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 1
        )
    ),        
    'cache_hash' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 2
        )
    ),        
    'extbase_object' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 3
        )
    ),        
    'extbase_reflection' => array(
        'backend' => 'TYPO3\\CMS\\Core\\Cache\\Backend\\RedisBackend',
        'options' => array(
            'defaultLifetime' => 86400,
            'database' => 4
        )                                                                                                                             
    )
)

In dieser Beispielkonfiguration wurde die Lebensdauer für alle Caches exemplarisch auf 24h gestellt, das kann man natürlich für die eigenen Bedürfnisse noch optimieren.

Das Redis Backend hat in meinem Fall die Auslierung der gecachten Seiten noch einmal um über 100ms beschleunigt. Klingt nach nicht sehr viel, bedeutet aber in meinem Fall einen Performanceschub um über 30%.

http://redis.io
http://docs.typo3.org/typo3cms/CoreApiReference/CachingFramework/Configuration/Index.html

Google+

Caches deaktivieren in der Entwicklung TYPO3

Um die Caches bei der Entwicklung von TYPO3-Extensions zu deaktivieren reicht ein einfaches

config.no_cache = 1

im Typoscript-Template zumeist nicht aus. Es empfiehlt sich zusätzlich noch das Caching für die inkludierten Typoscript-Templates in der User-TS-Config des eingeloggten Backend-Users zu deaktivieren:

admPanel.override.tsdebug.forceTemplateParsing = 1 

als auch die Cache-Backend des Caching-Framework auf das NullBackend zu setzen:

$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash'] = array(
    'frontend' => 't3lib_cache_frontend_StringFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection'] = array(
    'frontend' => 't3lib_cache_frontend_VariableFrontend',
    'backend' => 't3lib_cache_backend_NullBackend',
    'options' => array(
        )
    );

Ergänzung:

Seit TYPO3 6.2 wird die Namespace-Notation verwendet:

$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pages']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_pagesection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['cache_hash']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_object']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
$TYPO3_CONF_VARS['SYS']['caching']['cacheConfigurations']['extbase_reflection']['backend'] = 'TYPO3\\CMS\\Core\\Cache\\Backend\\NullBackend';
Google+