WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

#1 14.07.2024 17:14:23

mk70
Member

Startseite und Seiten unterschiedlich gestalten

Hallo smile

endlich, nachdem ich xampp ans laufen und die eingebauten Dinge (insbesondere Editor) wieder drin habe, kann ich weiter machen... smile

Mir ist noch nicht ganz klar, wie ich die Startseite und die Seiten selbst unterschiedlich darstellen kann.

Bislang gab es mind. 5-8 Dateien in den Themes. Der Aufbau war so:

index.html
- html-Grundgerüst
- bei "main" gab es einen Platzhalter

[== HTML ==]
{CONTENT_FILE}

Der hat den Inhalt der 2 folgenden Dateien angezeigt:
home.html
content.html

Weitere waren
event.html
headline.html
etc.html

Dadurch konnte ich die Inhaltsbereiche individuell darstellen.

Home:
- Slider
- X Container mit unterschiedlichen Dingen

Content:
- eigenes Headerbild
- Breadcrump
- Inhalte
- Platzhalter für Sachen, die an verschiedenen Stellen angezeigt werden


Mit wbce habe ich den einen Platzhalter:

[== HTML ==]
<?php echo page_content(1); ?>

Wie müsste ich z.B. die Broadcrump-Leiste einbinden, wenn die NUR auf den Seiten, aber nicht auf der Startseite angezeigt werden soll?


Beim Slider hatte ich es auch etwas einfacher (denkt man jetzt so) lol

Hier war in der home.html der Grundstock eines Slider drin.
An den Stellen, die den einzelnen Slider (Bild und ggf. Text) zugeordnet sind, konnte ich mittels Inhaltscontainern arbeiten, so hatte jeder Slider einen eigenen Container, so dass man im Backend gut sehen konnte, welchen Slider man bearbeiten möchte. In der home.html wurden dann die Blöcke (Block_X, Block_Y, etc.) eingetragen. So ist es für den Betreiber der Seite selbst auch möglich, ein Bild oder den Text zu ändern.

Jetzt ist der ganze Code in einem Editor hinterlegt. Da kommt kein Betreiber mit klar - denke ich...

Kann man zb. bei den Slidern per GlobalStrings die Inhalte der Slider (Bild und Text) erstellen und den Platzhalter für den einzelnen Slider in den Editor zur Startseite einfügen?


Ich bin auch noch nicht mit weiteren Platzhaltern, bzw. den Blöcken, Page, Abschnitte, etc. vertraut.

page_content(1) zeigt was genau an? Alle Seiten, oder ist das der Block ID1, von dem in der Doku die Rede ist?
Auch hab ich da nicht verstanden, was es mit den Abschnitten auf sich hat, bzw. wie man die noch behandeln kann.
Irgendwo hatte ich gelesen, dass man z.B. die Inhalte aus den einzelnen Editor-IDs auch an verschiedenen Stellen einbinden kann: "Modul: WYSIWYG ID x"? Platzhalter?

Ich fürchte es wird noch etwas dauern bis ich die erste Seite fertig habe...  cool

Danke Euch und wünsche einen angenehmen Abend  cool


Gruß Mac smile

... der hier noch viel lernen/herausfinden muss  cool

Offline

#2 14.07.2024 19:40:25

florian
Administrator

Re: Startseite und Seiten unterschiedlich gestalten

Puh.

Da müssen wir dann wohl doch mal mit den Grundlagen anfangen.

Ein WBCE-Template besteht im wesentlichen aus der index.php und der info.php und weiteren templatespezifischen JS/CSS-Dateien, Bildern usw. Es ist natürlich möglich, PHP-Includes zu verwenden, um Teilbereiche des Templatecodes auszulagern, dafür gibt es aber weder Standards zur Benennung, noch Automatismen, um diese zu laden, das muss also im Template selbst mit include_once o.ä. realisiert werden.

