Alex' Blog http://blog.alexander-fischer.org Blog von Alexander Fischer über Dinge, die mich interessieren, wie Webprogrammierung, lustigen Dingen, Infos zu Wordpress, Erfahrungsberichten, SEO, PHP und jQuery Wed, 24 Sep 2014 19:57:11 +0000 de-DE hourly 1 http://wordpress.org/?v=3.4.2 Elemente mit TypoScript anhand eines gesetzten GET-Parameters verbergen http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/elemente-mit-typoscript-anhand-eines-gesetzten-get-parameters-verbergen/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/elemente-mit-typoscript-anhand-eines-gesetzten-get-parameters-verbergen/#comments Wed, 24 Sep 2014 19:50:52 +0000 Alex http://blog.alexander-fischer.org/?p=549 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!

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/elemente-mit-typoscript-anhand-eines-gesetzten-get-parameters-verbergen/feed/ 0
Europawahl – der Tag danach und die Parteien in den sozialen Medien http://blog.alexander-fischer.org/politik/europawahl-der-tag-danach-und-die-parteien-in-den-sozialen-medien/ http://blog.alexander-fischer.org/politik/europawahl-der-tag-danach-und-die-parteien-in-den-sozialen-medien/#comments Mon, 26 May 2014 18:40:06 +0000 Alex http://blog.alexander-fischer.org/?p=527 Ohne auch nur die Ergebnisse der Europawahl zu kennen hat mir mein S.M.A.R.T.-Tool direkt gezeigt, wer die großen Sieger der Europawahl in der Parteienlandschaft in Deutschland waren:

Grafik über Facebook Talking abouts - Kennzahlen der Parteien: CDU, SPD, Die Grünen, Die Llinken, Alternative für Deutschland, NPD, Piratenpartei und Die PARTEI

Die Alternative für Deutschland (AfD) und DIE PARTEI. Verrückt, oder? :) Bei den Likes hat DIE PARTEI sogar die bis gestern (25.05.2014) führende AfD überholt! Im Vergleich zum Vortag ist die AfD der klare Sieger. Die Kurve zeigt, dass während der Europawahl sehr viel über die Alternative für Deutschland gesprochen wurde: Waren es am 25.05. noch 33.507 Erwähnungen, so sind es heute abend (26.05.2014) schon 53.975.

Google+ eignet sich da wohl nicht so als guter Messwert: Dort blieben die Kurven relativ flach, einzig auch hier hat DIE PARTEI einen Anstieg nach oben verzeichnet und hat die NPD bei den Followern überholt.

Ich werde wohl demnächst relative Statistiken mit einbauen, um An- und Abstiege besser verdeutlichen zu können. Gerade bei den Views der Beiträge auf Google+, bei welchem die Piratenpartei um Längen führt lohnt es sich dann wohl mal, genauer hinzuschauen. Bei Facebook ist die Kurve sogar abfallend für die "Talking abouts".

Wer ein paar andere Vergleiche ziehen will braucht nur die gewünschten Parteien auswählen und dann auf "Draw custom graphs" klicken auf der S.M.A.R.T. - Tool - Seite. (Das Wording werde ich hier noch eindeutschen :) ).

]]>
http://blog.alexander-fischer.org/politik/europawahl-der-tag-danach-und-die-parteien-in-den-sozialen-medien/feed/ 0
Content-Element mit TypoScript für spezielle Sprache nicht rendern http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/content-element-mit-typoscript-fur-spezielle-sprache-nicht-rendern/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/content-element-mit-typoscript-fur-spezielle-sprache-nicht-rendern/#comments Mon, 24 Mar 2014 17:00:37 +0000 Alex http://blog.alexander-fischer.org/?p=484 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

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/content-element-mit-typoscript-fur-spezielle-sprache-nicht-rendern/feed/ 1
Typo3 – Lokale Installation unter Windows7 / 8 – Randnotizen http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-lokale-installation-unter-windows7-8-randnotizen/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-lokale-installation-unter-windows7-8-randnotizen/#comments Tue, 07 Jan 2014 11:06:45 +0000 Alex http://blog.alexander-fischer.org/?p=450 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

Fehler: Alle Bilder werden nicht angezeigt.

Unter Typo3 Version 6.x wird auch folgender Fehler geworfen:

