Die letzten Beiträge

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

erstellt am:24. März 2014

Letzte Änderung: 28. März 2014

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 "219" 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

erstellt am:07. Januar 2014

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

erstellt am:08. November 2013

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!


jQuery – finde alle Links, die “type=0″ beinhalten

erstellt am:28. Oktober 2013

Letzte Änderung: 29. Oktober 2013

Kurz notiert:
Alle Links, die einen bestimmten String wie zum Beispiel "type=0" im href - Teil stehen haben findet man mit

//returns an array with all Links having "type=0" within the  
//href="someDomain.tld/param1=1&type=0&anotherParam=3"
jQuery('a[href*="type=0"]');

JavaScript-Mysterien: Teil 1: Warum haben manche (jQuery-)Libraries ein führendes Semikolon?

erstellt am:14. Oktober 2013

Letzte Änderung: 10. März 2014

Dem ein oder anderen ist es vielleicht schon aufgefallen: Manche Libraries (nicht ausschließlich jQuery bezogen) haben ein führendes ";", bevor der eigentliche Code losgeht. Das sieht dann so aus:

//Plugin Code WITH leading ;
;(function () {
console.log("plugin function called");
//source code
})();

Aber warum ist da ein führendes Semikolon? Der gleiche Code würde auch ohne ; funktionieren und wäre einwandfrei. Das führende Semikolon hat den Sinn, um Code, der VORHER ausgeführt wird und möglicherweise kein abschließendes Semikolon hat, abzuschließen, damit der Plugin-Code selber ausgeführt wird. Gewöhnlich kennt man den Code nicht, den andere Entwickler schreiben :-) .
Würde das Semikolon da nicht stehen und Code vorher kein abschließendes ; haben, so würde der Plugin-Code einen Fehler werfen.

Beispiel gefällig? Plugin-Code ohne führendes Semikolon

Dieser Code wirft einen Fehler, da der Code vor dem Plugin-Code kein abschließendes Semikolon hat:

//some source code WITHOUT trailing ;
console.log("test")
 
//Plugin Code WITHOUT leading ;
(function () {
console.log("plugin function called");
//source code
})();

Zum Überprüfen den Code einfach mit Copy&Paste in die Konsole packen und ausführen. Als Resultat folgt ein TypeError:

Plugin-Code mit führendem Semikolon

Führt man den gleichen Code nochmal aus, nur mit führendem Semikolon läuft der Code durch:

//some source code
console.log("test")
 
//Plugin Code WITH leading ;
;(function () {
console.log("plugin function called");
//source code
})();

Kein Wunder, der "fremde" Code, der vorher ausgeführt wird, wird jetzt ordnungsgemäß mit einem Semikolon abgeschlossen.

Doppeltes Semikolon

Was passiert aber, wenn der vorherige Code bereits durch ein Semikolon abgeschlossen wird? Dann fügt der Plugin-Code ein weiteres Semikolon hinzu! Das ist doch unnötig! Ja, ist es - aber es führt zu keinem Fehler. Ein Semikolon schließt ein Statement in JavaScipt ab. Steht nichts davor, ist es ein leeres Statement:

//some source code WITH trailing ;
console.log("test");
 
//Plugin Code WITH leading ;
;(function () {
console.log("plugin function called");
//source code
})();

That's it! JavaScript ermöglicht (leider) das Schreiben und Ausführen von Code ohne Semikolon - davon ist jedoch "strict" abzuraten.

Weiterführende Literatur

Wer ein wenig mehr dazu lesen will, beispielsweise einen satirischen Artikel über Semikolon-Vermeidung, bitteschön: http://benalman.com/news/2013/01/advice-javascript-semicolon-haters/


« Vorherige Einträge