Zur Agentur-Website
21.05.2013

Launch der Pluta Insolvenz-TV Website

In den letzten 3 Monaten wurden die mehrsprachige Website Pluta Insolvenz-TV mittels TYPO3 (Version 4.7.x) realisiert. Die Pluta Insolvenz-TV ist eine Microsite der Pluta Rechtanswalts GmbH und informiert über laufende Insolvenzverfahren per Video. Ebenso werden allgemeine Informationen zum Thema "Insolvenz" zur Verfügung gestellt.

Im Zuge der Arbeiten wurde einen TYPO3-Extensions mittels ExtBase und Fluid entwickelt. Die Extension verwaltet und kategorisiert die Videos, die von Vimeo aus integriert werden. Ebenso ist mit dieser TYPO3-Erweiterung die Pflege von mehrsprachigen Videos möglich.

Eingesetzte Technologien:
TYPO3, Extbase, Fluid, jQuery, HTML, CSS, PHP

Weiter zur Website:
www.pluta-insolvenz.tv

26.03.2013

Duplicate Content in TYPO3 vermeiden

Mit der RealUrl Extension bietet TYPO3 vielfältige Möglichkeiten zur Generierung von statischen URLs, die unabdingbar für die Suchmaschinenoptimierung sind. Diese schön URLs haben zugleich den Vorteil, dass Sie eine bessere Klickrate bei Google erzielen. Mit RealUrl wird eine Adresse z.B. im Format /schuhe.html anstatt /index.php?id=5 ausgeliefert.

Trotzdem kann es bei TYPO3-Websites passieren, dass Google vereinzelt immer wieder die "nicht umgeschriebene" URL mit dem id-Parameter in den Rankings anzeigt. Das Problem liegt daran, dass Seiten manuell noch immer mit /?id=5 oder /index.php?id=5 aufgerufen werden können, obwohl im Quelltext nur noch /schuhe.html steht. Ebenso kann eine fremde Website auf die URL mit dem Parameter verlinken.

Abhilfe schafft hier grundsätzlich einmal der Einsatz des Canonical-Tags. Dafür gibt es in TYPO3 verschiedene Möglichkeiten. Entweder man installiert dazu eine Extension oder man programmiert sich das ganze selbst mit TypoScript.

Weiters kann gezielt Redirect in der .htaccess Datei definieren. Das Problem dabei: Normale Redirect-Anweisungen mit dem id-Parameter funktionieren nicht ohne weiteres. So hat folgendes keine Auswirkung:


Redirect /?id=5 http://www.keynet.at

Nach längerer Suche bin ich auf den Blog-Beitrag von lightseeker.de gestoßen, der sich der Thematik angenommen hat. Die Lösung sieht beispielsweise wie folgt aus:


RewriteCond %{query_STRING} ^(id=5)(.*)$
RewriteRule ^$ http://www.domain.com/produkte.html? [R=301,L]
Redirect für Urls mit ID-Parameter in TYPO3

Im genannten Blog-Beitrag wird auch eine Variante mit der ODER-Bedingung gezeigt, die etwas Tipp-Arbeit bei der Verwendung von mehreren RewriteRules spart.

Kategorie(n): SEO/TYPO3
Kommentare (0)
14.04.2011

TYPO3 Update ohne SSH

Oft kommt es vor, dass bei den Webhosting-Anbietern kein Shell-Zugang (SSH) vorhanden ist, und somit ein TYPO3-Update erschwert wird. Dieser Artikel zeigt zwei Möglichkeiten wie das Update einer TYPO3-Installation mittels PHP oder Perl möglich ist.

TYPO3 Update mit PHP

Ist am Webserver die Einstellung safe_mode auf Off gesetzt, können in der Regel über die PHP-Funktion system() Shell-Befehle ausgeführt werden. Ein TYPO3-Update würde daher mit folgendem Skript funktionieren:


system('wget http://prdownloads.sourceforge.net/typo3/typo3_src-4.5.2.tar.gz');
system('tar -xzf typo3_src-4.5.2.tar.gz');
system('rm typo3_src')
system ('ln -s typo3_src-4.5.2 typo3_src');
PHP-Code zur Durchführung eines TYPO3-Updates