Uncaught TYPO3 Exception #1329821485: File has been deleted.

Je nach Fehlereinstellungen folgt dann z.B.:

RuntimeException thrown in file
D:\xampp\typo3_sources\typo3_src-6.1.3\typo3\sysext\core\Classes\Resource\AbstractFile.php in line 527.

mit ähnlichem Pfad und weiteren Fehlerdetails. Kommt keine Fehlermeldung (mehr, da z.B. durch mehrfachren Reload der Seite alle Bilder durchgegangen werden bis keines mehr einen Fehler werfen kann :) ), wird meist kein Bild mehr angezeigt. Im Quelltext sieht man, dass die Bilder korrekt kopiert wurden, jedoch werden sie alle mit 0x0 Pixeln angezeigt.

Lösung: ImageMagick installieren. Vermutlich fehlt hier ImageMagick. Hatte diesen Fall sowohl bei Windows 7 wie auch bei Windows 8. Zu beachten ist hier:
Binary Release downloaden und installieren, empfohlenerweise jedoch nicht im vorgegebenen Standard-Pfad, sondern beispielsweise unter "D:\ImageMagick\". Nach der Installation ins Install Tool von Typo3 wechseln und dort unter "Basic Configuration" den genauen Pfad eintragen, für Windows mit Backslashes (\) statt "/" innerhalb eines Pfades ohne den letzten Slash. In meinem Fall sieht das dann so aus:

Typo3 ImageMagick unter Windows 8 installieren und unter Basic Configuration den Pfad setzen

Nach Klick auf  "Send" sollte ImageMagick erkannt werden und unter "Basic Configuration" folgendes stehen:

Typo3 ImageMagick unter Windows 8 installieren: Pfad korrekt gesetzt

Man darf sich nicht verwirren lassen von der Pfadangabe, die hier mit \ und / angegeben werden - ist so funktionstüchtig. Gibt man im vorherigen Schritt den Pfad mit \ am Ende an, würde der Pfad hier letztendlich auch so aussehen: "D:\ImageMagick-6.8.8-Q16\/" - Typo3 fügt automatisch einen Slash hinten an :) .

Fehler: Symbolische Links (Symlinks) gehen beim Kopieren verloren.
Lösung:
Windows 7 oder 8 bieten mit dem Befehl "mklink" in der Eingabeaufforderung bereits das notwendige Tool um symbolische Links zu setzen. Alte symbolische Links (sind nach dem Kopieren meist normale Ordner bzw. Dateien ohne Endung) löschen.
Zuerst die Konsole ALS ADMINISTRATOR (wichtig!) starten:

Windows 8: Eingabeaufforderung als Administrator starten

Um zu der oben abgebildeten Ansicht zu kommen einfach die Windows-Taste drücken (oder ab Windows 8.1 auf den "Start"-Button) und dann direkt "cmd" in die Tastatur tippen (ohne irgendeine App zu suchen!), Windows startet dann automatisch den Such-Charm. Rechte Maustaste auf die Eingabeaufforderung zeigt dann das abgebildete Kontext-Menü. Dort "Als Adminstrator ausführen" auswählen und die Konsole öffnet sich.

In folgender Reihenfolge die Befehle ausführen:

Typo3 Symlinks setzen unter Windows 8

Gehighlighted hier:

Grün umrandet: Konsole als Administrator gestartet
Rot umrandet: Fehler: Die Datei "index.php" war bereits vorhanden. Nach diesem Schritt habe ich die index.php gelöscht, damit ich einen symbolischen Link auf diese Datei setzen konnte.
Blau umrandet: Ändern des Typo3-Source - Ordners auf ein anderes Source-Verzeichnis.

