Jan 26

Da ich während der Arbeit schon mehrmals auf das Problem gestoßen bin, würde ich es gerne hier skizzieren, damit sich jemand anders die Arbeit vielleicht nicht mehr machen muss. Das Problem ist folgendes: In einem TYPO3-Plugin soll die Seiten-ID ermittelt werden um sie weiterzuverwenden, zum Beispiel um Records eines bestimmten Typs aus der Datenbank zu laden die an dieser Seite hängen.

Unsaubererweise gibt es global verfügbare Variablen im TYPO3-Pluginkonstrukt, die diese Information enthalten. So kann über $GLOBALS[‚TSFE‘]->id die ID der aktuell AUFGERUFENEN Seite ermittelt werden. Das funktioniert so lange, bis es einen Unterschied macht, welche Seite aufgerufen und welche angezeigt wird. Es gibt zum Beispiel die Möglichkeit der internen Links (Shortcuts) oder auch die der Mountpoints (Seiteninhalt einer anderen Seite anzeigen). Kommt man auf so eine Seite, dann funktioniert die Methode von vorhin nicht, denn die Inhalte die angezeigt werden, liegen nicht auf der Seite die aufgerufen wurde. Dieses Manko lässt sich nun dadurch beheben, dass man einfach die Seiten-ID der Inhaltselemente abfragt: $this->cObj->data[‚pid‘] Das Array „data“ enthält alle Felder aus der Tabelle tt_content und damit auch die ID der Seite zu der das Element gehört.

Vielleicht ist das ja hilfreich wenn jemand sich mal fragt, warum diese IDs verschieden sind…

Nov 13

Ich habe gerade eine TYPO3-Installation von TYPO3 4.1.x auf 4.2.3 geupdated, was mir promt die ganze Seite zerschossen hat. PHP5 ist mit der Fehlermeldung abgebrochen, dass die Methode array_merge_recursive_overrule in der Klasse „t3lib_div“ einen Parameter vom Typ „array“ erwartet, jedoch „null“ bekommen hat. Auslöser des Problems war bei mir die Extension „dam“. Wenn ich sie im BE deaktiviere läuft es wieder, natürlich mit eingeschränkter Funktionalität.

Ich habe aus diesem Grund die Parameterdefinition in t3lib_div in der Methode entfernt (das „array“ bei $arr1 und $arr2 weglöschen) damit es wieder geht.

Liebe Core-Entwickler, bevor ihr solche tollen PHP5-Features in den Core integriert, solltet ihr das den Extension-Autoren sagen, damit die ggf. ein Update bereitstellen können!!!

DANKE!

UPDATE: Die Extension „date2cal“ scheint mit 4.2.3 ebenfalls NICHT zu laufen!

Okt 01
  • english
  • german

Manchmal möchte man mit PHP prüfen, ob ein String schon URL-kodiert wurde oder nicht. Leider bietet PHP selbst da keine Funktion. Da ich das aber gerade mal gebraucht habe, habe ich mir das hier überlegt:

/**
 * Returns true if given string is url encoded
 *
 * @param string $string
 * @return boolean
 */
function is_urlencoded($string) {
	return $string === urlencode(urldecode($string));
}

Das funktiert, soweit ich das getestet hab, eigentlich ganz gut. Wenn es also mal jemand anders auch braucht, ist das vielleicht eine kleine Hilfe.

Aug 29
  • english
  • german

Wer mit dem Eclipse PDT PHP programmiert, wird, wie ich, bereits in die missliche Lage gekommen sein, für viele (oder auch sehr viele) Datenklassen mit vielen (manchmal auch wahnsinnig vielen) Properties Getter und Setter Methoden schreiben zu müssen. Da man leider nicht, wie im JDT, die Funktion der IDE nutzen kann, schreibt man sich meist Blasen an die Hände und ganz nebenbei fühlt man sich nach mehreren Stunden wie eine Maschine. Weiterlesen »

Mrz 27
  • english
  • german

Ich habe einige neue Features integriert und Bugs gefixt:

  • Man kann nun als Nutzer eine Paypal-Spendenadresse angeben und es wird ein Spenden-Link auf der Profilseite angezeigt wenn man schon etwas auf der Plattform getan hat
  • Die Dateigröße der ungepackten Dateien wird nun auf der Plugin-Detailseite und im Download-Korb angezeigt
  • Beim editieren des Profils gab es einige Bugs, die sind jetzt Geschichte
  • ein bißchen SEO für die Detailseiten

Ich hoffe diese Verbesserungen sind nützlich 🙂

Mrz 25
  • english
  • german

Um mein Blog mehr Leuten zugänglich zu machen, habe ich vor einer Weile beschlossen, meine Posts auch in englisch zu veröffentlichen. Um das im WordPress möglichst einfach abzubilden, habe ich das jLanguage-Plugin verwendet. Nach einer Weile ging dann mein Kategorie-Feed für eSteak nicht mehr. Das habe ich relativ schnell gemerkt, da dieser auf der eSteak-Startseite eingebunden wird. Damals habe ich mir nicht anders zu helfen gewusst, als den Post den es betraf in eine andere Kategorie zu schieben.