In der ersten Zeile wird der aktuelle TYPO3-Sourcecode auf den Server geladen und in Zeile 2 anschließend entpackt. In Zeile 3 wird der Symlink typo3_src, der auf die momentane TYPO3-Installation zeigt, entfernt. Danach wird dieser Symlink wieder erstellt (Zeile 4), allerdings mit dem Verweis auf den neuen TYPO3-Sourcecode. Alternativ zur Funktion system() könnte auch exec() eingesetzt werden.

TYPO3-Update mit Perl

Ist die Ausführung der oben erwähnten PHP-Funktionen untersagt, kann man sich auch mit der Skript-Sprache Perl helfen, die häufig bei kleinen und billigen Webhosting-Angeboten verfügbar ist. Dazu muss in unserer Lösung vorher die entpackte TYPO3-Sourcedatei auf den Webserver per FTP hochgeladen werden. Da wir leider keine Perl-Profis sind, haben wir noch keine Lösung für das Entpacken von Dateien mit Perl gefunden. In den Kommentaren darf jedoch gerne ein Hinweis hinterlassen werden ;-)

Nachdem die TYPO3-Dateien am Server sind, wird die Datei remove.pl erstellt. Die Datei hat folgenden Inhalt:


#!/usr/bin/perl --

use strict;
use CGI::Carp qw(fatalsToBrowser);
use File::Path;

my $Ergebnis = rmtree("typo3_src");

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
if($Ergebnis == 1) {
  print "Verzeichnis gel&ouml;scht!";
}
else {
 print "$!";
}
print "</body></html>\n";
Symlink mit Perl entfernen

Das Skript macht nichts anderes, als den Symlink typo3_src zu entfernen. Wichtig ist dabei die erste Zeile. Diese verweist auf den Perl-Interpreter am Server. Das heisst, von Server zu Server kann dieser Pfad variieren. Nachdem der Symlink nun gelöscht ist, wird dieser mit folgender Datei (symlink.pl) neu erstellt - mit Verweis auf den neuen TYPO3-Sourcecode.


#!/usr/bin/perl --

use strict;
use CGI::Carp qw(fatalsToBrowser);

my $Ergebnis = symlink("typo3source/typo3_src-4.5.2","typo3_src");

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
print "<html><head><title>Test-Ausgabe</title></head><body>\n";
if($Ergebnis == 1) {
  print "Symlink angelegt!";
}
else {
 print "Error: $!";
}
print "</body></html>\n";
Symlink mit Perl neu erstellen

Mit diesen zwei Perl-Skripts kann somit auf den Komfort von Symlinks bei der Durchführung von TYPO3-Updates zurückgegriffen werden. Damit ist es uns auch möglich, bei unseren TYPO3-Kundenprojekten schnell und effizient Updates einspielen zu können.

Vorschläge zur Verbesserung dieser Lösungen können gerne in den Kommentaren gepostet werden!

Kategorie(n): TYPO3
Kommentare (0)
07.04.2011

Logout-Button per TypoScript

Heute möchte ich ein kurzes TypoScript-Schnipsel veröffentlichen, dass wir gestern für ein TYPO3-Projekt benötigten. Anforderung war, dass ein Logout-Button für Frontend-Benutzer auf jeder Seite angezeigt werden soll, sobald sich diese über ein Login-Formular angemeldet haben.

Um das Problem zu lösen, reicht der folgende TypoScript-Code. Somit muss nicht extra eine Extensions dafür installiert werden (gibt es ja für Login/Logout Buttons).


[usergroup=*]
lib.logout_btn = TEXT
lib.logout_btn.data = TSFE : id
lib.logout_btn.wrap (
  <div class="logout_btn">
    <form action="index.php?id=90" method="post">
    <input name="submit" class="abmelden" value="Abmelden" type="submit" />
    <input name="logintype" value="logout" type="hidden" />
    <input name="pid" value="|" type="hidden">
    </form>
  </div>
)
[global]
Logout-Button per TypoScript

Wenn der Logout-Button nur für eine spezielle Benutzergruppe vorhanden sein soll, kann dies in der ersten Zeile näher festgelegt werden. Ansonsten gilt die Einstellung für alle Frontend-Benutzer. Das "lib.logout_btn" wurde in TemplaVoila gemappt und wird somit auf jeder Seite automatisch integriert.

Verbesserungsvorschläge, Alternativen, etc. können gerne in den Kommentaren gepostet werden.