Zum Copy&Paste hier nochmal die Reihenfolge:

  1. Wechseln zum Installations-Verzeichnis, in meinem Fall "D:\xampp\htdocs\". (Anmerkung: Dieser Pfad ist nicht wirklich ideal gewählt, besser wäre es, ein extra Verzeichnis unterhalb von "htdocs" oder ein ganz anderes Verzeichnis für die Typo3-Installation zu nehmen).Hier liegen dann unter anderem folgende Ordner:
    "D:\xampp\htdocs\fileadmin"
    "D:\xampp\htdocs\typo3conf"
    "D:\xampp\htdocs\typo3temp"
    und viele weitere zu Typo3 gehörende. Ich habe auf gleicher Ebene des htdocs-Ordners einen Ordner mit verschiedenen Typo3-Source-Versionen angelegt, so dass sich folgende Ordnerstruktur ergibt:
    "D:\xampp\typo3_sources\typo3_src-4.5.16"
    "D:\xampp\typo3_sources\typo3_src-4.5.29"
    "D:\xampp\typo3_sources\typo3_src-4.7.14"
    "D:\xampp\typo3_sources\typo3_src-6.0.0"
    "D:\xampp\typo3_sources\typo3_src-6.0.8"
    "D:\xampp\typo3_sources\typo3_src-6.1.0"
    "D:\xampp\typo3_sources\typo3_src-6.1.3"
    Dies bietet mir die Möglichkeit recht schnell von Version 4.5.16 auf 4.5.29 oder andere Versionen zu springen (oder im Fehlerfall zurück auf den alten Source zu gehen). In den Ordnern sind jeweils nur die Sources von Typo3 ohne Dummy-Dateien. Der Download älterer Typo3-Sources ist immernoch möglich, auch wenn es etwas fummelig ist: Man gehe auf http://typo3.org/download/#c1984 und kopiere sich den Link des Archives, beispielsweise http://prdownloads.sourceforge.net/typo3/typo3_src-4.5.32.zip?download für den derzeit aktuellen Download (Stand: 06.01.2014) der LTS-Version 4.5.32 und ändert die hinteren Zahlen zu den gewünschten. Wenn ich den Source für die Version 4.5.16 benötige, muss der Link so abgeändert werden: http://prdownloads.sourceforge.net/typo3/typo3_src-4.5.16.zip?download. Dann den modifizierten Link im Browser aufrufen und der Download des älteren Sources geht. (Gleiches Verfahren funktioniert natürlich auch für die anderen Daten mit Dummy-Package oder Introduction-Package).
  2. SymLink auf den Source-Ordner setzen:
    mklink /d typo3_src ..\typo3_sources\typo3_src-4.5.16

    Um sicher zu gehen kann man nach ..\ mit der ALT-Taste durch die dort vorhandenen Ordner durchschalten. Gibt man das "t" bereits an, also "..\t" und drückt dann die ALT-Taste werden alle Ordner und Dateien, die mit "t" anfangen durchgeschaltet. Dieses Vorgehen funktioniert auch für Ordner, die mit mklink erstellt wurden, also für Symlinks!
    Weitere Symlinks setzen relativ zum aktuellen Source-Pfad:

    mklink /d typo3 typo3_src\typo3
    mklink /d t3lib typo3_src\t3lib
    mklink index.php typo3_src\index.php

    (Letzter Befehl ohne "/d" - Parameter, da kein Verzeichnis!)

Danach sollte wieder alles funktionieren wie gewohnt - zumindest stimmen die Pfade wieder sofern man vorher auch mit externem Source-Ordner gearbeitet hat.

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-lokale-installation-unter-windows7-8-randnotizen/feed/ 0
tt_news – Alle Sprachparameter zum Übersetzen http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/tt_news-alle-sprachparameter-zum-ubersetzen/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/tt_news-alle-sprachparameter-zum-ubersetzen/#comments Fri, 08 Nov 2013 10:22:17 +0000 Alex http://blog.alexander-fischer.org/?p=439 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!

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/tt_news-alle-sprachparameter-zum-ubersetzen/feed/ 0
jQuery – finde alle Links, die “type=0″ beinhalten http://blog.alexander-fischer.org/programmierung/webprogrammierung/javascript/jquery-finde-alle-links-die-type-gleich-0-beinhalten/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/javascript/jquery-finde-alle-links-die-type-gleich-0-beinhalten/#comments Mon, 28 Oct 2013 12:15:17 +0000 Alex http://blog.alexander-fischer.org/?p=432 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"]');
]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/javascript/jquery-finde-alle-links-die-type-gleich-0-beinhalten/feed/ 0
JavaScript-Mysterien: Teil 1: Warum haben manche (jQuery-)Libraries ein führendes Semikolon? http://blog.alexander-fischer.org/programmierung/webprogrammierung/javascript/javascript-mysterien-teil-1-warum-haben-manche-jquery-libraries-ein-fuhrendes-semikolon/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/javascript/javascript-mysterien-teil-1-warum-haben-manche-jquery-libraries-ein-fuhrendes-semikolon/#comments Mon, 14 Oct 2013 08:27:31 +0000 Alex http://blog.alexander-fischer.org/?p=420 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? Oder wie mein Cousin letztens fragte:

