Elemente mit TypoScript anhand eines gesetzten GET-Parameters verbergen

Ich hatte ja schon vor einem halben Jahr nach einer Möglichkeit gesucht mit TypoScript ein Element bei einer bestimmten Sprache zu verstecken, diesmal aber habe ich nach einem Weg gesucht um bei einem bestimmten via GET übergebenen Parameter egal welchen Wertes ein Element nicht zu rendern – und siehe da, auch hier gibt es einen Weg:

page.10.marks.CONTENT.10.renderObj.stdWrap.if {
  #isTrue.data checks if my-custom-param has a value and is greater zero
  isTrue.data = GP:my-custom-param
  isInList.field = uid
  #select content elements with the following ids
  value = 2793,2797
  #hide them
  negate = 1
}

Das Template rendert den Inhalt in den ###CONTENT### – Marker hinein, unter 10 wird der zu modifizierende Content eingebaut, in meinem Fall wird unter 20 (nicht im Snippet zu sehen) dann weiterer Content eingebaut und dazwischen sitzen 2 Elemente mit der uid 2793 und 2797. Diese Elemente werden jetzt nicht mehr ausgegeben, sobald in der URL der Parameter „my-custom-param“ einen Wert hat, wobei „“ und 0 als FALSE gewertet werden, in meinem Beispiel würden die Elemente also bei example.com/index.php?my-custom-param=0 gerendert werden, bei jedem anderen Beispiel wie example.com/index.php?my-custom-param=customValue wären sie versteckt. Man beachte, dass die Notation hier für GET- und POST-Variablen gilt.
Tipps, Tricks? Verbesserungsvorschläge? Her damit!

Content-Element mit TypoScript für spezielle Sprache nicht rendern

Ist-Situation: Ein Content-Element wird für alle Sprachen ausgegeben

… enthält jedoch Inhalte, die in zwei Sprachen ausgeschlossen werden sollen. Das Content-Element wird immer am Ende jeder Seite gerendert. Folgendes TypoScript lädt den Inhalt:

page.20 = CONTENT
page.20 {
  table = tt_content
  select.orderBy = sorting
  select.languageField = sys_language_uid
  select.where = colPos = 6
  slide = -1
  slide.collect = 0
  collectReverse = 1
}

„colPost = 6“ zeigt, dass hier ein 7-spaltiges Backend-Layout ist und das Content-Element aus der letzten Spalte genommen wird :).

Soll: Der Inhalt des Content-Elements soll für die zwei Sprachen nicht ausgegeben werden

Dazu setze ich die Bedingung für die Sprache und habe mir ein TypoScript-Snippet aus der Doku zunutze gemacht und angepasst:

[globalVar = GP:L = 1] || [globalVar = GP:L = 2]
page.20.renderObj.stdWrap.if {
isInList.field = uid
value = 328
negate = 1
}
[global]

Da für beide Sprachen der Inhalt nicht gerendert werden soll kann man prima mittels einer ODER-Verknüpfung (||) dafür sorgen, dass man das TypoScript nur einmal schreiben muss. Etwas ungewohnt erscheint mir jedoch der Code innerhalb der Bedingung, der soviel sagt wie: Wenn die uid mit dem Value „328“ vorhanden ist, dann nicht (negate = 1) rendern. Das Snippet stammt von hier: http://typo3.org/documentation/snippets/sd/100/.
Alternative Lösungsvorschläge? Her damit!

PS: Die UID des Content-Elements erhält man übrigens recht einfach, wenn man mit der Maus über den Typ des Content-Feldes fährt:
Typo3 Content-UID eines Elements herausfinden per Mouseover

Typo3 – Lokale Installation unter Windows7 / 8 – Randnotizen

Dieser Artikel hält ein paar Dinge fest, die mir wiederholt bei lokalen Installationen von Typo3 mit xampp aufgefallen sind.

Situation: Typo3-Umzug von PC A zu PC B

Kurznavigation

tt_news – Alle Sprachparameter zum Übersetzen

Da ich mich regelmäßig dumm und dusselig suche um alle (über)setzbaren Parameter für eine Extension wie z.B. tt_news zu finden schreib ichs jetzt auf:
Alle möglichen Parameter für Sprachvariablen findet man bei der tt_news-Extension in der Datei „typo3conf/ext/tt_news/pi/locallang.xml“ – nicht zu verwechselt mit der locallang.xml, die im Root-Ordner („typo3conf/ext/tt_news/“) der Extension liegt, welche für die backendseitige Übersetzung zuständig ist.

Standard-Werte für die tt_news-Übersetzung

Hier ein Auszug aus der XML-Datei, typische Key-Value-Pairs:

