TYPO3-BE: Inhaltselemente für Spalten beschränken

Werden umfangreichere Website mit TYPO3 gebaut, kommen meist die Spalten (colPos) mit ins Spiel. Damit kommt dann auch das mulmige Gefühl, ob denn alle Redakteure in den jeweiligen Spalten nur die „passenden“ Inhaltselemente platzieren… Eine Gallery in der Marginalspalte? Ein Mailformular unter der Seitennavigation???

Zum Glück gibt es auch hierfür Möglichkeiten. Seit TYPO3 4.3 können im pageTS Conditions verwendet werden.
Weiterlesen»

Elegante http zu https Umleitung ohne Domainangabe

Den Domainnamen in die .htaccess zu schreiben finde ich etwas ungluecklich, vor allem da es nicht notwendig ist:

<IfModule mod_rewrite.c>
 RewriteEngine On
 RewriteCond %{HTTPS} off
 RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [L]
</IfModule>

Optimierte .htaccess fuer TYPO3 auf Apache2

Dieser Artikel ist sehr alt. TYPO3 wurde weiterentwickelt, wodurch die Inhalte des Artikels möglicherweise nicht mehr zur aktuellen TYPO3-Version passen. Der Beitrag Optimierte .htaccess für TYPO3 ist neuer und befassts ich mit dem gleichen Thema.

Die .htaccess Datei welche standardmäßig in einer TYPO3 Installation (meist als _htaccess) mitgeliefert wird ist fuer Dokumentationszwecke besser geeignet als zum produktiven Einsatz.

  1. .htaccess
    • eine .htaccess wird mit jedem File-Hit geparst, besser wäre es natürlich die Einstellung direkt in der Apache Konfiguration der VirtualHosts vorzunehmen. Das scheitert aber vermutlich meist an entsprechenden Rechten.
    • Dadurch dass es geparst werden muss, sollte man die Datei klein halten. D.h. alle Kommentare entfernen.
  2. Die Direktiven sind „einfach so“ vorhanden. Besser ist es natürlich nur Direktiven zu verwenden, die der Apache auch durch die entsprechenden Modules eingebunden hat. D.h. <IfModule …></IfModule> sind zwingend verwenden um hässliche 500 Serverfehler zu vermeiden.
  3. Etag, Expiration und Compression Direktiven sind in der TYPO3 Vorlage nicht enthalten, bieten sich aber natürlich an. Der geneigte Websitebetreiber sollte dann natürlich die Module aktivieren (a2enmod headers; a2enmod deflate; a2enmod expires)

.htaccess

Hier die optimierte .htaccess (hier für RealURL-Verwendung, die _htaccess Dokumentation verliert natürlich nicht ihre Gueltigkeit bezüglich RewriteBase…)

<FilesMatch "\.(js|css)$">
        <IfModule mod_expires.c>
                ExpiresActive on
                ExpiresDefault "access plus 7 days"
        </IfModule>
        FileETag MTime Size
</FilesMatch>
<IfModule mod_rewrite.c>
RewriteEngine On
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteRule ^(.+)\.(\d+)\.(php|js|css|png|jpg|gif|gzip)$ $1.$3 [L]
        RewriteCond %{REQUEST_URI} ^.+(/(uploads|fileadmin|(typo3(conf|temp)?))/.*)
        RewriteRule ^.*$ %1 [L,R=301]
        RewriteRule ^fileadmin/(.*/)?_recycler_/ - [F]
        RewriteRule ^fileadmin/(templates|ts)/.*(\.txt|\.ts)$ - [F]
        RewriteRule ^typo3conf/ext/[^/]+/Resources/Private/ - [F]
        RewriteRule ^typo3_src\-(.*)$ /
        RewriteRule ^(typo3/|t3lib/|fileadmin/|typo3conf/|typo3temp/|uploads/|favicon\.ico) - [L]
        RewriteRule ^typo3$ typo3/index_re.php [L]
        RewriteCond %{REQUEST_FILENAME} !-f
        RewriteCond %{REQUEST_FILENAME} !-d
        RewriteCond %{REQUEST_FILENAME} !-l
        RewriteRule .* index.php [L]
</IfModule>
<IfModule mod_headers.c>
 FileETag Size