ist dir eigentl aufgefallen das dein code mit einem traurigen smiley beginnt, ist dass n programmiererwitz?

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/

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/javascript/javascript-mysterien-teil-1-warum-haben-manche-jquery-libraries-ein-fuhrendes-semikolon/feed/ 0
Typo3 – Extensionmanager zeigt keine neuen Extensions mehr an – XAMPP – Teil II http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-extensionmanager-zeigt-keine-neuen-extensions-mehr-an-xampp-teil-ii/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-extensionmanager-zeigt-keine-neuen-extensions-mehr-an-xampp-teil-ii/#comments Tue, 20 Aug 2013 09:34:06 +0000 Alex http://blog.alexander-fischer.org/?p=404 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! :)

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-extensionmanager-zeigt-keine-neuen-extensions-mehr-an-xampp-teil-ii/feed/ 1
Typo3 – Extensionmanager zeigt keine neuen Extensions mehr an – XAMPP http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-extensionmanager-zeigt-keine-neuen-extensions-mehr-an-xampp/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-extensionmanager-zeigt-keine-neuen-extensions-mehr-an-xampp/#comments Fri, 16 Aug 2013 15:54:50 +0000 Alex http://blog.alexander-fischer.org/?p=398 Mal wieder Typo3, meist ein lokales Problem mit Installationen, die zum Testen auf XAMPP laufen. Ich sitze derzeit daran, eine Typo3-Installation von Version 5.4.16 auf die aktuelle Version 6.1.3 upzudaten und probiere dies erstmal lokal mit einer Spiegelung auf XAMPP.

Als ersten Schritt will ich alle vorhandenen Extensions aktualisieren. Dazu gehe ich in den Extensionmanager und suche (ich hab lang nichts mehr mit Typo3 gemacht) den Button, um die Extensionsliste aus dem TER zu aktualisieren.

Unter "Import extensions" findet man dann auch diesen grauen, unscheinbaren Button "Retrieve/Update", neben welchem steht von wann die derzeitige Liste ist, in meinem Fall habe ich schon aktualisiert, daher steht dort der 16.8.2013. Konkret handelt es sich dabei um die Datei "typo3temp/extensions.xml.gz", welche aktualisiert wird. Diese kann man auch löschen oder umbenennen, um sicher zu gehen, dass wirklich eine aktuelle Datei heruntergeladen wird.

Bevor ich jedoch erfolgreich aktualisieren konnte, kam einfach nur ein grauer Screen oder weißer Bildschirm, nachdem ich auf "Retrieve/Update" gedrückt hatte - sonst nichts. Über die Developer-Tools im Chrome sieht man unter "Network" für diesen Request folgendes:

500 --> Internal Server Error, die Dauer des Requests findet man unter "Time": 30,07 Sekunden. Verdächtig :) . Die Standard-Ausführungszeit für Skripte ist auf 30 Sekunden begrenzt.

Abhilfe schafft hier das Hochsetzen der PHP-Einstellung "max_execution_time" in der php.ini, welche man normalerweise unter "xampp/php/php.ini" findet. Wer will kann diesen Wert jetzt solange hochsetzen, bis der Request nicht mehr fehlschlägt, ich hab ihn einfach auf 600 Sekunden gesetzt: "max_execution_time = 600", 10 Minuten sollten ausreichend Zeit sein :) . Der letzte Schritt ist der Wichtigste: Apache neu starten!

