timtab aufsetzen
Idee
Bei der Konzeptionierung dieser Site wurde schnell klar, daß neben klassischen Seiten auch Blogfunktionalität enthalten sein sollte. Bestimmte Funktionen, wie zum Blog gehörige Kommentare müssen auch auf anderen Seiten verfügbar sein. Das Blog soll aber nur als eine Art Einstieg auf der Homeseite dienen, während normale TYPO3 Seiten statische Inhalte wie die KnowHow Seiten präsentieren. So wird umgangen, daß wichtige, inhaltsreiche Seiten auf Sites, die nur über eine Blogfunktion verfügen, mit der Zeit "verschwinden", sich nicht mehr direkt erschließen lassen oder ohne Umwege nur schwer auffindbar sind.
timtab und Konsorten
Für ein Blog mit TYPO3 erschien nach kurzer Recherche timtab als Mittel der Wahl. timtab erfindet das Rad nicht neu, nutzt aber bestehende Extensions und erweitert sie um Blogfunktionalität. Schlüsselextension von timtab ist die leistungsfähige und zahlreich verwendete tt_news, die bereits an anderen Stellen ihre Fähigkeit und Flexibilität beweist. Ein ganzes Rudel weiterer Extensions gruppiert sich um timtab, so daß zusätzliche nette Gimmicks und eine starke Community zu erwarten sind.
Leider zeigte sich schnell, daß timtab sich alles andere als trivial aufsetzen lässt. Außerdem fällt bisher die Dokumentation insgesamt dürftig aus. Ich habe mich durch die in Abschnitten wilde Konfiguration gekämpft und besonders einige Detailschwächen glätten können. Dieser Artikel führt durch das komplette Blog Setup von schwarzbu.ch und soll dem geplagten Admin mit konkreten Beispielen besonders an den kniffligeren Stellen helfen, ein paar Stündchen Arbeit zu sparen.
Abgrenzung
Dieser Artikel erläutert den Einsatz folgender Extensions von TYPO3 in Hinblick auf ihre Blogfunktionalität, jeweils in den verlinkten Versionen:
- timtab
- tt_news
- comments
- danp_tagcloud
- realurl
- indexed_search (config wird hier nicht beschrieben)
- timtab_embeddedvideo (übrigens auch ohne timtab nur mit tt_news nutzbar)
Der Leser sollte über grundlegendes Wissen in TYPO3 auf Adminebene verfügen. Unterschiede etwa zwischen "Typoscript Template" und "PageTS config" werden nicht erläutert, da die Dokumentation an anderer Stelle bereits vorliegt.
Wenn eine vollständig neue Site auf Basis des von wordpress bekannten kubrick Layouts umgesetzt werden sollt, wartet timtab mit brauchbarer Defaulteinstellung und Dokumentation auf. Diese Site jedoch hat ein eigenes Layout und nutzt die extrem coole Extension templavoila als Lieferant für ihr Haupttemplate. timtab setzt in der default Einstellung ziemlich brutal das gesamte PAGE Objekt neu und überschreibt viele andere, u. U. notwendige Elemente. Daher nutzt diese Site das "kubrick static Template" nicht, sondern klaut nur ein paar Stücke des html-Templates und setzt Einstellungen im eigenen, leicht abgewandelten TS-Template.
Nicht eingesetzt wird ve_guestbook, da der Form-Teil der Extension TSFE->set_no_cache() (setzt eine Seite auf "No Cache") zu rufen pflegt, was erstens die Parsetime der Detailseiten dramatisch erhöht und außerdem eine Indizierung der Seiten per indexed_search verhindert. Dmitry Dulepovs neue "comments" hat hingegen ein durchdachtes Cachehandling und einige weitere Goodies an Bord. "comments" ist state-of-the-art, Dmitry maintaint außerdem realurl, eine andere komplexe fe-Extension, die zeigt, dass er genau weiß was er tut. (siehe auch: Dokumentation zu comments).
comments_ic ist ebenfalls interessant, wird hier zur Zeit aber nich produktiv eingesetzt, da ich noch keinen Bedarf dafür habe.
In der folgenden Howto sind einzelne Details noch nicht 100%ig sauber, insbesondere im TS wird sich die ein- oder andere überflüssige Zeile aufspüren lassen. Dennoch ist das Setup in sich bereits größtenteils stimmig.
Seitenbaum
Das Bild rechts zeigt den Seitenbaum mit den page IDs, die später teilweise auch in TS-Templates genutzt und angegeben werden müssen:
- [4] Shortcut auf [5]
- [5] die eigentliche Blog-Homeseite mit Gimmicks (tt_news LIST, Blogroll, ...)
- [302] Blog-Detailseite (tt_news SINGLE)
- [308] die Suchergebnisseite für danb_tagcloud (tt_news SEARCH)
- [317] Seite für Blog Post Tests vor der Veröffentlichung (tt_news LIST)
- [318] die zu [317] gehörige Detailseite (tt_news SINGLE)
- [281] nimmt die tt_news Datensätze auf
- [316] enthält tt_news Datensätze für die Preview Seite (zur Veröffentlichung wird ein Datensatz nach [317] verschoben)
- [315] enthält die tt_news Kategorien
- [311] Kommentardatensätze von comments
- [313] Datensätze des Blogrolls
Für die Preview Konfiguration gibt es auch eine elegantere Lösung, aber damit habe ich mich bisher nicht rumgeschlagen. Die simple Lösung, News Datensätze zu verschieben, bewährt sich soweit, auch die Lösung mit der "Not In Menu Preview"-Seite ist ok.
templavoila wird in dieser Howto nicht näher erläutert. Im Prinzip gibt es neben dem Defaulttemplate nur einige FCEs, um Seiten in 50 / 50 und 70 / 30 Elemente aufteilen zu können. Das erlaubt flexible Mehrspaltenlayouts und dürfte eine Standardlösung sein.
Nach dem Anlegen der Seiten müssen zunächst die oben aufgeführten Extensions installiert werden. Bei tt_news ist "Use General record storage page" nicht aktiviert, und auch sonst wurden die Defaulteinstellungen der Extensions nicht geändert (bis auf indexed_search, aber das ist eine andere Baustelle). timtab benötigt ve_guestbook und spuckt in der aktuellen Version mysql und php-error aus, wenn die Extension nicht installiert ist. Daher ist die installiert, auch wenn ve_guestbook nicht eingesetzt wird.
Grundkonfiguration TS Templates
Bei mir liegen alle Templates unter [169] auf einer Seite. Die Ankerseite [4] hat ein leeres Template "Main Template" mit gesetztem Root-Flag ("Create a template for a new Site"), das lediglich das "Master Template" inkludiert und sonst nichts tut. Das Master Template bindet die benötigten Static Templates ein, setzt alle Haupteinstellungen (page Objekt, config., ...) und enthält noch weitere TS Templates, die thematisch sortiert etwas Ordnung schaffen:
- "Lib Definitions" setzt ausschließlich lib. Objekte, die in templavoila genutzt werden (Menüs, Suchfenster, Login, ...).
- "Meta" Tags config setzt page.meta auf Defaultwerte
- "Blog, News" setzt alle für das Blog relevanten TS Parameter (timtab, tt_news, comments). Dazu später mehr.
Das "Master Template" referenziert die im Bild dargestellten "Static Templates", "timtab Kubrick" aber nicht. Beim Aufbau der Site hatte ich kubrick zwischendurch eingebunden, um die dort gesetzten Werte nach "Blog, News" zu kopieren. Danach wurde kubrick wieder entfernt und "Blog, News" Stück für Stück umgestrickt, bis es meinen Anforderungen entsprach.
Inhaltselemente
Dieser Bereich kommt in der timtab Doku auf jeden Fall zu kurz. Daher führe ich alle eingefügten Contentelemente mit Seiten-IDs, Screenshots und Einstellungen hier penibel auf. Ich hoffe, das hilft ein wenig Verwirrung zu stiften beseitigen.
Homeseite [5]
- [5] Im Hauptbereich tt_news LIST: Das html-Template wird für alle tt_news Inhaltselemente global per TS gesetzt, im Flexform also nicht angegeben. Die anderen Einstellungen wie in den Screenshots. Bei "Other Settings" wird eine maximale Anzahl an Posts definiert, damit die Homeseite nicht extrem lang werden kann. Die Navigation dazu (jüngere / ältere Posts wählen) erledigt später der Pagebrowser. Die Einstellungen in den beiden mittleren Tabs bleiben auf Defaultwerten.
- [5] Rechts oben tt_news CATMENU: Als Startingpoint wird [311] gewählt, Rest default.
- [5] Rechts als zweites Element tt_news AMENU, Startingpoint ist [281]. Das ist das Monatsarchiv.
- [5] Rechts drittes Element: Calendar (timtab-pi3), Startingpoint [281]
- [5] Rechts viertes Element: Tagcloud. Das tt_news keywords Feld mächte ich zum Ablegen der Stichwörter nutzen, daher die Einstellungen wie im Screenshot rechts, mit Startingpoint auf den Blog Post Sysfolder [281]. Linktarget im zweiten Reiter ist [308].
- [5] Rechts letztes Element: Blogroll (timtab-pi1). Startingpoint [313].
Artikel [302]: tt_news SINGLE und comments
- [302] Erstes Element tt_news SINGLE, Startingpoint [281], Rest default
- [302] Zweites Element comments "Comment Listing". Das Template habe ich aus der Extension in den fileadmin-Ordner kopiert, da ich ein paar Anpassungen vorgenommen habe. Auf das captcha habe ich gemäß der Dokumentation verzichtet und bisher auch nicht getestet - es wird sich zeigen ob das ausreicht. Die Moderation der Kommentare ist nicht aktiviert (Default abgeschaltet) - auch hier wird sich zeigen ob das genügt.
Update: Die automagische Spamerkennung funktioniert super! Die Site bekommt zwar leider im Blog nicht viele Kommentare, Spammer jedoch versuchen ihr Glück. Bisher hat comments bei dieser Erkennung noch nie versagt!
Update : Das Template muss nicht manuell in jedem Content Element gesetzt werden, wenn man das global per TS Konstante (im TS Bereich dokumentiert) macht. - [302] Letztes Element comments "Comment Form". Gleiche Einstellungen wie im Listing.
Tagsearch [308]: tt_news SEARCH
- [308] Links tt_news SEARCH mit Startingpoint [281]. Wahrscheinlich gibt es eine Möglichkeit, indexed_search für die Suche nach bestimmten Tags (Feld keywords) zu nutzen, das hätte Vorteile, weil diese Seite dann wegfallen könnte. Das habe ich bisher aber noch nicht ausgeknobelt.
Update: Werde ich wohl auch nicht ausprobieren, die jetzige Lösung bewährt sich. - [308] Rechts als Gimmick nochmal "Tagcloud", mit gleichen Einstellungen wie auf [5].
Blog Preview [317]:
- [317] tt_news LIST wie auf [5], jedoch mit Startingpoint [316] und "Other Settings" -> "PageID for single news display" auf [318]. Nachteil an der Lösung mit der eigenen Seite für den Preview ist, dass das CATMENU auf [5] auch News-Records zählt, die auf [316] liegen. Bisher habe ich noch keine Möglichkeit gefunden dem Kategoriemenü beizubringen, dass es nur News Records zählen soll, die auf bestimmten Seiten ([281] in meinem Fall) liegen. Simple Lösung ist daher entweder die fehlerhafte Anzeige in Kauf zu nehmen, oder die Kategorien eines Newssatzes erst nach der Veröffentlichung zuzuordnen. Alternativ wäre es wohl auch möglich, VERSION_PREVIEW von tt_news zu nutzen, aber auch hier liegen noch keine weiteren Erfahrungen vor. Daher war die Lösung mit dieser Seite erstmal einfacher.
Blog Preview Detail [318]:
- [318] tt_news SINGLE wie auf [302], Startingpoint [316].
html Templates
Die Änderungen der html Templates werden nicht im Detail beschrieben. An einigen Stellen sind die Tags geändert, an anderen Marker hinzugefügt, umgesetzt oder gelöscht. Geänderte Templates sind aber immer unterhalb des fileadmin Ordners gespeichert und werden in den jeweiligen Extensions per TS entsprechend referenziert. Grundlage für das News-Template ist res/kubrick/kubrick_tt_news.tmpl der timtab Extension, für comments ist es das leicht geänderte res/pi1_template.html.
Das aktuelle News Template liegt hier, comments hier. Wichtige Änderungen im kubrick Template sind ein zusätzliches div und ul um AMENU und CATMENU, um diese Bereiche später besser stylen zu können.
Update: Weiterhin sind die Marker für die Anzahl der Kommentare von ###BLOG_COMMENTS_COUNT### in ###TX_COMMENTS_COUNT### geändert, um hier den Hook von comments für tt_news, statt des Hooks aus timtab zu nutzen. Das spart einen Hack im Source von timtab.
An dieser Stelle hatte mir tidy anfänglich stark reingepfuscht um die offenen li's auf denkbar ungünstige Weise zu fixen. Aber was solls, schließlich hab ich nur eine Stunde verzweifelt gesucht, wo das ul um die komplette rechte Spalte plötzlich herkommt. htmlTidy (in localconf.php fest eingebunden) ist zwar wirklich nett, kommt einem aber ab- und an in die Quere.
Weiterhin sind ein paar h2 Tags in h1 geändert, aber das ist kosmetisch und kann per css auch anders gelöst werden. tt_news LIST hat zusätzlich noch einen Marker für den Autor eines Eintrages, für Bildreferenzen, und den Pagebrowser bekommen. Die möglichen Marker lassen sich übrigens gut im, bei tt_news mitgelieferten Template EXT:pi1/tt_news_v2_template.html nachsehen.
TypoScript
Wie beschrieben, ist das komplette, für das Blog zuständige TS im Template "Blog, News" ausgelagert und wird vom "Master Template" geladen. Zum jetzigen Zeitpunkt sind im TS sicher noch immer einige überflüssige Zeilen enthalten, dennoch quote ich komplett. Ich bin kein Fan der Constants und habe im Vergleich zum kubrick TS ziemlich viel rausgeworfen. Konstanten machen imho nur Sinn, wenn man Lösungen abstrahieren muss - sie stören jedoch beim Basteln, da man dann immer wieder nachsehen und prüfen muss. Das folgende Setup ist eher straight.
Constants
plugin.tt_news {
allowCaching = 1
pid_list = 281
singleMaxW = 500
singleMaxH = 500
latestMaxW = 60
latestMaxH = 40
listMaxW = 500
listMaxH = 500
}
plugin.tx_timtab_pi2 {
pidStorePosts = 281
connectionTimeout = 30
bloggerTitle = Blog post
enableBlogger = 0
enableMetaWeblog = 0
strictAPI = 0
}
page.file {
template_tt_news = fileadmin/tmpl/kubrick_tt_news.tmpl
}
plugin.tx_comments_pi1 {
templateFile = fileadmin/tmpl/comments.html
}
Das setzt nur ein paar grundlegende Dinge, die wichtigste Zeile ist das Template für tt_news mit page.file.template_tt_news. Die maxW und MaxH Angaben beschränken Bilder auf Maximalgrößen.
Update: Zusätzlich wird das Template für comments global angegeben, später werden auch Hooks in tt_news von comments (für die Anzahl der Kommentare zu einem Beitrag) das hier angegebene Template nutzen.
timtab allgemein
plugin.tx_timtab {
clearPageCacheOnUpdate = 5,302,317,318
displayCatMenu {
targetPid = 5
showLatestDate = 1
hierarchical = 1
}
gravatar >
}
- clearPageCacheOnUpdate löscht beim Update eines Datensatzes alle Seitencaches mit Blogposts.
- displayCatMenu.targetPid ist die Zielseite für das Kategoriemenü, und linkt hier auf Home.
- Mit gravatars habe ich mich (noch) nicht angefreundet, daher lösche ich das komplette Setup. Gravatare sind "globale Avatare" für kommentierende Benutzer. Benutzer können damit blogübergreifende Avatare festlegen. Dem Konzept stehe ich zur Zeit eher skeptisch gegenüber, habe mich aber noch nicht genauer umgesehen.
timtab pi1
plugin.tx_timtab_pi1 {
header_stdWrap.wrap =
dontWrapInDiv = 0
pid_list = 0
listClass =
}
Das setzt einige Einstellungen für den Blogroll. Auf die Wraps kann ich verzichten, und auch sonst sind keine wichtigen Dinge gesetzt.
timtab pi2
plugin.tx_timtab_pi2 {
trackback.validate = 1
trackback.spam.mark = 1
}
pi2 ist die Trackbackfunktion des Blogs. Bisher habe ich mich damit noch nicht beschäftigt, daher sind die Zeilen wohl überflüssig und funktionieren nicht. Trackbacks erlauben einen eigenen Kommentar mit Link auf die Seite zu erstellen, wenn ein Blogeintrag von einer anderen Seite referenziert wird. Trackbacks sind anfällig fuer Spam (Trackbackspam). Die Funktion ist zur Zeit noch auf meiner ToDo-Liste.
timtab pi3
plugin.tx_timtab_pi3 {
header_stdWrap.wrap =
dontWrapInDiv = 0
pid_list = 281
targetPid = 5
week_begins = 1
gmt_offset = 0
weekdayNameLength = 1
}
Auch nichts Aufregendes hier, pi3 ist der Kalender des Blogs: Tage an denen ein Post veröffentlicht wurde werden mit einem Link versehen, mit Klick auf den Link erhält man die Posts des jeweiligen Tages. Wichtig ist hier eigentlich nur, daß der Kalender auf [5] linkt. Ohne diese Angabe werden die Links nicht gerendert.
comments
plugin.tx_comments_pi1 {
advanced.dateFormat = d.m.Y H:i
requiredFields_errorWrap.dataWrap = <span class="tx-comments-required-error">Fehler: |</span>
}
Fast alles in comments lässt sich per Flexform im Inhaltselement steuern. Die beiden Zeilen setzen lediglich das Datumsformat auf die gewohnte deutsche Syntax, und lokalisieren die Fehlermeldung bei fehlerhaften Eingaben von "Error" auf "Fehler".
tt_news
Das tt_news Setup ist komplexer. Insbesondere der Pagebrowser (vor / zurück auf der Homeseite) und das Kategoriemenü sind angepasst um das gewünschte Ergebnis zu erreichen. Zunächst das grundlegende Setup:
plugin.tt_news {
templateFile = {$page.file.template_tt_news}
displayList.date_stdWrap.strftime = %B %d, %Y
displaySingle.date_stdWrap.strftime = %A, %B %d, %Y at %I:%M %p
dontUseBackPid = 1
catTextMode = 3
newsAmenuUserFunc =
useHRDates = 1
useHRDatesSingle = 1
useSubCategories = 1
limit = 10
Geladen wird das in den Konstanten definierte Template, die Parameter für Datumsformatierungen werden gesetzt und der Zurücklink im Single View abgeschaltet. useHRDates steht fuer "Human Readable Date" und betrifft das Aussehen der Übergabelinks, was eine schöne relaurl Konfiguration ermöglicht (noch nicht umgesetzt).
displayCatMenu {
mode = timtab
catmenu_stdWrap.wrap = <div class="catmenu"><h1 class="news-catmenu">Rubriken</h1>|</div><div class="clear"></div>
}
Einstellungen für das Kategoriemenü (Rubriken auf Home). Der Wrap ist etwas schräg geraten, da das "Last Post" Datum immer rechts floaten soll, und ich daher ein clear:both am Ende benötige. Einige html Template Anpassungen waren auch nötig, glaube ich. Details finden sich im default.css der Site.
displayList {
subheader_stdWrap.stripHtml = 0
subheader_stdWrap.crop = 10000 | ... | 1
image.imageLinkWrap >
image.imageLinkWrap < plugin.tt_news.displaySingle.image.imageLinkWrap
}
Einstellungen für tt_news LIST. Das hat mich Nerven gekostet. Per default entfernt LIST alle html-Tags aus dem gerenderten Subheader, bzw. aus dem Body-Bereich eines Newsdatensatzes, wenn Subheader leer ist. D.h., es werden auch alle Links entfernt, was dazu dient, beim anschließenden crop (kürzen) des Textes auf eine bestimmte Anzahl Zeichen (default 230) kein ungültiger html-Code entstehen zu lassen. Ich möchte aber auf meiner Homeseite durchaus längere Texte haben, und die Links sollen auch funktionieren. Daher ist das Parsing hier angepasst. Mal sehen, wann es das erste mal knallt. Weiterhin werden die Einstellungen für das Bildrendering von SINGLE übernommen, damit auch die auf LIST dargestellt und ggf. runtergerechnet werden.
usePiBasePagebrowser = 1
pageBrowser {
maxPages = 1
tableParams =
showPBrowserText = 0
showFirstLast = 0
showResultCount = 0
dontLinkActivePage = 0
inactiveLinkWrap = <span class="inactive">|</span>
browseBoxWrap = |
browseLinksWrap = <div class="later"> | </div><div class="clear"></div>
disabledLinkWrap = |
activeLinkWrap = </div><div class="hidden"> | </div><div class="earlier">
}
_LOCAL_LANG {
de.pi_list_browseresults_prev = Jüngere >
de.pi_list_browseresults_next = < Ältere
}
Das ist das Setup für die "Jüngere" und "Ältere" Links auf der Homeseite [5]. Per Default erzeugt der Pagebrowser hier eine Tabelle, die man nur durch Umsetzen der Wraps loswerden kann. Da es nicht möglich ist, den inneren Teil mit den Seitenlinks abzuschalten, mussten einige Tricks eingebunden werden, um nicht den Source hacken zu müssen: Der Seitenbrowser ist auf eine Seite (die Aktuelle) begrenzt, und hat immer die Klasse 'hidden', die per css ausgeblendet wird. Um die Links "Jüngere" bzw. "Ältere" links, respektive rechts floaten zu können, mussten diese ebenfalls unterschiedliche css-Klassen bekommen. Das ist imho nur durch diese Wraps möglich. Nicht schön, aber funktioniert soweit. Für elegantere Lösungen bin ich offen.
archiveTypoLink.parameter = 5
enableArchiveDate = 0
archiveTitleCObject = COA
archiveTitleCObject {
10 = TEXT
10 {
field = start
strftime = %B %Y
wrap = <span class="date">|</span>
if {
value.field = start
equals.data = GPvar:tx_ttnews|pS
}
}
20 < .10
20.if.negate = 1
30 = TEXT
30 {
field = count
wrap = <span class="count">(|)</span>
}
}
_LOCAL_LANG {
de.archiveHeader = Archiv
}
Dieser Bereich baut das Archivmenü neu auf. Das sind auf der Blogseite die Monatslinks. Im Vergleich zur Vorlage aus tt_news static TS kommt der Bereich 30 dazu, um zusätzlich die Anzahl der Posts im jeweiligen Monat auszugeben. In Konsequenz sind die Wraps bei den anderen Blöcken etwas geändert. Zum Abschluss wird noch die Überschrift umgesetzt.
archiveEmptyMsg_stdWrap.wrap =
searchEmptyMsg_stdWrap.wrap =
noNewsIdMsg_stdWrap.wrap =
}
Aufräumarbeiten mit dem Löschen einiger überflüssiger Wraps.
plugin.tt_news {
displayXML {
xmlTitle = schwarzbu.ch
xmlLink = http://schwarzbu.ch/
xmlDesc = Letzte News von schwarzbu.ch
}
}
xmlnews {
10 >
10 < plugin.tt_news
10.pid_list >
10.pid_list = 281
10.singlePid = 302
10.defaultCode = XML
10.catTextMode = 1
10.catImageMode = 0
}
Einstellungen fuer den rss-Feed: Das default tt_news TS setzt einen Page type 100, der durch diese Einstellungen zusätzliche Parameter mitkriegt. Was genau da passiert kann man bestens im Object Browser nachvollziehen. Der Link auf den rss-Feed wird im Master Template noch im html-Head eingebunden:
page.headerData {
80 = TEXT
80.value = <link rel="alternate" type="application/rss+xml" title="RSS-Feed" href="http://schwarzbu.ch/rss.xml" />
}
Damit der rss.xml-Link funktioniert, muss man realurl noch verklickern, daß eine Anfrage an rss.xml auf type=100 umgebogen werden muss. Daher in der realurl-config im php:
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
...
'fileName' => array (
'index' => array(
'rss.xml' => array(
'keyValues' => array (
'type' => 100,
),
),
),
...
danp_tagcloud
plugin.tx_danptagcloud_pi1 {
_CSS_DEFAULT_STYLE >
all_stdWrap.wrap = <!--TYPO3SEARCH_end--><div class="tagcloud">|</div><!--TYPO3SEARCH_begin-->
}
Nur eine kleine Sache für die Suche: Wenn die Tagcloud nicht für den crawler ausgeschlossen wird, dann zeigt indexed_search immer alle von der Tagwolke ausgegebenen Seiten als Treffer an, sobald man ein Suchwort aus der Tagwolke eingibt. Dieser Wrap schaltet also einfach die Indizierung ab, baut die Tagwolke auf, und schaltet die Suche wieder ein.
Source Hacks
Unglücklicherweise sind einige meiner Ziele nicht erreichbar gewesen, ohne den Source zu hacken. Besonders timtab musste hier etwas leiden. Ein diff zur Version 0.5.11 ist hier. Die Änderungen sind ganz klar nur Hacks und keine vernünftigen Lösungen. Wer etwas davon übernimmt, muss sich im klaren sein, daß die Änderungen überschrieben werden, wenn man ein Update von timtab einspielt! Nicht vergessen, das kann sonst in eine hübsche Fehlersuche ausarten. Die einzelnen Hacks seien aber kurz angesprochen:
- class.tx_timtab_catmenu.php
Dieses Stück Code beeinflusst das Kategoriemenü von tt_news. Da ich bei den Kategorien zuerst den Namen, dann die Anzahl der zugeordneten Posts, und dann rechts floatend das Datum des letzten Eintrags haben wollte, mussten in den Code ein paar spans rein, damit die einzelnen Felder per css auseinander gehalten werden können. Nichts Wildes, dieser Hack. - class.tx_timtab_fe.php
Die Anzahl der Kommentare wird auf der Listenseite aufgeführt, nutzt aber eine Abfrage auf die Tabelle von ve_guestbook und ist noch nicht an comments angepasst. Dieser Hack setzt brutal und ohne zusätzliche Abstraktion die Query so um, das die richtigen Reihen aus tx_comments_comment bestimmt werden und sich damit die richtige Anzahl an Kommentaren für einen Post ergibt.
Update: Mit der Nutzung des Markers ###TX_COMMENTS_COUNT### statt ###BLOG_COMMENTS_COUNT### im tt_news Template ist dieser Hack überlfüssig. - pi1/class.tx_timtab_pi1.php
Kleiner Hack für den Blogroll: Die Datensätze sollen nach Name sortiert sein, was sich leider nicht in der Extension konfigurieren lässt. - pi3/class.tx_timtab_pi3.php
Dieser Hack setzt auch bei Tagen, die keinen Post enthalten (also nicht verlinkt werden) und < 10 im Tag sind, eine führende Null wie bei verlinkten Tagen. Das ist ein kleiner Bug und sollte gefixt werden.
Cache handling
Damit auf der Homeseite [5] die Anzahl der Kommentare neu berechnet wird, wenn auf der Single View Seite [302] ein neuer Kommentar hinzugefügt wird, kriegt [302] noch ein Extensiontemplate (Danke Dmitry, das ist eine weitere clevere Funktion!):
plugin.tx_comments_pi1 {
additionalClearCachePages = 5
}
Zusätzlich sind noch ein paar PageTSconfig (!) Optionon nötig, die Caches von Inhaltsseiten löschen, wenn in den Sysfoldern Datensätze geändert oder hinzugefügt werden. Weil ich faul bin habe ich einfach der Seite "Blog Data" [314] folgende Zeile mitgegeben:
TCEMAIN.clearCacheCmd = 5,302,308,317
Damit werden die Caches der Home, der Single View und der Preview Seiten gelöscht, wenn in den Blog Sysfoldern mit Datensätzen rumhantiert wird.
indexed_search
Die komplette Konfig von indexed_search will ich an dieser Stelle nicht erläutern. Für Leute, die sich damit auskennen ist aber viellicht zumindest die Einstellung für die Single View Seite interessant, folgendes PageTSconfig indiziert einzelne Blogeinträge:
# Enable indexed searching
# Configure crawler engine
tx_crawler.crawlerCfg.paramSets {
news = &tx_ttnews[tt_news]=[_TABLE:tt_news;_PID:281]
news.procInstrFilter = tx_indexedsearch_reindex, tx_cachemgm_recache
news.baseUrl =http://schwarzbu.ch/
news.cHash = 1
}
realUrl
Zunächst die realurl-Extension installieren um im Master Template einschalten:
config {
# enable realurl
simulateStaticDocuments = 0
baseURL =http://schwarzbu.ch/
tx_realurl_enable = 1
# anchors with prefix
prefixLocalAnchors = all
# no parameter twice or more
uniqueLinkVars = 1
}
Mit aktuellen Versionen von realurl kann man das Setup in eine eigene Datei auslagern. Damit bleibt localconf.php etwas übersichtlicher, und die realurl-Konfig lässt sich leicht in andere Installationen übertragen. Per Default sollte man die Konfig also in typo3conf/realurl_conf.php ablegen:
<?php
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'init' => array(
'enableCHashCache' => 1,
'appendMissingSlash' => 'ifNotFile',
),
'preVars' => array(
array(
'GETvar' => 'no_cache',
'valueMap' => array(
'nc' => 1,
),
'noMatch' => 'bypass',
),
array(
'GETvar' => 'L',
'valueMap' => array(
'en' => '2',
),
'noMatch' => 'bypass',
),
),
'fileName' => array (
'index' => array(
'rss.xml' => array(
'keyValues' => array (
'type' => 100,
),
),
'index.html' => array (
'keyValues' => array(
),
),
),
),
'postVarSets' => array(
'_DEFAULT' => array(
// news pagebrowser
'browse' => array(
array(
'GETvar' => 'tx_ttnews[pointer]',
),
),
// news categories
'category' => array (
array(
'GETvar' => 'tx_ttnews[cat]',
'lookUpTable' => array(
'table' => 'tt_news_cat',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
// news tagssearch
'tag' => array(
array(
'GETvar' => 'tx_ttnews[swords]',
),
),
// news date
'date' => array(
array(
'GETvar' => 'tx_ttnews[year]',
),
array(
'GETvar' => 'tx_ttnews[month]',
),
array(
'GETvar' => 'tx_ttnews[day]',
),
),
// news article
'title' => array(
array(
'GETvar' => 'tx_ttnews[tt_news]',
'lookUpTable' => array(
'table' => 'tt_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
// comments pagebrowser
'comments' => array(
array(
'GETvar' => 'tx_comments_pi1[page]',
),
),
),
),
'pagePath' => array(
'type' => 'user',
'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
'spaceCharacter' => '-',
'languageGetVar' => 'L',
'expireDays' => 3
),
);
?>
Die ersten Bereiche "init" und "preVars" sind Standardkonfigurationen. Für den Bereich init gibt es noch weitere Möglichkeiten, einige davon haben aber zumindest in frühen realurl-Versionen Probleme gemacht (zB. verbessertes Caching), seit dem hatte ich die nie wieder angefasst. Hier ist also noch Verbesserungsbedarf. PreVars hat eine Konfiguration für den unbeliebten "no_cache" Parameter, sowie eine Vorbereitung für eine zweite Sprache.
Wie oben bereits beschrieben gibt es in der Sektion "fileName" einen Teil für rss.xml, der Rest ist der Anhang mit index.html für normale Seitentypen.
"postVarSets" ist die eigentliche Konfiguration der tt_news Übergabeparameter: "browse" ist der Pagebrowser. Die Konfig bedeutet: Wird als Pfadsegment das Stichwort "browse" gefunden, dann interpretiert realurl das darauf folgende Segment als Wert des Parameters tx_ttnews[pointer]. Dies gilt analog für die anderen Bereiche. Bei der Katogorie und dem Titel ist der Wert des Übergabeparameters aber die uid des Datensatzes. Daher wird hier eine Datenbankanfrage konfiguriert, um die jeweilige Zahl durch den Kategorie- respektive den Beitragtitel im Pfadsegment zu ersetzen.
Insgesamt ist dies nur eine Beispielkonfiguration, die Parameter lassen sich auch anders verwursten.
css
Das muss sich jeder selbst zusammenfriemeln. Alle relevanten Styles habe ich im default.css gesetzt, am Ende sind auch eine ganze Menge Zeilen dabei zusammengekommen. Wenn eine Extension per Default ein eigenes css setzt, werfe ich die normalerweise per TS wieder raus. Grundsätzlich findet sich in den Styles auch nicht übermäßig viel Magie. Und: Ja, den IE habe ich auf dieser Site noch nicht komplett durchgetestet und gefixt. Aber den benutzt ja eh kein vernunftbegabter User ; )
TCA Defaults
Noch etwas Magie für den vollen Backendgenuss: Per Default sind neue News Datensätze hidden, und vom Typ "News". Da Datensätze für diese Site aber immer zunächst unter Preview Posts [316] angelegt werden, und damit sowieso nicht öffentlich freigeschaltet sind, müssen die nicht versteckt sein. Weiterhin wird der "normale" Newstyp nicht genutzt. Andere Defaults sparen also ein paar Klicks und vemeiden sinnlose Fehlersuche.
$typo_db_extTableDef_script = "extTables.php";
Diese Angabe in typo3conf/localconf.php bewirkt, dass die Datei typo3conf/extTables.php geladen wird, und dortige TCA Angaben Vorrang haben. Damit kann man das Backend anpassen und praktisch alle Backendformulare ändern, oder anders vorbelegen. Sehr praktisch!
$TCA['tt_news']['columns']['type']['config']['default'] = 3;
$TCA['tt_news']['columns']['hidden']['config']['default'] = 0;
Diese beiden Zeilen in extTables.php bewirken die Umstellung der oben genannten Defaults ("Blog Post" ist type 3, wenn keine andere Extension an der Ecke rumfummelt). Möglicherweise muss man noch typo3conf/temp_CACHED* löschen, damit diese Änderungen wirksam werden.
Noch bestehende Fehler
Das Setup hat an einigen Stellen noch ein paar kleinere Macken:
Die Suche indiziert noch einige Textbereiche, die besser ausgeklammert sein sollten. Dazu gehären die "Nächster" und "Voriger" Links auf der Single View Seite [302]. Das führt dazu' daß mehrere Trefferseiten angezeigt werden, wenn ein Suchwort eingegeben wird, das in der Überschrift eines Blogposts auftaucht.Zusätzliche <!--TYPO3SEARCH_end--> / begin Kommentare im Template eingefügt.Bisher lokalisiere ich einige Textstellen von comments brutal im locallang.xml. Das müsste eigentlich auch wie bei den anderen Extensions per TS gehen, aber irgendwie war ich dazu zu blöde.In aktueller comments Version gefixt.- pings und trackbacks fehlen noch. Für Hinweise bin ich dankbar.
realUrl benötigt noch eine Überarbeitung.
Fazit
timtab und Konsorten sind als Blog für eine Site durchaus einsetzbar und funktionieren auch. Einige Details sind aber hakelig oder kompliziert. Schlimm ist der Pagebrowser, bei dem ich nur mit fiesen Tricks die gewollte Funktionalität erreichen konnte.
Wenn timtab mit indexed_search kombiniert wird, sollte auf ve_guestbook zugunsten von comments verzichtet werden. Ich hatte das ve_guestbook Setup bereits komplett, bis die Suche angefangen hat, wegen nicht cachebarer Seiten rumzuzicken. Einen Workaround hätte ich dazu auch noch hingekriegt, der ist aber nicht schön. comments fällt als Extension hingegen positiv auf und ist ein echtes Highlight. Sowohl im Code, in der Funktionalität als auch besonders mit der gelungenen Dokumentation.
Erfreulich simpel ist danp_tagclouds. Die Extension funkionierte ohne größeren Stress praktisch auf Anhieb.
Kommentare, Kritik, Hinweise und Verbesserungsvorschläge sind gern gesehen. Beachtet dabei bitte unseren Howto Disclaimer. Wir hoffen die Seite hilft euch weiter und spart vielleicht das ein- oder andere Stündchen Arbeit beim Setup. Dank gilt den zahlreichen Extension Autoren, die die eigentliche, ohne Zweifel großartige, Arbeit leisten.










danke
danke erstmal für deine geniale Anleitung! Deine Page ist auch sehr gelung. Nun hätte ich aber noch eine Frage und zwar würde ich gerne das Datum bei den Rubriken weg haben. Hab es bis jetzt noch nicht gefunden. Vllt hast ja kurz Zeit für nen Hinweis.
Danke ;-) Baba.
Die TS Angabe plugin.tt_news.catMenu.mode=timtab bewirkt, daß ext/timtab/class.tx_timtab_catmenu.php zur Generierung des Kategoriemenüs genutzt wird. Daher muss man dort zuerst suchen.
Bei mir findet sich passender Code in Zeile 280, dort wird das Datum eingefügt. Da timtab leider nicht sauber mit Templates arbeitet, muss das php-Müsli angepasst werden.
Also zB Ersetzung der Zeile
$link .= '<span class="date"> '.strftime($this->conf['displayCatMenu.']['catLatestDate.']['strftime'], $lastPost).'</span><div class="clear"></div>';
durch
$link .= '<div class="clear"></div>';
Per css lässt sich das übrigens auch erschlagen, indem man einfach die date Klasse auf visibility:hidden; setzt. So kommt man wenigstens an einem weiteren Source Hack vorbei.
Die Code-Blöcke sind überarbeitet und verschlucken kein html mehr. Der RTE in 4.2 bringt da neue Features, die <blockquote> sauber handeln. Sehr praktisch!
Die Code-Blöcke haben jetzt ein hover, durch das die auf volle Breite gesetzt werden. Das soll die Lesbarkeit erhöhen, auch damit man leichter sehen kann, wo satzbedingte Umbrüche sind. Den hover rafft natürlich IE wieder nicht, aber egal.
Weiterhin sind ein paar der krassesten IE Bugs im css gefixt, und auch sonst sind ein paar Kleinigkeiten im css passiert.
Die Idee, comments von D. Dulepov anstelle von ve_guestbook zu verwenden, werde ich ernsthaft in Erwägung ziehen.
Schade ist jedoch an timtab, dass ich nicht der Einzige bin, dem trackbacks und pings Probleme bereiten. Wäre ich das, könnte ich etwas dazulernen. Dies scheint jedoch immer mit dem Verzicht auf das Kubrick-Template einherzzugehen - laut Ingo Renner funktionieren ja sowohl trackbacks als auch pings.
Das Tutorial ist großartig und hätte mir vor einer Weile viel Zeit erspart. Aus verschiedenen Gründen verzichte ich seit einer Weile auf timtab und bin recht zufrieden.
Gründe:
http://www.thomaskieslich.net/de/blog/artikel/archiv/schoenes_timtab_howto_gefunden.html
Die comments finde ich ebenfalls großartig und habe sie um ein paar Funktionen(z.B. Garvatar) erweitert(Hooks sei dank)
http://www.thomaskieslich.net/de/lab/typo3/erweiterung_fuer_comments.html
Deine Gravatare für comments sind fein. Warum ich skeptisch bin: Die gravatar-Site kann viele Dinge dadurch sehen: Wo ich poste, wie beliebt Seiten sind und vieles mehr. Profiling leicht gemacht. Das finde ich prizipiell nie gut, natürlich will ich aber dem Dienst nichts unterstellen.
Bei den Trackbacks bin ich gespannt wie sich das in Sachen spam verhalten wird. Interessant sind halt die Links von extern zu mir (dafür muss man eigentlich nur ping können?!). Aber wenn man eine Richtung macht, sollte die andere fairerweise auch möglich sein. Werde mir das Thema zumindest mal ansehen.
Das sollte keine Kritik sein, sondern wirklich nur eine alternative Ansicht.
Beim Trackback vor allem auf ein ausgeschaltetes xhtml_cleaning achten.
Viel Erfolg Thomas
gRTz
ben
Danke für das gute Tutorial! Man kann wirklich einiges daraus lernen. Ein Frage: bei mir will der Kalender der Extension timetab einfach nicht auftauchen. Hat jemand einen Hinweis.
LG Tom
Sauber! Weiter so!
Dokumentation des neuen Hooks in comments für die Anzeige der Anzahl Kommentare zu Blog Posts, daher geänderte Marker und ein nun überflüssiger timtab Hack.
Ich bekomme meinen Timtab Kalender nicht zum laufen? Hab alles gemacht wie oben erklärt - auch schon alle Foren und Manuals gelesen - selbst BigBrother Google weiss nicht weiter: Jemand ne Ahnung was ich noch beachten müsste? Unter test.ghazzo.com gibts nen Vorgeschmack...
Vielen Dank im Vorraus.
- tt_news 2.5.2. Damit liefen die Archivlinks nicht mehr (Links mit Datum aber ohne Titel), Fix durch tt_news TS Parameter enableArchiveDate = 0
- tt_news TS Parameter useHRDatesSingle auf 1 gesetzt für bessere realurl Parameter.
- Doku von realurl.
PS: Wie findest du das Design? mal ganz ehrlich?