In den letzten Tagen viel mir jedoch auf, dass mein Feed bei Feedburner keine Leser mehr hat und ich habe mich gefragt warum. Mindestens die Newsdienste bei denen ich angemeldet bin, hätten es ja aufrufen müssen. Nachdem ich ihn selbst ausprobiert hatte, musste ich feststellen, dass ich einen Timeout bekam und zusätzlich noch die Serverlast des httpd2 Prozesses bei annähernd 100% lag. Weiterlesen »

Mrz 12
  • english
  • german

Nachdem ich eine einzige Klasse in meinem Projekt geändert habe (eine /lib die nichts mit der Datenbank zu tun hat), bekam ich absolut zufällig die Fehlermeldung „wrapped: Cannot fetch TableMap for undefined table: xxx“ sowohl im Produktiv- als auch im Devmodus. Für xxx standen dabei willkürlich verschiedene Tabellennamen aus meiner Datenbank.

Ich habe es mit Symfony Cache löschen probiert, Browsercache löschen und austauschen der Datei, hat alles nix gebracht. Meine letzte Rettung war der Neustart des Apache, dann lief alles wieder wie vorher. Keine Ahnung woher der Fehler nun eigentlich kam…

UPDATE: Der Neustart war noch nicht des Rätsels Lösung! Es nur einfach eine Weile gedauert bis der Fehler wieder auftrat. Ich habe mir deswegen noch eine kleine Debugausgabe der eigentlichen PHP-Fehler vor die Exception gebaut. Dort bekam ich dann raus, dass eine Datei „lib/model/om/BaseXXXPeer.php“ nicht auf die Datei „lib/model/XXXPeer.php“ zugreifen kann. Das erscheint mir auch logisch, liegt doch der Controller unter „web/“. Von dort aus müsste der Pfad ja „../lib/model …“ lauten. Nachdem ich nun „../“ als include_path in der php.ini ergänzt habe, scheint der Fehler erstmal weg zu sein.

Ich verstehe auch nicht wirklich, warum die includes keine absoluten Pfadangaben haben. Es wäre sehr schön, wenn das im Symfony noch geändert wird.

Mrz 12
  • english
  • german

Nachdem ich auf meinem Server von PHP 5.0.4 auf 5.2.5 geupdated habe, bekam ich öfter mal nur leere weiße Seiten als Ausgabe. Im dev-Modus erschien dann der Fehler, dass eine Creole-Datei nicht geladen werden konnte. Ich musste deshalb den Include-Pfad in der php.ini anpassen damit es läuft. Ich habe nur „/usr/share/php/pear/symfony/lib/vendor“ hinzugefügt, dann waren die Fehler weg. Ja nachdem ob man Symfony über PEAR oder per svn heruntergeladen hat, muss der Pfad natürlich noch angepasst werden.

Am Ende nicht vergessen den Symfony cache zu löschen (symfony cc).

Feb 25
  • english
  • german

Nach eingehender Studie des Problems von letztem Donnerstag, habe ich endlich eine Lösung gefunden. Ich habe mir das SVN Repository genauer angeschaut und einen Branch gefunden (der nirgendwo beschrieben ist). Man muss nur den Pfad http://svn.symfony-project.com/plugins/sfPHPUnitPlugin/branches/1.0/ als svn:external mit dem Namen sfPHPUnitPlugin zum plugin-Ordner des Symfony-Projektes hinzufügen und dann einmal updaten. Wenn man danach symfony -T auf der Konsole eingibt, erscheinen auch die neuen Kommandos.

Hurra! Aber halt: es geht immer noch nicht! Es scheint noch einen Fehler in der Datei sfPHPUnitTestPrinterTap.php im lib-Ordner des Plugins zu geben. In Zeile 159 muss es statt „$suite->testCount()“ einfach „$suite->count()“ heißen und dann gehts auch. Unglaublich aber wahr. Nach ewigem rumprobieren hab ichs doch noch geschafft – Symfony läuft mit PHPUnit. Gott sei dank.

Feb 21
  • english
  • german

Ich arbeite gerade an einem kleinen Projekt und habe mich zur Entwicklung mit Symfony entschieden, da dieses Framework einige ziemlich gute Ansätze hat. Ich arbeite mich durch das gegebene Tutorial und bin heute am Tag 15, dem Unittesttag, angekommen. Symfony verwendet ein eigenes „Framework“ (es ist 1 Datei) namens lime. Die ganze Testdatei sieht allerdings völlig grauenvoll und unbrauchbar aus. Da ich schon des Öfteren mit ASUnit und PHPUnit gearbeitet habe, finde ich das ganz schön schwach.Weiterlesen »