Page 1 of 2

Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Sun Aug 16, 2015 9:47 pm
by lck
Hallo miteinander,

auf der Suche nach einer Möglichkeit, den Admin-Bereich im Editier-Modus anders zu gestalten als im Vorschau-Modus, bin ich auf dies gestoßen.

Ergänzt man im Template den body-Tag mit:

Code: Select all

<body id="body" <?php if($adm && $edit) {echo 'class="adminedit"';}?><?php echo onload();?>>
oder gleicher Effekt

Code: Select all

<body id="body" <?php if($adm && !$normal) {echo 'class="adminedit"';}?><?php echo onload();?>>
So kann man per css das Template im Editier-Modus anders gestalten, z.B. den Hintergrund, die Farbe, Abstände, Schrift, Menü etc.

Code: Select all

#body.adminedit {
    background: none;
    background-color: #FFF;
} 
Besonders nützlich bei OnePage-Templates, das diese oft ein Hintergrundbild, ein fixiertes Menü oder Header haben. Somit ist ein anderes Template, speziell für den Admin-Bereich, nicht mehr notwendig.

Wünschenswert wäre natürlich, wenn eine solche Klasse oder id bereits durch CMSimple_XH generiert wird.

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Mon Aug 17, 2015 1:47 pm
by cmb
Ludwig wrote:auf der Suche nach einer Möglichkeit, den Admin-Bereich im Editier-Modus anders zu gestalten als im Vorschau-Modus, bin ich auf dies gestoßen.
Sehr schön! Sicher auch eine gute Ergänzung für die Tipps&Tricks im Wiki.
Ludwig wrote:Wünschenswert wäre natürlich, wenn eine solche Klasse oder id bereits durch CMSimple_XH generiert wird.
Der einfache Weg (ala <?php echo $onload?>) ist leider nicht möglich, da dies natürlich wieder eine Anpassung an den (bestehenden) Templates erfordern würde. Man könnte das allerdings auch in XH_finalCleanUp() durchführen. Kurz zur Erklärung: XH_finalCleanUp() wird am Ende eines jeden Requests aufgerufen, und dort wird das vollständige HTML noch einmal bearbeitet (u.a. wird dort das Adminmenü injiziert).

Lieber wäre mir aber eine Möglichkeit, dass Plugins (und sonstige Erweiterung) sich endlich in XH_finalCleanUp() einklinken können, um dort dann beliebige Manipulationen am auszuliefernden HTML vornehmen zu können. Denkbar wäre eine Funktion, mit der ein Callback registriert werden kann (etwa XH_registerCleanUpFunction), dem das HTML übergeben wird, und der das geänderte HTML zurück liefert. Diese Callbacks würden dann eben in XH_finalCleanUp() aufgerufen werden.

Dann wäre z.B. folgendes möglich:

Code: Select all

if (XH_ADM) {
    XH_registerCleanUpFunction('addBodyClass');
}

function addBodyClass($html)
{
    return preg_replace('/<body /', '<body class="adminedit" ', $html);
}
Für Templates, die bereits eine Klasse für <body> definieren, müsste die Funktion entsprechend angepasst werden.

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Tue Jan 24, 2017 12:36 pm
by lck
Ich möchte den body-Tag nun um eine php-Anweisung ergänzen, damit im Vorschau-Modus und im Bearbeiten-Modus jeweils eine andere Klasse ausgegeben wird, mit:

Code: Select all

<body <?php if(XH_ADM && $normal) {echo 'class="adminview"';}?> <?php if(XH_ADM && $edit) {echo 'class="adminedit"';}?> id="tpllck_body" <?php echo onload();?>>
Dachte das geht auch kürzer:

Code: Select all

<body <?php if(XH_ADM && $normal) {echo 'class="adminview"';}; if(XH_ADM && $edit) {echo 'class="adminedit"';}?> id="tpllck_body" <?php echo onload();?>>
Funktioniert auch, aber ist die Kurzform so in Ordnung?

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Tue Jan 24, 2017 1:03 pm
by cmb
lck wrote:Funktioniert auch, aber ist die Kurzform so in Ordnung?
Ja, wobei man noch weiter verkürzen könnte:

Code: Select all

