WBCE CMS Forum

WBCE CMS – Way Better Content Editing.

You are not logged in.

#1 07.01.2024 11:50:39

bear
Member

Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

Viele moderne HTML5 Layouts arbeiten zur Strukturierung des Inhalts und zum leichteren Styling mit Tags wie <section> und <article>.

Die einzelnen Content-Module arbeiten hier jedoch sehr unterschiedlich. Machen bieten zwar über Templates oder ähnliches nahezu volle Kontrolle aber einige packen den ganzen Inhalt einfach in ein eigenes <div> und WYSIWYG gibt nur 1:1 den HTML-Inhalt aus.
Natürlich könnte man das im Falle des WYSIWYG in der Quellcode Ansicht eintragen. Aber für den "normalen" End-User, der Inhalte pflegen soll und sich nicht mit HTML/CSS auskennt, gehen solche manuellen Code Ergänzungen einfach zu leicht verloren und zerstören dann das Layout.

Es wäre praktisch wenn man beispielsweise bei den Abschnittseinstellungen festlegen könnte, dass die Ausgabe des Moduls zusätzlich noch in ein Tag eingeschlossen wird, welches man frei wählen/eingeben kann.
Perfekt wäre es dann natürlich, wenn man hier auch gleich die ID und/oder die Class des Tags beeinflussen könnte.

Damit wäre der resultierende Code einer Seite schöner strukturiert und leichter per CSS zu stylen.

Oder gibt es noch einen mir bis jetzt verborgen gebliebenen Trick über Hooks / Droplets einen Modulinhalt in ein eigenes Tag einschließen zu lassen ?

[Ergänzung]
Da manche Layouts auch mehr als ein Tag oder spezielle Eigenschaften brauchen sind zwei Text-Felder (jeweils eines für davor und danach) wohl am flexibelsten.

LG

Last edited by bear (07.01.2024 12:57:14)

Offline

#2 07.01.2024 14:19:52

florian
Administrator

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

Interessante Idee.
Theoretisch müsste das wohl über einen entsprechenden Outputfilter hinzubekommen sein.
Leider bekomme ich das leider nicht hin, einen entsprechenden OPF zu programmieren. Vielleicht können @mrbaseman oder @stefanek  was dazu sagen.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#3 07.01.2024 16:52:59

bear
Member

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

Ich habe es auf die schnelle mal mit einem Inline OPF auf Module ausprobiert.
Leider ist das Ergebnis nicht zufriedenstellend, da offensichtlich der Filter mehrfach auf die Ausgabe eines Abschnitts angewendet wird. Damit landen dann mehrere Tags um die eigentliche Ausgabe des Moduls herum, selbst wenn es auf der Seite nur einen Abschnitt gibt. Dabei macht es auch keinen Unterschied ob man den Typ "Modul", "Modul zuletzt" oder "Modul zuerst" wählt. Wenn auf einer Seite mehrere Abschnitte sind wird das ganze noch mehr.
Ist das so gewollt ?
Abgesehen davon ist es über einen solchen globalen Filter schwierig bei einzelnen Abschnitten gezielt die richtigen umschließenden Tags zu erzeugen, die für den jeweiligen Layout-Zweck erforderlich sind. Das wäre bei den Abschnittseinstellungen oder auch als Option bei der Bearbeitung aus meiner Sicht besser aufgehoben.

Offline

#4 07.01.2024 17:03:56

florian
Administrator

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

Damit landen dann mehrere Tags um die eigentliche Ausgabe des Moduls herum, selbst wenn es auf der Seite nur einen Abschnitt gibt. Dabei macht es auch keinen Unterschied ob man den Typ "Modul", "Modul zuletzt" oder "Modul zuerst" wählt. Wenn auf einer Seite mehrere Abschnitte sind wird das ganze noch mehr.
Ist das so gewollt ?

Das war mir bei meinen Versuchen auch aufgefallen. Ich nehme an, das ist nicht so gewollt. Ich gebe das mal an die Zuständigen weiter.

Das wäre bei den Abschnittseinstellungen oder auch als Option bei der Bearbeitung aus meiner Sicht besser aufgehoben.

Hm, jein. Das mag für Auftritte, die nur aus wenigen Einzelseiten bestehen, angehen, aber wenn es um umfangreichere Websites mit vielen Einzelseiten geht, und man auf jeder Seite und für jeden Abschnitt Tags und IDs hinterlegen müsste, ist glaube ich auch nichts gewonnen.


Code allein macht nicht glücklich. Jetzt spenden!

Offline

#5 07.01.2024 18:28:19

bear
Member

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

Hm, jein. Das mag für Auftritte, die nur aus wenigen Einzelseiten bestehen, angehen, aber wenn es um umfangreichere Websites mit vielen Einzelseiten geht, und man auf jeder Seite und für jeden Abschnitt Tags und IDs hinterlegen müsste, ist glaube ich auch nichts gewonnen.

