css_backend file switch

Hier können Probleme und alles andere in Deutscher Sprache gelöst werden.
Post Reply
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

css_backend file switch

Post by Timbalu »

Hi

Ich spiele gerade ein bißchen mit der Möglichkeit von backend templates.
Dazu habe ich mir eine css Auswahl gebaut, bei der ich nun Hilfe benötige, da alles außer dem
entscheidenden $tfile switch Ternär Operator funtioniert, und ich nicht verstehe warum.
Hier einmal stark vereinfacht, was ich mal in der einen, mal in der anderen Variante (mit und ohne hook) probiere.
Beide stylesheets existieren, sind einzeln aufrufbar, etc.
Sitze ich da eventuell einem Cache auf, da mir immer nur das original stylesheet angezeigt wird?
Und wie kann ich das im Plugin ändern? Kann man das überhaupt machen?

Danke für eventuelle Hilfe
Ian

Code: Select all

case 'backend_sidebar_entries_event_display_myplugin': 
                    
    /* if request, hook to switch myplugin backend theme */
	if($serendipity['POST']['mytheme']) serendipity_plugin_api::hook_event('css_backend', $serendipity['POST']['mytheme']);

    //blah[...]
	break;

case 'css_backend':
    echo 'MyNewTheme == ' . ((intval($_REQUEST['serendipity']['mytheme']) == 2) ? 'th2' : 'org'); 
	// dies funktioniert, sogar ohne hook call
    if($eventData['mytheme']) echo 'Theme N°='.$eventData['mytheme']; 
	// dies funktioniert auch, aber natürlich nur mit hook call
    //blah[...]
    if($_REQUEST['serendipity']['mytheme']) 
	    $tfile = dirname(__FILE__) . ((intval($_REQUEST['serendipity']['mytheme'] == 2) ? '/themes/th2' : '/themes/org') . '/myplugin_backend.css';
    if($eventData['mytheme']) 
	    $tfile = dirname(__FILE__) . ((intval($eventData['mytheme']) == 2) ? '/themes/th2' : '/themes/org') . '/myplugin_backend.css';
		
    echo @file_get_contents($tfile);
	
    return true;
    break;
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: css_backend file switch

Post by garvinhicking »

Hi!

Dein Problem ist ein konzeptionelles; Du kannst den css_backend hook nicht einfach in einem anderen Hook aufrufen. Denn der Hook wird ja von einer ganz anderen Datei erzeugt im CSS.

Wenn Du unterschiedliche Styles ausgeben willst musst du selbst backend_css registrieren (wie ja schon geschehen) und DORT deine Unterscheidung einbauen...

Grüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: css_backend file switch

Post by Timbalu »

Hi Garvin

Aber das ist ja auch das Problem, sogar mit Verzicht auf einen Hook Call, geht jenes im css_backend nicht. Die echo test Ausgabe funktioniert, der $tfile switch nicht.

Code: Select all

case 'css_backend':
    echo 'NewThemePath == ' . ((intval($_REQUEST['serendipity']['mytheme']) == 2) ? 'th2' : 'org');
    // dies funktioniert
    //blah[...]
    $tfile = dirname(__FILE__) . ((intval($_REQUEST['serendipity']['mytheme'] == 2) ? '/themes/th2' : '/themes/org') . '/myplugin_backend.css';
      
    echo @file_get_contents($tfile);
   
    return true;
    break;
Ian
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: css_backend file switch

Post by garvinhicking »

Hi!

$_REQUEST[....] ist im css_backend hook ja nicht vorhanden. Der hook wird initial von serendipity.css.php aufgerufen; der wird ja nicht mit REQUEST-Parametern aufgerufen.

Beschreib mal genauer, was Du eigentlich überhaupt erreichen willst, dann kann ich evtl. nen Code-Tipp geben.

Lass Dir auch $tfile mal ausgeben, evtl. stimmt der Pfad nicht.

GRüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: css_backend file switch

Post by Timbalu »

Hi Garvin

Ich möchte die Möglichkeit haben, innerhalb eines Plugins in dessen Admin Bereich einen plugineigenen AdminTemplateWechsel ausführen. Dazu habe ich eine Form, mit der ich das Template wechsele $serendipity['POST']['myTheme'] = 1,2,3... etc.
Die benötigten tpl Dateien werden in der Adminfunktion aufgerufen und auch anstandslos gewechselt; Allein die backend.css macht mir Schwierigkeiten.
Immerhin kann ich soweit auch alles erreichen (sogar den korrekten Pfad), außer dem tatsächlichen Inhalt.
Nehmen wir an, der default pfad ist themes/org/myplugin_backend.css.
Nach dem Wechsel bekomme ich, trotz des anderen Pfades aber immer noch das org stylesheet ausgeliefert. Ohne den hook Aufruf (in der Admin Funktion) gibt es überhaupt keine Ausgaben im css_backend hook.

Beispiel:

Code: Select all

function admin_myplugin { 
        global $serendipity;
 	
        /* if request, hook to switch myplugin backend theme */
        if($serendipity['POST']['myTheme']) serendipity_plugin_api::hook_event('css_backend', $serendipity['POST']['myTheme']);

        ....
}

hook:: 'css_backend':
      $tfile = dirname(__FILE__) . ((intval($_REQUEST['serendipity']['myTheme']) == 2) ? 'themes/th2' : '/themes/org') . '/myplugin_backend.css';
      echo $tfile;
      echo @file_get_contents($tfile);
      ...
echo $tfile zeigt den jeweils korrekten Pfad des ausgesuchten templates, die Ausgabe aber ist immer noch das themes/org Stylesheet. Kein Reload, F5, etc hilft. Ob ich dabei $_REQUEST['serendipity']['myTheme'], $_POST['serendipity']['myTheme'], $serendipity['POST']['myTheme'], oder $eventData['myTheme'] als Variable verwende, macht da natürlich keinen Unterschied.

Wenn all das sowieso eine falsche Fährte ist, wie kann ich das gewünschte Ziel anders erreichen?

hg,
Ian
garvinhicking
Core Developer
Posts: 30022
Joined: Tue Sep 16, 2003 9:45 pm
Location: Cologne, Germany
Contact:

Re: css_backend file switch

Post by garvinhicking »

Hi!

Das kann so nicht funktionieren: Das CSS wird ja geladen über einen eigenen HTTP-Request. Schwer zu erklären - aber der Aufruf des Hooks "backend_css" innerhalb eines Plugins ruft ja nur das CSS ab INNERHALB deines Plugins. Das CSS was der Browser kriegt läuft aber nicht über den Plugin-HTTP-Request ab, sondern über die eigene serendipity.css.php.

Das, was Du machen willst funktioniert nur verzögert. Dein Plugin HTTP-Post-Request muss eine Session-Variable, oder eine Serendipity-Konfigurationsvariable (serendipity_set_config_var) setzen, damit im nächsten HTTP-Request für das Stylesheet die änderung gemacht werden kann.

Im plugin backend_css hook kannst Du dann $eventData komplett mit deinem eigenen Stylesheet ersetzen. Das hebelt aber evtl andere Plugins aus, die in backend_css eigenen Code ausgeben wollen. Daher sollte dein Plugin dann als eines der ersten ausgeführt werden, damit andere Plugins an DEINEN CSS Code andocken, anstelle überschrieben werden.

Warum muss das Plugin den kompletten Code ersetzen, was ist der Gedanke dahinter? Ggf. sollte dein Plugin eher $serendipity['template'] dauerhaft umsetzen (serendipity_set_config_var), oder Du fügst einen eigenen CSS-Links im HTML des Admintemplates ein?

GRüße,
Garvin
# Garvin Hicking (s9y Developer)
# Did I help you? Consider making me happy: http://wishes.garv.in/
# or use my PayPal account "paypal {at} supergarv (dot) de"
# My "other" hobby: http://flickr.garv.in/
Timbalu
Regular
Posts: 4598
Joined: Sun May 02, 2004 3:04 pm

Re: css_backend file switch

Post by Timbalu »

garvinhicking wrote:Hi!

Das kann so nicht funktionieren: Das CSS wird ja geladen über einen eigenen HTTP-Request. Schwer zu erklären - aber der Aufruf des Hooks "backend_css" innerhalb eines Plugins ruft ja nur das CSS ab INNERHALB deines Plugins. Das CSS was der Browser kriegt läuft aber nicht über den Plugin-HTTP-Request ab, sondern über die eigene serendipity.css.php.

Das, was Du machen willst funktioniert nur verzögert. Dein Plugin HTTP-Post-Request muss eine Session-Variable, oder eine Serendipity-Konfigurationsvariable (serendipity_set_config_var) setzen, damit im nächsten HTTP-Request für das Stylesheet die änderung gemacht werden kann.
Ah, Danke! Das erklärt einiges. Ich beginne zu verstehen... ;-) Wobei sich mir dann irgendwann die Frage stellt, ob der Aufwand überhaupt gerechtfertigt ist.
Im plugin backend_css hook kannst Du dann $eventData komplett mit deinem eigenen Stylesheet ersetzen. Das hebelt aber evtl andere Plugins aus, die in backend_css eigenen Code ausgeben wollen. Daher sollte dein Plugin dann als eines der ersten ausgeführt werden, damit andere Plugins an DEINEN CSS Code andocken, anstelle überschrieben werden.
Warum komplett? Vom serendipity_admin.css? Das ist gar nicht in meiner Absicht. Ich wollte nur den css Teil von diesem Plugin selbst ersetzen.
Warum muss das Plugin den kompletten Code ersetzen, was ist der Gedanke dahinter? Ggf. sollte dein Plugin eher $serendipity['template'] dauerhaft umsetzen (serendipity_set_config_var), oder Du fügst einen eigenen CSS-Links im HTML des Admintemplates ein?
Darüber muss ich erst mal nachdenken.

Grüße
Ian
Post Reply