Feedback erwünscht!

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/typo3/typo3-extensionmanager-zeigt-keine-neuen-extensions-mehr-an-xampp/feed/ 2
Eigene Bildgrößen in der WordPress-Mediathek auswählbar machen http://blog.alexander-fischer.org/programmierung/webprogrammierung/wordpress/eigene-bildgrosen-in-der-wordpress-mediathek-auswahlbar-machen/ http://blog.alexander-fischer.org/programmierung/webprogrammierung/wordpress/eigene-bildgrosen-in-der-wordpress-mediathek-auswahlbar-machen/#comments Mon, 08 Oct 2012 23:24:56 +0000 Alex http://blog.alexander-fischer.org/?p=357 Dass man bei WordPress relativ leicht eigene Bildgrößen einstellen kann und in seinem Template einbinden kann ist meiner Meinung nach recht bekannt. Vor kurzem brauchte ich jedoch die Möglichkeit, dass der Anwender eben diese eigens angelegten Bildgrößen auch selber auswählen kann und sich nicht nur zwischen den vordefinierten Bildgrößen entscheiden muss:
WordPress-Mediathek Standard-Bildgrößen
Dazu bietet WordPress einen schönen Filter, welcher leicht zu implementieren ist. Vorerst jedoch muss man die Voraussetzung schaffen, um eigene Bildgrößen anlegen zu können. Der nachfolgende Code erklärt, wie man sowohl eigene Bildgrößen definiert und wie man diese in der Mediathek beim Bild einfügen - Dialog auswählbar macht. Er ist in die functions.php-Datei des Themes einzubauen:

/**
 * Enable support for Post Thumbnails 
 * (Support für eigene Bildgrößen einschalten)
 */
add_theme_support( 'post-thumbnails' );
 
/**
 * Add custom image sizes 
 * (Eigene Bildgrößen hinzufügen)
 */
add_action( 'after_setup_theme', 'af_add_custom_image_sizes' );
function af_add_custom_image_sizes() {
              //params: 'size-name', width, height, crop
    add_image_size( 'home-featured-image', 306, 152, false );
    add_image_size( 'imageslider-preview', 180, 240, false);
    add_image_size( 'imageslider-view', 99999, 600, false);
}
/**
 * Make custom image sizes available via media manager 
 * (Eigene Bildgrößen in der Mediathek verfügbar machen)
 */
add_filter( 'image_size_names_choose', 'custom_image_sizes_choose' );
function custom_image_sizes_choose( $sizes ) {
	$custom_sizes = array(
			'home-featured-image' => 'Startseitenbilder',
			'imageslider-preview' => 'Slider-Vorschau',
			'imageslider-view' => 'Slider-Bild'
	);
	return array_merge( $sizes, $custom_sizes );
}

Wichtig ist, dass man die Bezeichnung des ersten Parameters bei add_image_size gleich setzt zu den Keys im Array $custom_sizes. Am besten speichert man sich diese in einer eigenen Variable.
Im Template kann man dann über die Bezeichnungen die entsprechende Bildgröße einbinden:

/**
 * into the loop
 * (innerhalb des Loops)
 */
if(has_post_thumbnail()){
	the_post_thumbnail('home-featured-image');
}
/**
 * somewhere else i.e. outside the loop
 * woanders, z.B. außerhalb des Loops
 */
if(has_post_thumbnail($post->ID)){
	echo get_the_post_thumbnail($post->ID, 'home-featured-image');
}

Auch kann man die eigene Bildgröße in allen Bildfunktionen verwenden, die $size als Parameter empfangen können, beispielsweise wp_get_attachment_image(), wp_get_attachment_image_src() oder wp_get_attachment_link(). Die letzten 3 Funktionen benötigen jedoch eine Attachment-ID als Pflichtparameter (siehe Dokuverlinkungen).

Das Ergebnis in meinem Beispiel kann nun folgendermaßen aussehen:

Sieht man hinter den eigenen Bildgrößen keine Dateimaße und sind die Radio-Buttons ausgegraut und nicht anklickbar, so existiert diese Datei nicht in diesem Format. Gründe dafür können sein, dass sie zu klein ist für die eingestellte Bildgröße und somit nicht erstellt werden konnte oder dass die Datei hochgeladen wurde, bevor man die eigenen Bilddateigrößen festgelegt hat. Im Normalfall sollte jedoch folgende Ansicht danach vorhanden sein:
WordPress eigene Bilddateigrößen in der Mediathek auswählen

Viel Erfolg beim Umsetzen! Feedback und Verbesserungsvorschläge immer erwünscht! :)

]]>
http://blog.alexander-fischer.org/programmierung/webprogrammierung/wordpress/eigene-bildgrosen-in-der-wordpress-mediathek-auswahlbar-machen/feed/ 1