Kategorie(n): TYPO3
Kommentare (0)
18.03.2011

Facebook Like-Button in TYPO3

Auf Facebook Developers lässt sich der Like-Button über ein Interface schnell und einfach erstellen. Allerdings nur für die URL die in der Eingabemaske angegeben wird. Um den Like-Button in TYPO3 auf jeder Seite zu integrieren und um die jeweilige Unterseite "liken" zu können ist folgendes TypoScript notwendig:


fb_likebutton = COA
fb_likebutton {
  10 = TEXT
  10.typolink.parameter.data = TSFE:id
  10.typolink.returnLast = url
  10.typolink.addQueryString = 1
  10.typolink.addQueryString.exclude = id
  10.dataWrap = {TSFE:baseUrl}|
  10.rawUrlEncode = 1
  wrap = <iframe src="http://www.facebook.com/plugins/like.php?href=|&amp;layout=standard&amp;show_faces=false&amp;width=450&amp; action=like&amp;font&amp;colorscheme=light&amp;height=35" scrolling="no" frameborder="0" style="border:none; overflow:hidden; width:450px; height:35px;" allowTransparency="true"></iframe>
}


Facebook Like-Button für einzelne Seiten in TYPO3

Das COA kann somit jedem Marker oder via TemplaVoila zugewiesen werden. Ebenso kann es mittels der Extension "Generic markers for tt_news" verknüpft werden, sodass der Like-Button für einzelnen News-Beiträge eingesetzt werden kann.

Fragen, Verbesserungsvorschläge, Einwände, Feedback, Lob :-) ... sind wie immer in den Kommentaren möglich!

10.02.2011

Externe Datenbank in TYPO3 anbinden

Das folgende Skript zeigt, wie in TYPO3 auf die Daten einer externen Datenbank zugegriffen werden kann. Die Datenbank liegt zwar am gleichen Server, ist jedoch nicht die Standard-Datenbank von TYPO3.


// Zur externen Datenbank wechseln
$res = $GLOBALS['TYPO3_DB']->sql_select_db('meine-externe-db');

// Daten abfragen & zurückgeben
$res = $GLOBALS['TYPO3_DB']->sql(TYPO3_db, 'SELECT * FROM users WHERE id = ' . $id);

// Daten auslesen
while($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res))
{
  $data = $row['Wert']);
}

// Zurück zur TYPO3-Datenbank wechseln
$res = $GLOBALS['TYPO3_DB']->sql_select_db('meine-typo3-db');
return $data;
Daten aus externer Datenbank holen

Eine weitere Möglichkeit, um an die gleichen Daten zu kommen aber ohne dabei die Datenbank explizit zu wechseln ist folgende:


$res = $GLOBALS['TYPO3_DB']->sql('meine_typo3_db', 'SELECT * FROM meine_externe_db.users WHERE id = ' . $id);
Noch eine Möglichkeit um an die Daten der externen Datenbank zu kommen

Die erste, umständlichere Variante haben wir in einem Projekt verwendet, da der Name der Datenbank einen Bindestrich beinhaltet hat und dadurch ein Fehler im SQL-Statement aufgetreten ist. Vom Provider wurde der Datenbankname vorgegeben wurde, sodass wir diesen nicht ändern konnten.

Kategorie(n): TYPO3
Kommentare (0)
04.02.2011

Fancybox mit TYPO3 4.5

Da mein Artikel "Fancybox in TYPO3 integrieren" doch immer wieder einige Besucher hat, möchte ich auf eine kleine Aktualisierung beim Update auf TYPO3 4.5.0 aufmerksam machen.

Das in meinem Artikel erwähnte TypoScript muss um zwei Zeilen ergänzt werden, ansonsten funktionieren Links auf Bilder (auch ohne Fancybox) unter TYPO3 4.5.0 nicht mehr. Der aktualisierte Code sieht nun wie folgt aus:


