WebsiteBaker Support (2.13.x) > General Help & Support

Content-Blöcke, eine kleine Herausforderung

(1/3) > >>

kuerbis42:
Hallöchen zusammen,

ich habe gehofft, das mir die Blöcke bei folgender Idee (Grid-Layout) helfen:
gewollt ist also das hier:

--- Code: ---+-----------------------------+
|    (1) 2-spalten Block      |
+-----------------------------+
| (2) Block 2  | (3) Block 3  |
+-----------------------------+
| (4)     2-spalten Block     |
+-----------------------------+
|  (5) Block 2 | (6)  Block 3 |
+-----------------------------+

--- End code ---
In den Abschnitten der Seite ist alles wie gewohnt definiert, die Reihenfolge soll das Layout beeinflussen:
Abschnitt 1: Art: Wysiwyg, Block '2spalten'
Abschnitt 2: Art: Wysiwyg, Block 'linkerB'
Abschnitt 3: Art: Wysiwyg, Block 'rechterB'
Abschnitt 4: Art: Wysiwyg, Block '2spalten'
Abschnitt 5: Art: Wysiwyg, Block 'linkerB'
Abschnitt 6: Art: Wysiwyg, Block 'rechterB'


heraus kommt aber das hier:


--- Code: ---+-----------------------------+
|    (1) 2-spalten Block      |
|    (4) 2-spalten Block      |
+-----------------------------+
| (2) Block 2  | (3) Block 3  |
| (5) Block 2  | (6)  Block 3 |
+-----------------------------+

--- End code ---

So wie es aussieht wird bei
page_content(x) alles "zusammengefasst", was in den Block 1 gehört, entsprechend Block 2 und 3
es kommt also nicht - wie gehofft - nach einander der Reihenfolge der Abschnitte entsprechend.
Richtig?

Hat da jmd. eine Idee zu?

Danke, Gruß
Frank

jacobi22:
doch, das geht (hervorragend) mit den Blöcken - bis 99 sind möglich

mal aus einem Template kopiert

in der info.php die Blöcke festlegen, z.b. so


--- Code: ---// Definition of content blocks
$block[1]            ='MainContent';
$block[2]            ='Right Block';
$block[3]            ='Teaser';
$block[4]            ='Anynews';
$block[5]            ='Contactbox Left';
$block[6]            ='Contactbox Right';
$block[7]            ='Bottom Block';
$block[8]            ='In-Footer Block';
--- End code ---

im Anschluß nach Speichern das Template neu einlesen lassen unter Erweiterungen -> Erweitert -> alles aktivieren und neu laden

dann in der index.php des jeweiligen Templates

oben im PHP-Teil alle Blöcke in die jeweiligen Buffer packen

--- Code: ---ob_start();  //fetch MainContent
page_content(1);
$page_MainContent = ob_get_clean();
ob_start();  //fetch original main content
page_content(2);
$page_RightBlock = ob_get_clean();
ob_start();  //fetch original right sidebar content
page_content(3);
$page_Teaser = ob_get_clean();
ob_start();  //fetch original right sidebar content
page_content(4);
$page_AnyNews = ob_get_clean();
ob_start();  //fetch original right sidebar content
page_content(5);
$contact_leftBlock = ob_get_clean();
ob_start();  //fetch original right sidebar content
page_content(6);
$contact_rightBlock = ob_get_clean();
ob_start();  //fetch original right sidebar content
page_content(7);
$page_BottomBlock = ob_get_clean();
ob_start();  //fetch original right sidebar content
page_content(8);
$page_InFooterBlock = ob_get_clean();
--- End code ---

und zuletzt dann im Templatecode diese definierten Alias an die richtige Stelle einfügen

Das Beispiel zwei Spalten bei Vorhandensein von Content im Block 2 -== $page_RightBlock. Ist kein Content in Block2, dann nur eine Spalte

--- Quote ---<!--  Main Content   -->
    <?php if(trim($page_RightBlock)!=''){ ?>
    <div class="w3-container w3-content w3-center w3-padding-8" id="content1" style="max-width:960px;">
        <div class="w3-container w3-content w3-left-align w3-padding-0 w3-col m8 l8" id="content2" style="max-width:1190px;">
            <?php echo $page_MainContent; ?>
        </div>
        <div class="w3-container w3-block w3-left-align w3-row-padding w3-col m4 l4">
            <?php echo $page_RightBlock; ?>
        </div>
    </div>   
    <?php
        }else{
    ?>
    <div class="w3-container w3-content w3-center w3-padding-8" id="content1" style="max-width:960px;">
        <div class="w3-container w3-block w3-left-align w3-row-padding">
            <?php echo $page_MainContent; ?>
        </div>
    </div>   
    <?php
    }
    ?>
--- End quote ---

anderes Beispiel - erscheint nur, wenn auch Inhalt im Block vorhanden ist - im Beispiel dann der Block 4 == $page_AnyNews


--- Quote ---<!--  Anynews block  -->
    <?php if(trim($page_AnyNews)!=''){ ?>
        <!-- anynewscontent  -->
        <div class="w3-container w3-content w3-center w3-padding-0" id="content4" style="max-width:960px;">
            <div class="w3-container w3-block w3-left w3-row-padding">
                <?php echo $page_AnyNews; ?>
            </div>
        </div>
    <?php
        }
    ?>
