{"id":1059,"date":"2011-06-14T01:50:56","date_gmt":"2011-06-13T23:50:56","guid":{"rendered":"http:\/\/blog.benny-baumann.de\/?p=1059"},"modified":"2012-01-09T20:14:45","modified_gmt":"2012-01-09T19:14:45","slug":"komponenten-update-mit-sehr-viel-fail","status":"publish","type":"post","link":"https:\/\/blog.benny-baumann.de\/?p=1059","title":{"rendered":"Komponenten-Update mit sehr viel Fail"},"content":{"rendered":"<p>Heute gibt es wiedermal ein Leckerli aus der Kategorie &#8222;Soviel Fail gibt&#8217;s nur bei Joomla&#8220;. Wer also schon immer \u00fcber Joomla l\u00e4stert, findet hier nun genau einen weiteren Punkt, wie Software nicht aussehen sollte. Aber gehen wir einmal der Reihe nach.<\/p>\n<p>F\u00fcr ein Projekt baue ich derzeit eine Komponente in Joomla, die eine Reihe von Erweiterungen in der Oberfl\u00e4che implementiert. Die Komponente ist auch soweit fast fertig und ist im Backend wunderbar angebunden. Da im Laufe der Entwicklung noch zwei Men\u00fcpunkte zu erg\u00e4nzen waren, musste diese kurzzeitig deinstalliert und wieder neuinstalliert werden, was an sich auch kein Problem darstellt, w\u00e4re da nicht &#8230; \u00e4hhhm &#8230; Joomla.<\/p>\n<p>Die Komponente implementiert im Frontend n\u00e4mlich die Erzeugung von SEO-freundlichen Links, die &#8211; aus einem Vorg\u00e4ngerprojekt stammend &#8211; auch bereits wunderbar funktionierten und im Produktiveinsatz keinerlei Probleme zeigten. Seitdem die Komponente jedoch zwischenzeitlich neu im Joomla eingebunden wurde, um die Anpassungen im Men\u00fc des Backends zu \u00fcbernehmen, sah man nur die Joomla-typischen ItemId-Parameter in der Adresszeile. Die vormals funktionierenden Routen (wie die SEO-URLs im Joomla-Slang hei\u00dfen) wurden nicht einmal mehr noch beachtet. Aufrufbar waren die Links dennoch. Auch ein erneutes Abspeichern der Men\u00fceintr\u00e4ge, nachdem der Item-Type neu gesetzt wurde, bewegte Joomla nicht dazu, wieder SEO-URLs anzuzeigen.<\/p>\n<p>Also f\u00e4ngt das Debugging an. Und wer jetzt als Admin nicht zumindest die Postfix-Konfiguration oder eine Einsendung zum IOCCC gewohnt ist, sollte u.U. erstmal was essen; auf n\u00fcchternen Magen vertr\u00e4gt man das n\u00e4mlich sonst nicht. Also gut: Schauen wir zuerst einmal in die Joomla-Datenbank, um zu sehen, was Joomla bei der Komponenten-Installation so feines anstellt. Als erster Kandidat erweist sich hier die Tabelle jos_extensions. In dieser stehen alle Komponenten, Themes, Plugins und wie die Teile im Joomla-Slang wohl noch so alle hei\u00dfen. U.a. findet sich hier auch ein Eintrag unserer Komponente, die nicht mehr geht. Nunja: Normal w\u00e4re ein Eintrag, seltsamer Weise hat es Joomla aber geschafft, hier mehrere Eintr\u00e4ge draus zu machen, weshalb die Komponente zwei Mal auftaucht. Auch \u00fcbrigens im Admin-Panel. Naja, passiert. L\u00f6schen wir also beide Eintr\u00e4ge, deinstallieren die Dateien aus dem Joomla-Verzeichnis, die unsere Komponente betreffen und spielen die Update-Datei erneut ein.<\/p>\n<p>Wer nun mit einer Meldung &#8222;Juhu, erfolgreich installiert&#8220; gerechnet hat, darf bitte noch einmal das Thema dieses Posts verinnerlichen: <strong>Joomla!<\/strong> Stattdessen wirft einem Joomla eine Meldung &#8222;Error building admin menu&#8220; an den Kopf. Naja, schauen wir noch mal in die Datenbank und finden da eine Tabelle jos_menu. Ja, hier handelt es sich, wie der Name vermuten l\u00e4sst, um die Tabelle, in der <em>jegliche<\/em> Men\u00fceintr\u00e4ge aufgef\u00fchrt werden. Und wie es sich f\u00fcr ein unsauber konzipiertes System wie Joomla geh\u00f6rt, auch anwendungs\u00fcbergreifend Frontend und Backend gemischt. Wer also mal so richtig sein Backend zerschie\u00dfen will, darf in der jos_menu-Tabelle gerne anfangen. In besagter Tabelle fanden sich nun die von der Komponente in der XML-Datei registrierten Men\u00fc-Punkte. Jedoch nicht von der aktuellen Installation, sondern &#8211; fein s\u00e4uberlich aufgehoben &#8211; von der Erstinstallation der Komponente. Also jos_menu aufr\u00e4umen, die Komponente aus jos_extensions deinstallieren UND die Komponente wieder aus der Joomla-Installation entfernen.<\/p>\n<p>Womit wir den n\u00e4chsten Anlauf starten k\u00f6nnen. Komponenten-Package hochladen und auf die Meldung warten. Diese teilte uns diesmal (rot untermalt) mit, dass kein Fehler aufgetreten sei &#8230; bei der Ausf\u00fchrung einer Datenbank-Funktion. Womit wir bei vielsagenden Fehlermeldungen w\u00e4ren, denn in einer Fehlermeldung mitzuteilen, dass kein Fehler aufgetreten sei, ist nur bei Status-Code 0 unter Windows witzig, weil es dort zumindest der Erwartungshaltung des Anwenders entspricht. Denn wenn kein Fehler aufgetreten ist, obwohl man einen erwartet, spricht das entweder daf\u00fcr, dass man sein Programm in die Tonne hauen sollte, oder etwas schief gelaufen ist, was einfach nicht bedacht wurde. Da die Fehlermeldung leider den Informationsgehalt einer Nachricht \u00fcber einen umgefallenen Sack Reis in China hatte, ging der Weg erstmal zur Suchmaschine der Wahl, wo gleich der 3. Treffer aus einer B\u00fcndelung von Forendiskussionen zu dieser Fehlermeldung auf die 3. Tabelle in der Joomla-Datenbank verwies: jos_asset, die manchmal, unter nicht ganz nachvollziehbaren Umst\u00e4nden, noch Datenm\u00fcll beinhaltet, den Joomla selber nicht aufr\u00e4umen will. Also auch hier kurz mit dem Datenbank-Tool der Wahl kurz gekehrt, die beiden anderen Tabellen wieder gereinigt und die Komponente nochmals installiert. \u00dcberraschenderweise diesmal sogar ohne Fehlermeldung.<\/p>\n<p>Einzig die SEO-URLs, wegen derer ich diesen ganzen Aufriss angestellt hatte, waren immer noch nicht in Sichtweite.<\/p>\n<p>Wobei, nicht ganz. Ich erw\u00e4hnte ja besagte Tabelle jos_menu, in der Joomla jeglichen Datenm\u00fcll, der Men\u00fceintr\u00e4ge betrifft, hinterlegt. Unter anderem finden sich hier die URL des Men\u00fceintrags, die Art des Men\u00fceintrags, sowie eine seltsame Zahl, die mit der Spalten\u00fcberschrift component_id versehen ist. Wie jetzt? Sagt euch nix? Naja, schauen wir mal, ob sich da was finden l\u00e4sst?<\/p>\n<p>Ein Ansatzpunkt f\u00fcr die L\u00f6sung des R\u00e4tsels stellte &#8211; nahezu offensichtlich, wenn man sich die Werte anguckte &#8211; die Tabelle jos_extensions dar. Ja, DIE Tabelle jos_extensions, in der wir vorhin angefangen haben. Und nein, wir haben vorhin auch nicht die falsche der doppelten Komponenten-Registrierungen gel\u00f6scht, wie man zuerst vermuten k\u00f6nnte. Das lie\u00df sich n\u00e4mlich recht einfach anhand der &#8211; richtig &#8211; component_id feststellen, die es zum Ausgangszeitpunkt n\u00e4mlich auch schon nicht (mehr) gab.<\/p>\n<p>Was passiert war, ist an sich n\u00e4mlich recht einfach &#8211; und genauso hirnrissig so zu implementieren; aber wir reden ja grad \u00fcber Joomla, die tun sowas einfach: Men\u00fceintr\u00e4ge sind statt auf den component_name (also &#8218;com_foo&#8216;) auf die (installationsabh\u00e4ngige) component_id fixiert. Diese wird jedoch nicht aktualisiert, wenn eine Komponente nicht \u00fcber den Upgrade-Mechanismus aktualisiert werden kann. Stattdessen zeigt diese dann ins Leere, obwohl anhand der URL die Beziehung zur zust\u00e4ndigen Komponente wieder hergestellt werden kann. Auch ein erneutes Speichern des Men\u00fceintrags sorgt bei Joomla nicht daf\u00fcr, dass dieser offensichtliche Integrit\u00e4tsfehler korrigiert wird. Wenn Joomla also die SEO-URL f\u00fcr diese URL erzeugen soll, beachtet es ein Feld, dessen Integrit\u00e4t offensichtlich defekt ist, statt die im Router eh ausgewertete Information zur Komponente heranzuziehen. \u00c4ndert man manuell f\u00fcr alle Men\u00fceintr\u00e4ge, die noch auf eine alte, ung\u00fcltige component_id zeigen, diese auf die aktuelle Kennung, so geht es. Ach ja: Wer Spa\u00df haben will, darf das Routing \u00fcbrigens auch sein Template machen lassen; man muss nur die richtigen IDs in die DB und Dateien auf die Platte schreiben.<\/p>\n<p>Was immer die bei Joomla rauchen: Das Zeug <strong>muss<\/strong> gut sein!<\/p>\n<p class=\"wp-flattr-button\"><a href=\"https:\/\/blog.benny-baumann.de\/?flattrss_redirect&amp;id=1059&amp;md5=ee709a038d4203480d7cf37f47ea6650\" title=\"Flattr\" target=\"_blank\"><img src=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" srcset=\"http:\/\/blog.benny-baumann.de\/wp-content\/plugins\/flattr\/img\/flattr-badge-large.png\" alt=\"Flattr this!\"\/><\/a><\/p>","protected":false},"excerpt":{"rendered":"<p>Heute gibt es wiedermal ein Leckerli aus der Kategorie &#8222;Soviel Fail gibt&#8217;s nur bei Joomla&#8220;. Wer also schon immer \u00fcber Joomla l\u00e4stert, findet hier nun genau einen weiteren Punkt, wie Software nicht aussehen sollte. Aber gehen wir einmal der Reihe nach. F\u00fcr ein Projekt baue ich derzeit eine Komponente in Joomla, die eine Reihe von [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"ngg_post_thumbnail":0,"footnotes":""},"categories":[29],"tags":[14,98,312,21],"class_list":["post-1059","post","type-post","status-publish","format-standard","hentry","category-software","tag-bugs","tag-developement","tag-joomla","tag-php"],"_links":{"self":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1059","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1059"}],"version-history":[{"count":7,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1059\/revisions"}],"predecessor-version":[{"id":1148,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=\/wp\/v2\/posts\/1059\/revisions\/1148"}],"wp:attachment":[{"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1059"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1059"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.benny-baumann.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1059"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}