tt_content.image.20.1 {
  # Den Standard imageLinkWrap entfernen und einen eigenen basteln
  imageLinkWrap >
  imageLinkWrap = 1
  imageLinkWrap {

    # Linkwrapping bei aktivierter Klickvergrößerung oder einem gesetzten Link
    enable.field = image_zoom
    enable.ifEmpty.typolink.parameter.field = image_link
    enable.ifEmpty.typolink.parameter.listNum.stdWrap.data = register : IMAGE_NUM_CURRENT
    enable.ifEmpty.typolink.returnLast = url
    enable.ifEmpty.typolink.parameter.listNum.splitChar = 10

    # Neuer wrapping Code
    typolink {
      target = {$styles.content.links.target}
      extTarget = {$styles.content.links.extTarget}

      # Link mit Pfad und Name zum Originalbild oder
      # Pfad und Name des umgerechneten lightbox Bild (wen maxH oder maxH erreicht ist)
      parameter.cObject = IMG_RESOURCE
      parameter.cObject.file.import.data = TSFE:lastImageInfo|origFile

      # Ausnahme: wenn das linkfield nicht leer ist
      parameter.override.field = image_link
      parameter.override.listNum.stdWrap.data = register : IMAGE_NUM_CURRENT
      parameter.override.if.isTrue.field = image_link
      parameter.override.listNum.splitChar = 10

      # rel-Attribut hinzufügen, für Galerie-Funktion (durchblättern)
      ATagParams = rel="gallery" title="{field:header}" class="lightbox"
      ATagParams.override = rel="gallery{field:uid}" title="{field:header}" class="lightbox"
      ATagParams.insertData = 1
      ATagParams.if.isTrue.field = image_zoom
    }
  }
}
Fancybox unter TYPO3 4.5

Neu hinzugekommen sind die Zeilen 12 und 28. Fügt man diese ein, funktioniert wieder alles ohne Probleme. Kurz noch den TYPO3-Cache löschen und es kann schon weiter gehen.

21.12.2010

PHP Scripte in TYPO3 ausführen

Oft kommt es vor, das man schnell auf einer Seite innerhalb einer TYPO3-Installation ein kurzes PHP-Script ausführen möchte (oder muss). Natürlich könnte man eine eigene Extension schreiben oder auf TypoScript und UserFunc oder PHP_SCRIPT zurückgreifen.

Doch das dauert meiner Meinung nach, alles länger und ist mühsamer als der Einsatz der Extension page_php_content, die allerdings nicht mehr im Extension-Repository von TYPO3 verfügbar ist. Aus diesem Grund stelle ich sie hier als Download zur Verfügung.

Was macht die Extension genau?

page_php_content fügt ein neues Inhaltselement in TYPO3 hinzu. Dieses Element wird aber über den "Content Element Wizard" nicht angezeigt, daher muss zuerst irgendein anderes Inhaltselement gewählt werden. Danach kann über die Selectbox auf den Typ "PHP Script" gewechselt werden. Nun ist es möglich, in das verfügbare Textfeld, beliebigen PHP-Code hineinzuschreiben. Aus Übersichtsgründen verwende ich gerne ein einfaches require_once() und verweise auf eine PHP-Datei im Filesystem, die ich bequem per Editor und Syntaxhighlighting bearbeiten kann.

page_php_content mit TemplaVoila

Leider funktioniert die Extension nicht mehr korrekt wenn TemplaVoila im Einsatz ist. Mit folgenden TypoScript-Code sollte jedoch die Erweiterung auch mit TemplaVoila seinen Dienst verrichten.


includeLibs.tx_pagephpcontent_pi1 = typo3conf/ext/page_php_content/pi1/class.tx_pagephpcontent_pi1.php
tt_content.page_php_content_pi1 = COA
tt_content.page_php_content_pi1.10 = < lib.stdheader
tt_content.page_php_content_pi1.20 = < plugin.tx_pagephpcontent_pi1
plugin.tx_pagephpcontent_pi1 = USER_INT
plugin.tx_pagephpcontent_pi1.userFunc=tx_pagephpcontent_pi1->main
TypoScript für page_php_content mit TemplaVoila

Wie bereits eingangs erwähnt, kann die Erweiterung page_php_content für schnelle und kurze PHP-Scripte innerhalb des Contents verwendet werden. Für umfangreichere Programmierarbeiten sollte ansonsten auf eine eigene Extension zurückgegriffen werden. Schon alleine aufgrund des Zusammenspiels mit TYPO3.

Kategorie(n): TYPO3
Kommentare (0)
15.10.2010

Eigene Daten an TYPO3 Mailform übergeben