--- End quote ---

Hinweis... ein Block, der nicht zugeordnet wurde, gehört immer zu Block 1, also immer in der Sectionverwaltung der Seiten kontrollieren

empfohlen wird auf jeden Fall die Abfrage, ob der jeweilige Block auch nicht leer ist
so

--- Quote ---<?php if(trim($page_AnyNews)!=''){ ?>....
--- End quote ---

bzw so für zwei Spalten

--- Quote ---<?php if(trim($contact_leftBlock)!='' || trim($contact_rightBlock)!='' ){ ?>....
--- End quote ---

kuerbis42:
@Jacobi22:
vielen Dank für Deine ausführlichen Ausführungen.
Ja, ich gebe Dir recht, wenn man mit ganz vielen Blöcken arbeitet, dann geht das easy - ABER (leider gibt es ein aber)

Alles ist dynamisch - d.h., ich weiß doch jetzt noch nicht, wie das später gefüllt wird. Was meine ich:
naja, die Abschnitte können ja frei gewählt werden, also eine Seite mit der Reihenfolge

--- Code: ---2-spalt,
Block L, Block R,
Block L, Block R,
2-Spalt,
2-Spalt,
Block L, Block R
--- End code ---

Die nächste Seite sieht dann so aus:

--- Code: ---Block L, Block R,
Block L, Block R,
Block L, Block R
2-spalt
--- End code ---

Es soll ja eben möglichst felxibel sein.

Siehst Du (oder jmd. anderes), die Contentblöcke sozusagen "einzeln" abzufragen - das würde ja helfen, dann könnte man locker mit PHP eine Schleife bauen.


Trotzdem Danke für die Anregung

dbs:
Habs ähnlich. Oben in der index
--- Code: ---ob_start(); page_content(1); $main       = ob_get_clean();
ob_start(); page_content(2); $right      = ob_get_clean();
ob_start(); page_content(3); $left       = ob_get_clean();
ob_start(); page_content(4); $fulltop    = ob_get_clean();
ob_start(); page_content(5); $fullbottom = ob_get_clean();
ob_start(); page_content(6); $fullwidth = ob_get_clean();
--- End code ---

und unten flexibel

--- Code: ---<?php // Top
    if ($fulltop) { ?>
            <div id="top" class="bg-1 text-center"><?php echo $fulltop; ?></div>
    <?php }    ?>
   
    <div class="container">

        <div class="row">
           
            <?php if ($right && $main && $left) { ?>
                <div id="left" class="col-md-3"><?php echo $left ?></div>
                <div id="main" class="col-md-6"><?php echo $main ?></div>
                <div id="right" class="col-md-3"><?php echo $right ?></div>
            <?php } elseif ($right && $main) { ?>
                <div id="main" class="col-md-9"><?php echo $main ?></div>
                <div id="right" class="col-md-3"><?php echo $right ?></div>
            <?php } elseif ($left && $main) { ?>
                <div id="left" class="col-md-3"><?php echo $left ?></div>
                <div id="main" class="col-md-9"><?php echo $main ?></div>
            <?php } elseif ($main) { ?>
                <div id="main" class="col-sm-12"><?php echo $main ?></div>
            <?php } ?>
            <div style="clear:both;"></div>
           
       
            <?php // Bottom
                if ($fullbottom) { ?><div id="bottom" class="col-md-12"><?php echo $fullbottom; ?></div>
            <?php } ?>
           
        </div>

    </div>
--- End code ---

Da sind zwar Klassen von Bootstrap drin, aber das Prinzip sollte klar sein.

edit: hier die original Anleitung von Ruud: https://wbhelp.org/tips-and-tricks/2014/multiple-columns-in-a-template/

jacobi22:

--- Quote from: kuerbis42 on February 26, 2026, 07:20:05 PM ---@Jacobi22:

Alles ist dynamisch - d.h., ich weiß doch jetzt noch nicht, wie das später gefüllt wird. Was meine ich:
naja, die Abschnitte können ja frei gewählt werden, also eine Seite mit der Reihenfolge
....

Siehst Du (oder jmd. anderes), die Contentblöcke sozusagen "einzeln" abzufragen - das würde ja helfen, dann könnte man locker mit PHP eine Schleife bauen.


--- End quote ---

genau das machen wir doch, dbs und ich
Für jeden definierten Block brauchst du eine Abfrage, ob Inhalt enthalten ist, bei mir mit

--- Code: ---if(trim($page_RightBlock)!=''
--- End code ---
trim entfernt mögliche Leerzeichen, der Rest (!='') heißt: ist nicht leer. Diese Abfragen kann man dann auch kombinieren, wenn Block L und Block R Inhalte haben, mach zwei Spalten, hat nur einer davon Inhalt, mach nur eine Spalte usw.

Wichtig ist aber Ordnung dabei in der Sectionverwaltung. Was wie wo angezeigt wird, bestimmst du allein. Es spielt auch keine Rolle, ob Seite 1 nur einen Block hat und Seite 2 dann drei oder fünf oder ob du Blöcke mehrfach verwendest pro Seite

Navigation

[0] Message Index

[#] Next page

Go to full version