Page 1 of 3

Tipp - Nur Startseite anders gestalten

Posted: Sat Jun 03, 2017 8:32 pm
by lck
Es gibt ja immer wieder mal Anfragen und auch bereits Lösungen, wie man nur die Startseite anders gestalten kann (Header, Hintergrundbild, Farbe, Breite, Höhe, etc.).
Durch den Artikel "Tipps und Tricks" (Danke an Christoph) bin ich auf eine andere einfache Lösung gestoßen (funktioniert auch in Zweitsprachen) und zwar durch Kombination von "Newsbox nur auf der Startseite" und "Eigenes Stylesheet für jede Seite".

Der Code wird in der template.htm vor dem </head> eingefügt.
($s === 0 ist die Startseite; $s === 1 wäre die 2.Seite; ABER, hat die Startseite Unterseiten, ist also die Unterseite Seite 2 usw.!):

Code: Select all

<?php if ($s === 0):?>
    <?php echo tag('link rel="stylesheet" type="text/css" href="'.$pth['folder']['template'].'startpage.css"')."\n"; ?>
<?php endif;?>
Dann noch eine startpage.css im Template-Ordner erstellen, Beispiel:

Code: Select all

#body {
    background: url(images/bg.jpg) 50% no-repeat fixed;
    background-color: #0e3d11;
    -webkit-background-size: cover;
    background-size: cover;
}
.header {
    height: 30vh;
}
.header h1{
    font-size:200%;
}
Eine zweite Variante wäre, die Style-Angaben direkt in's template.htm einzubinden (spart evtl. etwas Ladezeit :? ):

Code: Select all

<?php if ($s === 0):?>
<style type="text/css">
    #body {
    background: url(<?php echo $pth['folder']['templateimages'];?>bg.jpg) 50% no-repeat fixed;
    background-color: #0e3d11;
    -webkit-background-size: cover;
    background-size: cover;
    }
    .header {height: 30vh;}
    .header h1{font-size:200%;}
</style>
<?php endif;?>

Re: Tipp - Nur Startseite anders gestalten

Posted: Wed Mar 14, 2018 8:17 pm
by lck
lck wrote:
Sat Jun 03, 2017 8:32 pm
($s === 0 ist die Startseite; $s === 1 wäre die 2.Seite; ABER, hat die Startseite Unterseiten, ist also die Unterseite Seite 2 usw.!):
Ist es per Variable auch möglich bei Multi-Pagern nur menulevel1-Links auszuwählen? Also den ersten Link in menulevel1, den zweiten Link in menulevel1, usw..

Re: Tipp - Nur Startseite anders gestalten

Posted: Wed Mar 14, 2018 10:14 pm
by cmb
lck wrote:
Wed Mar 14, 2018 8:17 pm
Ist es per Variable auch möglich bei Multi-Pagern nur menulevel1-Links auszuwählen? Also den ersten Link in menulevel1, den zweiten Link in menulevel1, usw..
CMSimple_XH speichert den Level jeder Seite im Array $l. Im Prinzip kannst du also etwa folgendes schreiben:

Code: Select all

if ($l[$s]) { /* mach was */ }
Das gibt aber, falls $s === -1 (z.B. in der Plugin-Administration), eine Notice, die man (in diesem Fall) wie folgt vermeiden kann:

Code: Select all

if (!empty($l[$s])) { /* mach was /* }

Re: Tipp - Nur Startseite anders gestalten

Posted: Thu Mar 15, 2018 11:00 am
by lck
Danke, werd's mal testen.

Re: Tipp - Nur Startseite anders gestalten

Posted: Fri Mar 16, 2018 6:00 pm
by lck
cmb wrote:
Wed Mar 14, 2018 10:14 pm
CMSimple_XH speichert den Level jeder Seite im Array $l. Im Prinzip kannst du also etwa folgendes schreiben:

Code: Select all

if ($l[$s]) { /* mach was */ }
Das gibt aber, falls $s === -1 (z.B. in der Plugin-Administration), eine Notice, die man (in diesem Fall) wie folgt vermeiden kann:

Code: Select all

if (!empty($l[$s])) { /* mach was /* }
Habe das mal mit folgendem Code probiert. Die Meldung erscheint jetzt bei allen menulevel1-Seiten, schon mal nicht schlecht.

Code: Select all

<?php if ($s >= 0 && $l[$s] == 1):?>
<?php echo "Hello World!"; ?>
<?php endif;?>
Wie kann ich jetzt eine bestimmte Seite auswählen oder auch mehrere Seiten? Zum Beispiel wenn ich 6 menulevel1-Links habe, nur Link-1, Link-3, Link-4.

Re: Tipp - Nur Startseite anders gestalten

Posted: Fri Mar 16, 2018 6:30 pm
by olape
lck wrote:
Fri Mar 16, 2018 6:00 pm
Wie kann ich jetzt eine bestimmte Seite auswählen oder auch mehrere Seiten? Zum Beispiel wenn ich 6 menulevel1-Links habe, nur Link-1, Link-3, Link-4.
Ich glaube, das wird so, zumindest nicht wirklich sinnvoll, funktionieren.
Du könntest das über $s lösen, aber da ein CMS ein dynamisches Menü erzeugt/erzeugen soll, ist es so eben nicht sonderlich sinnvoll.
Bei jeder Änderung in der Seitenstruktur müsste nachgebessert werden.

Vielleicht wäre Morepagedata eine Alternative. Ich habe das persönlich noch nicht getestet, aber ich glaube das wäre eine Möglichkeit.

Oder du setzt bei den entsprechenden Seiten eine eigene Variable im Content, etwas so:

Code: Select all

#CMSimple $GLOBALS['irgendwas'] = 'on';#
und fragst diese Variable dann entsprechend ab.
Ich nutze das z.B. so, um bei einigen Seiten den Link zur Druckvorschau wegzulassen, oder auch ein anderes Logo anzuzeigen.


Deinen Code könntest du etwas einkürzen

Code: Select all

<?php
if($s >= 0 && $l[$s] == 1) {
   echo 'Hello World!';
}
?>

Re: Tipp - Nur Startseite anders gestalten

Posted: Fri Mar 16, 2018 7:47 pm
by cmb
olape wrote:
Fri Mar 16, 2018 6:30 pm
lck wrote:
Fri Mar 16, 2018 6:00 pm
Wie kann ich jetzt eine bestimmte Seite auswählen oder auch mehrere Seiten? Zum Beispiel wenn ich 6 menulevel1-Links habe, nur Link-1, Link-3, Link-4.
Ich glaube, das wird so, zumindest nicht wirklich sinnvoll, funktionieren.
Du könntest das über $s lösen, aber da ein CMS ein dynamisches Menü erzeugt/erzeugen soll, ist es so eben nicht sonderlich sinnvoll.
Bei jeder Änderung in der Seitenstruktur müsste nachgebessert werden.
Ja, jedenfalls wenn man wirklich ganz bestimmte Seiten mit einer Sonderbehandlung versehen möchte. In diesem Fall würde ich auch Morepagedata oder eben dessen händischen kleinen Bruder (also eine globale Variable per CMSimple-Skripting setzen) empfehlen.

Es könnte aber durchaus Fälle geben, wo Ludwigs Anfrage sinnvoll sein kann. Da wäre dann XH\Pages hilfreich; geht es nur um Menulevel 1, dann genügt die ::toplevels() Methode:

Code: Select all

$toplevels = (new XH\Pages)->toplevels();
$filtered = array_filter($toplevels, function ($i) {
    $specialsubpages = [0, 2, 3]; // 1., 3. und 4. Unterseite
    return in_array($i, $specialsubpages);
}, ARRAY_FILTER_USE_KEY);
if (in_array($s, $filtered)) {
    echo 'Hello world';
}
(Der Code benötigt PHP ≥ 5.6.0, wegen des ARRAY_FILTER_USE_KEY. Könnte bei Bedarf abwärtskompatibel umgeschrieben werden.)
olape wrote:
Fri Mar 16, 2018 6:30 pm
Deinen Code könntest du etwas einkürzen

Code: Select all

<?php
if($s >= 0 && $l[$s] == 1) {
   echo 'Hello World!';
}
?>
Ja, durchaus möglich – immer auch ein bisschen Geschmackssache. Zumindest wenn der Code noch umfangreicher wird, würde ich ihn aber in eine eigene Funktion auslagern, und im Template diese aufrufen – sonst wird das Template schnell zu unübersichtlich.

Re: Tipp - Nur Startseite anders gestalten

Posted: Fri Mar 16, 2018 8:42 pm
by lck
olape wrote:
Fri Mar 16, 2018 6:30 pm
Oder du setzt bei den entsprechenden Seiten eine eigene Variable im Content, etwas so:

Code: Select all

#CMSimple $GLOBALS['irgendwas'] = 'on';#
und fragst diese Variable dann entsprechend ab.
Ich nutze das z.B. so, um bei einigen Seiten den Link zur Druckvorschau wegzulassen, oder auch ein anderes Logo anzuzeigen.
Danke Olaf, aber man muss es unter dem Aspekt Template-Erstellung sehen und da fällt das leider schon mal flach.
cmb wrote:
Fri Mar 16, 2018 7:47 pm
Es könnte aber durchaus Fälle geben, wo Ludwigs Anfrage sinnvoll sein kann. Da wäre dann XH\Pages hilfreich; geht es nur um Menulevel 1, dann genügt die ::toplevels() Methode:
Sehr schön, das funktioniert gut.

Re: Tipp - Nur Startseite anders gestalten

Posted: Fri Mar 16, 2018 9:43 pm
by olape
lck wrote:
Fri Mar 16, 2018 8:42 pm
Danke Olaf, aber man muss es unter dem Aspekt Template-Erstellung sehen und da fällt das leider schon mal flach.
Ja, derjenige, der die Seite pflegt, kann bei dieser Variante nicht ganz unbeleckt sein.
Von daher verstehe ich deinen Einwand.
Ich muss mir bei Gelegenheit unbedingt Morepagedata ansehen.

lck wrote:
Fri Mar 16, 2018 8:42 pm
cmb hat geschrieben: ↑16 Mär 2018 20:47
Es könnte aber durchaus Fälle geben, wo Ludwigs Anfrage sinnvoll sein kann. Da wäre dann XH\Pages hilfreich; geht es nur um Menulevel 1, dann genügt die ::toplevels() Methode:
Sehr schön, das funktioniert gut.
Aber, die Chance, das hier nachgebessert werden muss, ist immer noch gegeben, wenn auch minimiert. Auch die Position und Anzahl der Level1-Menüpunkte kann sich ändern.

Re: Tipp - Nur Startseite anders gestalten

Posted: Fri Mar 16, 2018 10:12 pm
by cmb
lck wrote:
Fri Mar 16, 2018 8:42 pm
Danke Olaf, aber man muss es unter dem Aspekt Template-Erstellung sehen und da fällt das leider schon mal flach.
Na ja, du könntest eventuell ein vorkonfiguriertes Morepagedata mit ausliefern, oder zumindest erfordern, dass das Plugin installiert wird, und beschreiben, was gemacht werden muss.

Alternativ könntest du die notwendige minimale Funktionalität entsprechend Morepagedata im Template einbauen. Eventuell muss das teilweise in userfuncs.php passieren, aber auch das wäre kein großes Problem. Und der Page-Data-Kram ist eigentlich recht einfach zu programmieren. Wie genau, ist im Wiki beschrieben.
olape wrote:
Fri Mar 16, 2018 9:43 pm
Ich muss mir bei Gelegenheit unbedingt Morepagedata ansehen.
Sicher nicht verkehrt. Vielleicht magst du ja auch bei der Wartung mithelfen, zumindest solange svasti keine Zeit für das Plugin hat.

Was Morepagedata im wesentlichen tut, ist aber nichts anderes als globale Variablen zu setzen – man muss das eben nicht manuell machen, sondern kann das im Pagedata-Tab per Formulareingabe tun.