jm_landingpage - Plugin deaktivieren im CMS

Ein CMSimple Support Forum für deutsch sprechende Nutzer und Entwickler
Post Reply
lck
Posts: 2963
Joined: Wed Mar 23, 2011 11:43 am
Contact:

jm_landingpage - Plugin deaktivieren im CMS

Post by lck » Sat Mar 14, 2015 8:22 pm

Komische Sache.
Wenn ich das Plugin jm_landingpage in der config.php bei Plugins > Disabled eintrage, ist es auch deaktiviert, aber gehe ich dann auf eine Seite zum Bearbeiten, ist der Editor verschwunden!
Nur noch die Reiter META und SEITE sind vorhanden.

Auch ein Löschen der Seite "Landingpage" und das Auskommentieren des Plugin-Aufrufs in der template.htm ändert daran nichts!
Erst das Löschen des auskommentierten Plugin-Aufrufs in der template.htm bringt den Editor zurück!

Kann mir das einer erklären?
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: jm_landingpage - Plugin deaktivieren im CMS

Post by cmb » Sat Mar 14, 2015 9:05 pm

Wenn man ein Plugin in der Konfiguration deaktiviert, dann werden dessen Dateien (index.php, admin.php etc.) nicht mehr geladen, und somit stehen die dort definierten Funktionen etc. nicht mehr zur Verfügung. Wird nun eine Funktion im Template aufgerufen, die nicht zur Verfügung steht, dann beendet PHP die Script-Ausführung mit einem fatalen Fehler. Ich vermute, dass ist bei Dir passiert, aber es ist nicht wirklich aufgefallen, weil der Pluginaufruf erst gegen Ende des Templates erfolgt. (Dann fehlt allerdings vermutlich </body></html>, und das wiederum ist wichtig für bestimmte Scripte. Schau Dir im Zweifel mal das erzeugte HTML an.)

Wenn man den Pluginaufruf im Template auskommentiert, dann passiert das nicht. Aber, man muss richtig auskommtieren. Folgendes ist "falsch":

Code: Select all

<!-- <?php echo plugin();?> -->
Das zeigt zwar die Ausgabe des Plugins nicht mehr an (jedenfalls nicht unbedingt), aber es verhindert nicht, dass plugin() aufgerufen wird. Letzteres erreicht man so:

Code: Select all

<?php // echo plugin();?>
(das Syntax-Highlighting macht das auch ganz gut deutlich).
Christoph M. Becker – Plugins for CMSimple_XH

lck
Posts: 2963
Joined: Wed Mar 23, 2011 11:43 am
Contact:

Re: jm_landingpage - Plugin deaktivieren im CMS

Post by lck » Sun Mar 15, 2015 11:44 am

cmb wrote:Wird nun eine Funktion im Template aufgerufen, die nicht zur Verfügung steht, dann beendet PHP die Script-Ausführung mit einem fatalen Fehler. Ich vermute, dass ist bei Dir passiert, aber es ist nicht wirklich aufgefallen, weil der Pluginaufruf erst gegen Ende des Templates erfolgt. (Dann fehlt allerdings vermutlich </body></html>, und das wiederum ist wichtig für bestimmte Scripte. Schau Dir im Zweifel mal das erzeugte HTML an.)
Genauso ist es. Am Ende im Quelltext steht dann:
<!-- <br />
<b>Fatal error</b>: Call to undefined function jm_landingpage() in <b>D:\xampp\htdocs\cmsimplexh165\templates\mini1\template.htm</b> on line <b>96</b><br />
Der Debug-Modus meldete nichts.
cmb wrote:Wenn man den Pluginaufruf im Template auskommentiert, dann passiert das nicht. Aber, man muss richtig auskommtieren.
Wieder was gelernt.

Fazit:
Plugins die einen Aufruf in der template.htm benötigen, kann man über die CMS-Konfig nicht so einfach deaktivieren :shock:
„Bevor du den Pfeil der Wahrheit abschießt, tauche die Spitze in Honig!“   👉 Ludwig's XH-Templates for MultiPage & OnePage

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: jm_landingpage - Plugin deaktivieren im CMS

Post by cmb » Sun Mar 15, 2015 12:28 pm

Ludwig wrote:Am Ende im Quelltext steht dann:
<!-- <br />
<b>Fatal error</b>: Call to undefined function jm_landingpage() in <b>D:\xampp\htdocs\cmsimplexh165\templates\mini1\template.htm</b> on line <b>96</b><br />
Der Debug-Modus meldete nichts.
Die Meldung kommt im Prinzip schon durch den Debug-Modus, kann aber eben nicht mehr wie gewohnt im gelben Kasten angezeigt werden, weil das Script durch den fatalen PHP-Fehler nicht fortgesetzt werden kann, sondern sofort terminiert werden muss. Wäre der Pluginaufruf im Template nicht auskommentiert, dann würde man die Fehlermeldung nicht nur im Quelltext sehen. Wäre der Debug-Modus deaktiviert, dann würde seit XH 1.6.3 eine allgemeine Fehlermeldung an dieser Stelle angezeigt, mit dem Hinweis darauf, dass der Debug-Modus weitere Details offenbart.
Ludwig wrote:Plugins die einen Aufruf in der template.htm benötigen, kann man über die CMS-Konfig nicht so einfach deaktivieren :shock:
Ja, richtig. Daher auch der entsprechende Hilfetext:
Eine durch Kommata getrennte Liste von Plugins, die nicht geladen werden sollen. Vorsicht: wenn eines dieser Plugins auf der Website verwendet wird, kann es sein, dass Sie auf die Website nicht mehr zugreifen können, und diese Option per FTP korrigieren müssen!
Keine optimale Lösung, aber leider ist da nicht mehr zu machen. Langfristig wäre es eine Möglichkeit die Pluginaufrufe dahingehend zu ändern, dass sie statische Klassenmethoden statt einfacher Funktionen verwenden (also z.B. jm::landingpage() statt jm_landingpage()). Dann könnte der Autoloader eingreifen, und den Fehler vernünftig abfangen, bevor er überhaupt passiert (benötigt aber zumindest PHP 5.3.0). Ob das aber für XH 1.7 schon erfolgen wird, bleibt abzuwarten. Zumindest müssten die Plugins entsprechend angepasst werden, damit es dann auch funktioniert.
Christoph M. Becker – Plugins for CMSimple_XH

Post Reply