<body <?php if (XH_ADM) echo 'class="' . ($normal ? 'adminview' : 'adminedit') . '"'?> id="tpllck_body" <?php echo onload();?>>
Wie man es macht, ist letztlich Geschmackssache.

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Tue Jan 24, 2017 1:29 pm
by lck
Sehr schön, danke!

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Tue Jan 24, 2017 2:24 pm
by cmb
Ein Hinweis noch bzgl. XH_ADM. Dieses wird von CMSimple (nicht CMSimple_XH) nicht definiert, so dass dort die Abfrage immer true ergibt (eine unschöne Eigenart von PHP). Wer also ein Template, das XH_ADM abfragt, unter CMSimple verwendet, wird nicht unbedingt das gewünschte Ergebnis haben.

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Tue Jan 24, 2017 3:32 pm
by lck
Also doch lieber $adm verwenden?

Ich weiß jetzt gar nicht, ob es auch noch andere Unterschiede zu Templates von CMSimple gibt. Sind CMSimple_XH-Templates bisher immer noch ohne Anpassung unter CMSimple nutzbar? Ich hätte eigentlich nichts dagegen.
Ich habe zwar noch eine alte CMSimple-Webseite, aber die werde ich in nächster Zeit auch auf XH umstellen.

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Tue Jan 24, 2017 3:50 pm
by cmb
lck wrote:Ich weiß jetzt gar nicht, ob es auch noch andere Unterschiede zu Templates von CMSimple gibt. Sind CMSimple_XH-Templates bisher immer noch ohne Anpassung unter CMSimple nutzbar?
Ich denke schon, aber sicher bin ich mir nicht.
lck wrote:Also doch lieber $adm verwenden?
Wenn ausdrücklich Kompatibilität mit CMSimple gewünscht wird, dann ja. Allerdings wird $adm vermutlich bei CMSimple_XH irgendwann mal rausfliegen (aus Sicherheitsgründen, und weil globale Variablen als API sowieso keine gute Idee sind).

Wenn nur verhindert werden soll, dass bei versehentlicher Verwendung solcher Templates grobe Fehlfunktionen auftreten, dann kann auf folgendes geprüft werden:

Code: Select all

defined('XH_ADM') && XH_ADM
Das mache ich bei einigen Plugins so, wo ansonsten unter CMSimple der Adminbereich auch von nicht eingeloggten Usern aufgerufen werden könnte.

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Fri Feb 09, 2018 6:21 pm
by lck
cmb wrote:
Tue Jan 24, 2017 1:03 pm
lck wrote:Funktioniert auch, aber ist die Kurzform so in Ordnung?
Ja, wobei man noch weiter verkürzen könnte:

Code: Select all

<body <?php if (XH_ADM) echo 'class="' . ($normal ? 'adminview' : 'adminedit') . '"'?> id="tpllck_body" <?php echo onload();?>>
Wie man es macht, ist letztlich Geschmackssache.
Hm, wie ist das OnePagern. Es funktioniert der Wechsel zwischen .adminedit und .adminview nur so lange, wie man keinen Link anklickt. Da wird dann z.B. ?Start&normal zu ?Start#Start und das wird anscheinend als Edit-Mode interpretiert und im body-Tag erscheint wieder die Klasse adminedit.

Lösung scheint zu sein, es andersrum zu schreiben (Erweiterung für den body-Tag):

Code: Select all

<?php if (XH_ADM) echo 'class="' . ($edit ? 'adminedit' : 'adminview') . '"'?>

Re: Admin-Bereich - Edit und Vorschau anders formatieren

Posted: Fri Feb 09, 2018 9:35 pm
by cmb
lck wrote:
Fri Feb 09, 2018 6:21 pm
Lösung scheint zu sein, es andersrum zu schreiben:

Code: Select all

<?php if (XH_ADM) echo 'class="' . ($edit ? 'adminedit' : 'adminview') . '"'?>
Richtig! Und man sollte im Zweifel immer $edit verwenden. $normal wird nämlich nur gesetzt, wenn &normal in der URL auftaucht; $edit wird ansonsten immer gesetzt. (Schön wäre es, wenn es $normal gar nicht gäbe, dann käme man nicht auf solch falsche Gedanken…)