Das hängt alles leider extrem vom jeweiligen Layout/Theme ab. Bei Layouts mit mehreren Blöcken wird man in den Seitenleisten sicher andere Tags und Klassen brauchen als im Hauptinhalt. Um es ganz sauber und angenehm für den User zu machen müsste eigentlich vom Template vorgegeben werden welche umschließenden Tags inkl. Klassen in den einzelnen Blöcken Sinn machen und welches davon die Vorgabe-Einstellung ist. Der User bekommt dann daraus nur eine entsprechende Auswahl. Diese könnte bei dein Abschnittseinstellungen oder auch direkt bei der Bearbeitung integriert sein. Aber auch dann muss man Inhalt von einigen Modulen besonders behandeln, falls dort schon direkt die richtigen Tags mitkommen und man keine zusätzlichen braucht.
Eine Lösung, die für alle Situationen perfekt und auch noch leicht zu nutzen ist, wird wohl schwierig. Man kann sich ja auch auf den Standpunkt stellen dann ein anderes Layout zu nehmen bzw. es so umzubauen, dass keine zusätzlichen Tags nötig sind. Aber dann wird man eben auch nicht alle Effekte wie gewünscht hinbekommen, da man nicht die volle Kontrolle über den generierten HTML-Code hat.
Am einfachsten umzusetzen sind sicher Vorher-, Nachher-Felder, mit denen man falls nötig vor und/oder hinter die Ausgabe des Moduls noch weiteren HTML-Code setzen kann.

Offline

#6 07.01.2024 20:20:43

stefanek
Developer

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

Hallo, dafür gibt es eine viel bessere Möglichkeit, die bereits seit einigen Versionen von WBCE vorhanden ist.
Ich muss mal im Forum schauen, da ich mich erinnere es hier irgendwo beschrieben zu haben.

Der Grund es überhaupt implementiert zu haben war genau der, den User @bear beschreibt.

Ich schaue mal und melde mich gleich zurück.

Christian


“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale

Online

Liked by:

florian

#7 07.01.2024 20:45:49

florian
Administrator

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen


Code allein macht nicht glücklich. Jetzt spenden!

Offline

Liked by:

stefanek

#8 07.01.2024 20:56:31

stefanek
Developer

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

Ich finde momentan nur sehr alte Beiträge aus einer Zeit wo die Funktion noch nicht im Core implementiert war.
Deswegen hier ein kleines, neues Tutorial.

Um es zu verwenden, muss man an das Template ran.
Speziell dort, wo momentan die function page_content() verwendet wird.


Diese Funktion, wenn keine Nummer darin angegeben wird, gibt sämtliche Inhalte der Seite aus.
D.h. alle Sektionen/Abschnitte der jeweiligen Seite.

Wird eine Nummer mit angegeben, z.B.  page_content(1)
werden alle Sektionen der Seite ausgegeben die dem Layout-Block (kurz Block) zugewiesen wurden.

Die Sektionen werden in der Reihenfolge ausgegeben wie sie im Backend angeordnet sind und deren Layout wird entsprechend dem Layout des für die Sektion verwendeten Moduls ausgegeben. Im Falle von WYSIWYG Sektionen wird dann kein zusätzliches Layout (HTML) mehr angefügt.

Soweit das Standard-Verhalten.

WAS MAN ABER MACHEN KANN, falls man einzelnen Modulen zusätzliches Layout geben will, ist Folgendes:
statt der  page_content() Funktion verwenden man die Funktion  block_contents() .

Am besten verwendet man dazu auch die Nummber des Layout-Blocks. Also z.B.
block_contents(1)

Die Ausgabe dieser Funktion ist aber ein Array, kein String, deswegen ist dieses Vorgehen komplexer.

Hier ein Beispielcode aus einem meiner Templates:

<main id="main">  
            <?php
            $sections = block_contents(1);
            foreach ($sections as $section) {
                
                if (in_array($section['module'], [
                        // alle Module (verwende Ordnernamen des Moduls) in diesem Array
                        // erhalten keine extra HTML-Layout drum rum
                        'code2', 
                        'miniform'
                    ])) {
                    echo $section['content'];
                } else {
                    // alle anderen Modul-Typen (WYSIWYG und alle anderen)
                    // erhalten dieses Layout drumherum
                    echo '<section class="pos-' . $section['position'] . '">
                            <div class="container">
                                <div class="row">
                                    ' . $section['content'] . ' 
                                </div>
                            </div>
                          </section>';
                }
            }
            ?>
        </main>

Natürlich ist es etwas komplexer (und wahrscheinlich auch ein Grund warum es selten verwendet wird), aber man kann damit sehr viel machen.
Vor allem wenn man mit Template-Frameworks wie Bootstrap arbeitet kann man deren Möglichkeiten mehr ausschöpfen.

Übrigens, in WBCE haben wir eine Funktion mit der man sehr einfach Arrays, Variablen und andere Datentypen untersuchen kann.
Dazu die Funktion debug_dump() verwenden.

Auf diese Weise kann man schnell herausfinden was sich alles in dem Array befindet:

<?php
            $sections = block_contents(1);

            debug_dump($sections);
?>

Die obige Funktion   block_contents() eröffnet wirklich eine Menge neuer Styling Möglichkeiten bei WBCE, da es die "Ketten" von der einfachen page_content()  Funktion sprengt.

Viel Spaß beim Experimentieren.

Christian

Last edited by stefanek (08.01.2024 02:07:19)


“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale

Online

Liked by:

mrbaseman

#9 09.01.2024 13:55:58

stefanek
Developer

Re: Abschnittsinhalt in zusätzliches selbst definierbares Tag einschließen

@bear,

hast Du mit dem Code rumexperimentiert?
Wenn es dazu fragen gibt, lass mich wissen.

Damit kannst Du zwar nicht jeder Sektion/Abschnitt (SectionID) eigenes HTML geben aber jedem Modul-Typ. Und zusätzlich kannst Du auch die section-ID mit ins Layout schreiben, den Modul-Typ und gerne auch "sectionname".

Auch anderweitig, falls es Fragen/Feedback gibt, immer her damit.

Christian


“Success is the progressive realization of a worthy ideal.” ― Earl Nightingale

Online

Board footer

up