<languagekey index="default" type="array">
	<label index="latestHeader">Breaking News:</label>
	<label index="textCatLatest">Cat:</label>
	<label index="textCat">Category:</label>
	<label index="textNewsAge">Age:</label>
	<label index="more">[more]</label>
	<label index="preAuthor">By:</label>
	<label index="backToList">&lt;- Back to: %s</label>
	<label index="goToArchive">go to Archive -&gt;</label>
	<label index="archiveHeader">ARCHIVE:</label>
	<label index="archiveItems">items</label>
	<label index="archiveItem">item</label>
	<label index="archiveEmptyMsg">Sorry, Archive contains no items</label>
	<label index="noResultsMsg">nothing found</label>
	<label index="searchEmptyMsg">Please enter a searchword.</label>
	<label index="noNewsToListMsg">no news in this list.</label>
	<label index="versionPreviewMessage">Version preview !</label>
	<label index="versionPreviewMessageLinkToOriginal">(click here to see the public version of this record)</label>
	<label index="nonPlublicVersionMsg">Error! You requested a non-public version of a tt_news article.</label>
	<label index="noNewsIdMsg">no news_id given</label>
	<label index="noTranslMsg">Sorry, there is no translation for this news-article.</label>
	<label index="noNewsForArchPeriod">Sorry, there are no translated news-articles in this Archive period.</label>
	<label index="textRelated">Related News:</label>
	<label index="textLinks">Links:</label>
	<label index="textFiles">Files:</label>
	<label index="textRelatedByCategory">Other news from this category:</label>
	<label index="pi_list_browseresults_prev">&lt; Previous</label>
	<label index="pi_list_browseresults_page">Page</label>
	<label index="pi_list_browseresults_next">Next &gt;</label>
	<label index="pi_list_browseresults_first">&lt;&lt; First</label>
	<label index="pi_list_browseresults_last">Last &gt;&gt;</label>
	<label index="pi_list_browseresults_displays">Displaying results ###SPAN_BEGIN###%s to %s&lt;/span&gt; out of ###SPAN_BEGIN###%s&lt;/span&gt;</label>
	<label index="pi_list_browseresults_displays_advanced">Displaying results ###FROM### to ###TO### out of ###OUT_OF###</label>
	<label index="pi_list_browseresults_to">to</label>
	<label index="searchButtonLabel">Search</label>
	<label index="altTextCatSelector">Display only category:</label>
	<label index="altTextCatShortcut">Go to:</label>
	<label index="catmenuHeader">Select a category:</label>
	<label index="nextArticle">Next article</label>
	<label index="prevArticle">Previous article</label>
</languagekey>

Setzen eigener Sprachwerte im TypoScript

Alle Attribute „index“ des Knotens „label“ entsprechen der TypoScript-Eigenschaft, die gesetzt werden kann. Der Wert des „label“ – Knotens entspricht dem zu übersetzenden Text. Nachfolgend ein Beispiel, wie der Standard-Text für die related News („Weitere News in dieser Kategorie“) und der more-Link im TypoScript geändert werden können:

plugin.tt_news._LOCAL_LANG {
  de{
    more = weiterlesen
    textRelatedByCategory = Das könnte Sie auch interessieren
  }
  es.more = más
  fr.more = plus
  it.more = più
  pl.more = więcej
  cs.more = víc
  nl.more = meer
  ru.more = больше
}

Hier wird jetzt der Text für weitere News aus der gleichen Kategorie in der deutschen Sprache überschrieben. Alle weiteren Parameter lassen sich auf die gleiche Art und Weise überschreiben.

Fragen? Anregungen? Kritik? Über Kommentare freue ich mich stets!

Typo3 – Extensionmanager zeigt keine neuen Extensions mehr an – XAMPP – Teil II

Nachdem ich letztens schon das Problem hatte, dass der Extensionmanager keine Extensions mehr angezeigt hat und ich das auch erfolgreich lösen konnte kam nun das selbe Problem an anderer Stelle im Typo3 wieder auf mich zu. Ich wusste noch, dass irgendwo eine Liste aller Extensions filterbar war nach allen, die Updates haben und genau diese Liste habe ich gesucht:

Unter Extension Manager –> Extension Manager klickt man auf den Tab „Remote Repository“ und sollte meiner Meinung nach alle Extensions sehen, insbesondere nachdem ich ja wie im vorherigen Artikel beschrieben gerade alle Extensions aus dem Repository neu aktualisiert hatte.

Stattdessen erwartete mich eine leere Liste (im Screenshot bereits die aktualisierte Ansicht):

Der Fehler bzw. das Problem ist auch bekannt: http://lists.typo3.org/pipermail/typo3-english/2011-October/077511.html. Unter „Last Update“ (blau umrandet im nachfolgenden Bild) stand bei mir 30.05.2012, also mehr als ein Jahr alter Stand, daher waren auch nur ca. 4.500 Extensions im Repository. Die Liste aktualisiert man auf dem sehr kleinen unscheinbaren grün umrandeten Button:

Die Liste bleibt aber leer, auch nach der Aktualisierung. Gelb umrandet kommt die Info bei erfolgreichem Updaten und das Datum und die Anzahl der Extensions aktualisiert sicht (blau umrandet im Bild). Hier lassen sich noch Filter einstellen mit Klick auf den rot umrandeten Button: Alle Extensions (aktuelle Einstellung), alle installierten Extensions und alle Extensions, die Updates haben. Die letzten beiden Einstellungen funktionieren auch, nur die Liste mit allen Extensions bleibt leer.

Schaut man sich den Request genauer an:

Die Antwort sieht folgendermaßen aus:

[
    {
        "tid": 7,
        "action": "ExtDirect",
        "method": "getRemoteExtensionList",
        "type": "rpc",
        "result": {
            "length": 0,
            "data": []
        },
        "debug": ""
    }
]

Ich habe den Request in Postman, einer übrigens sehr zu empfehlenden Browsererweiterung für den Chrome, nachgebaut, um ein wenig an den Parametern zu spielen und dabei herausgefunden, dass der query-Parameter falsch befüllt wird bei der Auswahl „Alle Extensions“. Wie oben zu sehen ist query: „“, also leer, somit ist die Antwort auch richtig: Es gibt keine Extension mit den Namen „“. Wenn ich beim Filter „tt_“ eingebe, wird der Query-Parameter mit “ query: „tt_“ “ befüllt und die Liste aktualisiert sich korrekt. Ein * als Wildcard funktioniert bei der Anfrage perfekt, um alle Extensions anzuzeigen:

Voila! Alle Extensions wären dann auch da! 🙂