Sollen eigene Daten an ein TYPO3 Mailform übergeben und gesendet werden, so ist das mit selbst definierten Markern und der Extension "Formhandler" möglich.

Angenommen es soll ein Wert aus einer GET-Variable an ein hidden-Field übergeben werden. Zuerst wird im Template des Formulars ein Hidden-Field erstellt. Im Beispiel hat es den Namen "produktid".


<input type="hidden" name="formhandler[produktid]" id="produktid" value="###produktid###"/>

Der Marker hat also den Namen ###produktid###. Nun übergeben wir an diesen Marker die GET-Variable mit folgendem TypoScript:


# Marker für ProduktID in Hidden Field
plugin.Tx_Formhandler.settings.predef.registration.markers.produktid = TEXT
plugin.Tx_Formhandler.settings.predef.registration.markers.produktid.data = GPvar:my_get_variable

Genauso kann eine GET-Variable an eine selbst definierte UserFunction übergeben werden. Das funktioniert ein wenig anders:


plugin.Tx_Formhandler.settings.predef.registration.markers.produktid = COA
plugin.Tx_Formhandler.settings.predef.registration.markers.produktid {
  10 = USER
  10 {
    userFunc = user_Products->user_myFunction
    getId = my_get_variable
  }
}

Um nun den Wert der Variable in der UserFunction per PHP auszulesen ist folgender Befehl notwendig:


// ProduktId holen
$id = $conf['getId']?t3lib_div::_GP($conf['getId']):false;
Kategorie(n): TYPO3
Kommentare (2)
30.09.2010

TYPO3: Auf übersetzte News direkt verlinken

Bei einem aktuellen Projekt, eine mehrsprachige Website unter TYPO3, standen wir vor der Aufgabe alle News einer Sprache auszugeben und zugleich auf die Übersetzungen einer News, falls welche vorhanden sind, direkt zu verlinken. Standardmäßig bietet die eingesetzte Erweiterung tt_news derartige Verlinkungen nicht an. Aus diesem Grund zeigen wir hier die Lösung dieses Problems.

Zu Beginn ist ein eigener Marker im Template von tt_news notwendig. Diesen Marker definieren wir mit der zusätzlichen Extension "ttnewsgenericmarkers". Danach fragen wir per TypoScript die erforderlichen Datensätze ab. Der TypoScript-Code sieht wie folgt aus:


plugin.tt_news.genericmarkers {

  data = uid,sys_language_uid

  translation = COA
  translation {
    10 = CONTENT
    10 {
      table = tt_news
      select {
        pidInList = 45
        selectFields = uid,sys_language_uid
        andWhere.dataWrap = l18n_parent = {field:generic_uid}
      }

      renderObj = COA
      renderObj {

        10 = TEXT
        10.value = In German
        10.if {
          value = 1
          isInList.field = sys_language_uid
        }

        10.typolink {
          parameter = 46
          addQueryString = 1
          additionalParams = &L={field:sys_language_uid}&tx_ttnews[tt_news]={field:uid}
          additionalParams.insertData = 1
        }

        20 = TEXT
        20.value = In Hungarian
        20.if {
          value = 2
          isInList.field = sys_language_uid
        }
        20.typolink {
          parameter = 46
          addQueryString = 1
          additionalParams = &L={field:sys_language_uid}&tx_ttnews[tt_news]={field:uid}
          additionalParams.insertData = 1
        }

        30 = TEXT
        30.value = In Romanian
        30.if {
          value = 3
          isInList.field = sys_language_uid
        }
        30.typolink {
          parameter = 46
          addQueryString = 1
          additionalParams = &L={field:sys_language_uid}&tx_ttnews[tt_news]={field:uid}
          additionalParams.insertData = 1
        }

        # Weitere Sprachen im gleichen Schema
        # ...
      }
    }
  }
}
Daten per Select holen und verarbeiten

Zuerst werden alle Datensätze geholt, wo die aktuelle News-ID im Feld "l18n_parent" vorkommt. Nun hat man die zu einer News übersetzten Datensätze (Zeile 9 - 13). Danach werden die Links je Sprache zusammengesetzt (zB Zeile 19 - 31). Das Beispiel kann natürlich an die eigenen Bedürfnisse und Anforderungen jederzeit ausgebaut werden.

Kategorie(n): TYPO3
Kommentare (0)

RSS, Twitter & Facebook