Es gibt keine Automatismen, um verschiedene Templatevarianten für unterschiedliche Seiten zu realisieren. Das Template weiß - erstmal - nicht, ob es gerade die Startseite, eine normale Inhaltsseite oder eine vom System generierte Seite wie z.B. die Suche/Suchergebnisse oder die Anmeldeseite anzeigt. Deshalb gibt es auch keine von anderen CMS bekannte Vielzahl an main.html, header.inc, footer.php-usw.-Dateien, wodurch das Programmieren von WBCE-Templates einzigartig einfach ist.

Natürlich gibt es dennoch verschiedene Möglichkeiten, Darstellungsvarianten zu erzeugen.
Zum einen gibt es die Konstante PAGE_ID, die man im Template abfragen kann.
Jede Seite hat ja eine Page-ID, die im Backend im Seitenbaum sowie in der Titelzeile jeder Seite anzeigt wird. Oft hat die Startseite die Page-ID 1, weil sie beim Erstellen des Webauftritts als erste angelegt wurde. Das muss aber nicht so sein. Die Startseite kann auch die ID 3 oder 42 oder was auch immer haben.
Wenn man nun auf einer bestimmten Seite eine bestimmte Darstellung haben möchte, also dass dort z.B. der Breadcrumb angezeigt wird oder ein selbst definiertes include geladen wird, genügt

<?php if (PAGE_ID==42) { ?>
...irgendwas...
<?php } ?>

oder auch umgekehrt

<?php if (PAGE_ID !=42) { ?>
...irgendwas...
<?php } ?>

Man kann also schon mal allerlei Dinge mittels der PAGE_ID erreichen. (Oder diese auch in CSS-Klassen verwursten: <body class="page<?php echo PAGE_ID;?>"> usw.)
Des weiteren gibt es noch die Konstanten PARENT (Page-ID der direkten Elternseite) und ROOT_PARENT (Page-ID der obersten Elternseite). So kann man zum Beispiel allen Seiten, die unterhalb einer anderen Seite liegen, ein zusätzliches Stylesheet zuordnen, um unterschiedliche Themenbereiche mit unterschiedlichen Farben darzustellen.

Weiterhin:
WBCE liegt das Prinzip der Blöcke zugrunde. Die Blöcke werden im Template (in der info.php) definiert. Der von Dir zitierte Befehl

<?php echo page_content(1); ?>

gibt den Inhalt des ersten (ggf. einzigen) Blocks aus.

Nun würde es aber genau gar keinen Sinn machen, die Blöcke zu numerieren, wenn es nur einen gäbe. Sprich, in der info.php des Templates können beliebig viele Blöcke definiert werden. Schau Dir ein paar Templates an, dann siehst Du, dass dort diverse Blöcke vorgesehen sind, z.B. für optionale Seitenspalten, Eyecatcher, Header usw.
Diese Blöcke werden in den meisten Templates initialisiert mit folgendem PHP-Code im <head> des Templates:

 require_once __DIR__.'/info.php';
foreach($block as $k=>$v){
	ob_start(); 
	page_content($k); 
	$block[$k] = ob_get_clean();
}

Auf diese Weise haben wir einen Array $block, in dem die Inhalte des jeweiligen Blocks stehen. Und nun kann man daher gehen und in Abhängigkeit davon, ob in diesem Block etwas drin steht, selbigen ausgeben oder nicht, Spalten anzeigen oder nicht usw.

Am Beispiel des Templates Frühliungsbunt: Dieses Template hat (u.a.) eine optionale Seitenspalte. Ist etwas diesem Block zugeordnet, wird die Seitenspalte angezeigt, ist da nichts drin, geht der Content über die gesamte Breite.

info.php:

...
$block[1] = 'Inhalt';
$block[2] = 'Seitenspalte';
...

index.php