</IfModule>
<IfModule mod_expires.c>
        ExpiresActive on
        ExpiresDefault "access plus 24 hours"
        ExpiresByType image/x-icon "access plus 1 months"
        ExpiresByType image/jpg "access plus 1 months"
        ExpiresByType image/gif "access plus 1 months"
        ExpiresByType image/jpeg "access plus 1 months"
        ExpiresByType image/png "access plus 1 months"
        ExpiresByType text/css "access plus 1 months"
        ExpiresByType text/javascript "access plus 1 months"
        ExpiresByType application/javascript "access plus 1 months"
        ExpiresByType application/x-shockwave-flash "access plus 1 months"
</IfModule>
<IfModule mod_deflate.c>
        AddOutputFilterByType DEFLATE text/plain
        AddOutputFilterByType DEFLATE text/html
        AddOutputFilterByType DEFLATE text/xml
        AddOutputFilterByType DEFLATE text/css
        AddOutputFilterByType DEFLATE text/javascript
        AddOutputFilterByType DEFLATE application/xml
        AddOutputFilterByType DEFLATE application/xhtml+xml
        AddOutputFilterByType DEFLATE application/rss+xml
        AddOutputFilterByType DEFLATE application/javascript
        AddOutputFilterByType DEFLATE application/x-javascript
        AddOutputFilterByType DEFLATE application/x-shockwave-flash
        BrowserMatch ^Mozilla/4 gzip-only-text/html
        BrowserMatch ^Mozilla/4\.0[678] no-gzip
        BrowserMatch \bMSIE !no-gzip !gzip-only-text/html
        SetEnvIfNoCase Request_URI \.(?:gif|jpe?g|png)$ no-gzip dont-vary
        <IfModule mod_headers.c>
                Header append Vary User-Agent env=!dont-vary
        </IfModule>
</IfModule>

Update 11.07.2013:

Es gab hier einen Fallstrick, der in dem Fall, dass mod_headers nicht installiert ist, im Block bzgl. mod_deflate einen Error 500 verursacht. Dies wurde mithilfe des verschachtelten „IfModule“-Blocks innerhalb des mod_deflate.c gefixed, sodass auch nur bei Vorhandensein des notwendigen Moduls die Header gesendet werden.

Scheduler in eigenen Extensions nutzen

Benni (Release Manager, TYPO3 4.4) hat in seinem Blog einen Artikel verfasst, um uns allen das Erstellen von Tasks für den neuen Scheduler (seit TYPO3 4.3) zu ermöglichen. Damit sollten irgendwelche händischen Cronjobs und vielleicht auch CLI-Skripte der Vergangenheit angehören.
Update 2012-04-26: Der Artikel von Benni existiert leider nicht mehr, jedoch findet sich auch bei Stefan im Blog ein Tutorial.

Achtung!

Der Scheduler (bzw. genauer der Autoloader) scheint Probleme zu haben, wenn sich eine Extension im user_-Namespace befindet (obgleich das Extensions tun sollten, wenn sie nur für eine einzelne Installation erstellt sind).

CSH – Context Sensitive Help für additionalFields

Um die eigenen Felder etwas verständlicher zu machen, lassen sich Details via CSH einbinden. Hierzu sind zwei Schritte nötig:

locallang_csh*.xml anlegen

Zum Beispiel für das Feld example

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
    <meta type="array">
        <description>Contents of scheduler csh</description>
        <type>CSH</type>
        <csh_table>_MOD_tools_txschedulerM1</csh_table>
        <fileId>EXT:scheduler/mod1/locallang_csh_scheduler.xml</fileId>
        <labelContext type="array"></labelContext>
    </meta>
    <data type="array">
        <languageKey index="default" type="array">
            <label index="example.alttitle">Title</label>
            <label index="example.description">Short Description</label>
            <label index="example.details">Details</label>
        </languageKey>
    </data>
</T3locallang>

In ext_tables.php die Datei bekanntgeben:

t3lib_extMgm::addLLrefForTCAdescr('_MOD_tools_txschedulerM1', 'EXT:' . $_EXTKEY . '/locallang_csh.xml');

Links

Edit: Aufruf des Schedulers in der crontab ergaenzt.

# crontab -l -u [WEB BENUTZER]
# m h  dom mon dow   command

*/2 * * * *	/var/www/[PFAD ZUM WEB]/htdocs/typo3/cli_dispatch.phpsh scheduler 2>/dev/null >/dev/null