...
<?php if ($block[2] != '') { ?>			
	<article class="unit three-quarters">
		<?php 					
		echo $block[1]; ?>			
	</article>
	<aside class="unit one-quarter">
		<?php echo $block[2]; ?>	
	</aside>
<?php } else { ?>
	<article class="unit whole">
		<?php echo $block[1]; ?>			
	</article>
<?php } ?>
...

In einem Block können mehrere Abschnitte stehen. Und diese Abschnitte wiederum können von allen möglichen Modulen erzeugt werden. Du willst einen Slider? Lege einen Abschnitt vom Typ Vegas Slider an. Du brauchst ein Formular? Ein Abschnitt vom Typ MiniForm tut beste Dienste. Du willst HTML, das vom CKEditor nicht kastriert wird, Javascript oder PHP? Ein Abschnitt vom Typ Code2 ist dein Freund. Und so weiter.
Jeder Abschnitt hat eine eindeutige ID (die Section-ID), und ggf. einen selbst vergebenen Namen.

So spielen also Template, Blöcke und Abschnitte zusammen. Das Template gibt nur das Grundgerüst vor, was auf der jeweiligen Seite erscheinen soll, legst Du über die Abschnitte fest, die Du auf der jeweiligen Seite anlegst und den zur Verfügung stehenden Blöcken zuweist.

Willst Du irgendwelche Abschnitte auf mehreren Seiten anzeigen, das hatte ich in dem anderen Thread hier im Forum kürzlich erläutert, kannst Du dies mittels des Droplets "SectionPicker" oder des gleichnamigen Moduls SectionPicker erreichen. Soll ein Abschnitt auf allen Seiten erscheinen, kannst Du den Droplet-Aufruf auch direkt im Template einfügen. Heißt, wenn Du einen Slider im Abschnitt mit der ID 23 hast und der auf allen Seiten erscheinen soll, kannst Du in der index.php des Templates diesen mit [[sectionpicker?sid=23]] reinladen.
Da das natürlich nicht passieren sollte, wenn der Abschnitt sowieso bereits direkt einem Block der Seite zugewiesen ist und/oder er nicht auf der Startseite erscheinen soll, lässt sich das wiederum mit der eingangs erwähnten Abfrage der Page-ID sinnvoll kombinieren:

<?php if (PAGE_ID!=42) { ?>
[[sectionpicker?sid=23]]
<?php } ?>

Es gibt bestimmte Module, die sozusagen eine Unterstruktur erzeugen. Das ist der Flexibilitäts-Overkill, sozusagen. Sprich, wenn Dir die Slider-Module nicht gefallen, nimmst Du das Modul Members oder OneForAll und definierst in den Moduleinstellungen das Gerüst und die einzelnen Slides, erzeugst darüber die benötigte HTML-Struktur und lädst die erforderlichen Javascripte, und hast im Backend dann für die Slides Eingabefelder ganz nach Gusto: Titel, Bild, Content, you name it.
Siehe Screenshot im Anhang: So ist das zum Beispiel auf https://wbce-cms.org realisiert, da wäre ich ja irre geworden, wenn ich das irgendwie in den CKE hätte dengeln müssen. Und, logisch, der Slider ist nur auf der Startseite, weil ich ihn nirgends anders brauche.
(Das ist mit Itemz realisiert, das Modul steht offiziell leider nicht mehr zur Verfügung, vom Prinzip her macht aber Members das selbe).

Last edited by florian (14.07.2024 19:47:42)


Sorgen sind wie Nudeln: man macht sich meist zu viele.

Offline

Liked by:

Slugger

#3 15.07.2024 08:44:36

mk70
Member

Re: Startseite und Seiten unterschiedlich gestalten

Morgen.. cool

ok, das muss ich in Ruhe abarbeiten... thumb_up
Danke Dir erstmal und bei Fragen melde ich mich dazu ...  smile


Gruß Mac smile

... der hier noch viel lernen/herausfinden muss  cool

Offline

Board footer

up