WebsiteBaker Logo
  • *
  • Templates
  • Help
  • Add-ons
  • Download
  • Home
*
Welcome, Guest. Please login or register.

Login with username, password and session length
 

News


WebsiteBaker 2.13.9 R25 is now available!


R.I.P Dietmar (luisehahne) and thank you for all your valuable work for WB
https://forum.websitebaker.org/index.php/topic,32355.0.html


* Support WebsiteBaker

Your donations will help to:

  • Pay for our dedicated server
  • Pay for domain registration
  • and much more!

You can donate by clicking on the button below.


  • Home
  • Help
  • Search
  • Login
  • Register

  • WebsiteBaker Community Forum »
  • Recent Posts

Recent Posts

Pages: 1 2 [3] 4 5 ... 10
21
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by jacobi22 on February 28, 2026, 10:14:43 AM »
Lese ich deinen Text, hab ich meine Vermutung...

Quote
[0] => Array ( [1] =>Block 1, 2 Spalten )
[1] => Array ( [2] =>Block 2 (Spalte links) )
[2] => Array ( [3] =>Block 2 (Spalte rechts) )

[3] => Array ( [1] =>Block 4 (2 Spalten) )
[4] => Array ( [2] =>noch einmal linke spalte ) )

das geht nicht, oder besser: es wird nicht das Ergebnis liefern, das du erwartest. Jeder Block bzw jeder Funktionsaufruf (wie auch immer der gestaltet ist, siehe Code von dbs im Vergleich zu meinem Code oben) darf im Template nur einmal erscheinen.

Wenn Zwei-spaltig, dann müssen dies auch zwei Blöcke bzw zwei Sectionen sein, bei 3 -spaltig drei Sektionen usw. Über diverse Schalter im PHP des Templates kann man dann auf Inhalt prüfen und mit if/else schalten, ob auf zwei Spalten auch nur eine wird, wenn da kein Inhalt ist.

dbs und Ruud mach das über die Abfrage, ob der Bezeichner existiert. Ich prüfe auf Inhalt und entferne mögliche Leerzeichen, die man mal schnell im Wysiwyg eingetippt hat und die dann Content erzeugen. Die direkte Benutzung der Bezeichner ohne vorherige Definition wird mit neueren PHP irgendwann zu Warnings führen, wenn mal eine Section nicht vorhanden, nicht definiert wurde. Sicherer wäre da, diese erst mit false zu definieren.

Quote

$fulltop = false;
ob_start(); page_content(1); $main       = ob_get_clean();

if ($fulltop) { ....
Ist aber jetzt erstmal nebensächlich und für dein Problem nicht von Bedeutung


22
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by jacobi22 on February 28, 2026, 09:59:27 AM »
Bin mir aktuell nicht sicher, worauf du hinaus willst oder ob vielleicht andere Vorstellungen bzw Erwartungen vorhanden sind

ein paar Grundsätze zur Klärung vorab. Mag sein, ist dir bekannt, aber bitte nicht gleich mit den Augen rollen  ;-)

- per Definition ist jede Section ein einzelner Block, unabhängig vom Typ und Inhalt. Zum besserem Verständnis gehen wir davon aus, das es sich um einfachen Fließtext in Wysiwyg-Modulen handelt. Wenn wir die Möglichkeiten jedes einzelnen Modul, den jeweiligen Content mehrspaltig darstellen zu können, außer Acht lassen, ist es pro Block nicht möglich, diesen mehrspaltig darstellen zu können.
- in der index.php deines Frontend-Templates wird die Funktion page_content() aufgerufen. Der Aufruf ist mit oder ohne eine Zahl möglich. Wird keine Blocknummer übermittelt, ist es immer Block 1. Das regelt diese Zeile, $Block ist der numerische Wert im Funktionsaufruf, also z.b. page_content(3) )
Code: [Select]
$block = (($block < 1) ? 1 : $block);Du mußt also sicherstellen, das du nicht page_content() und page_content(1) gemeinsam im Template verwendest, sonst können Abschnitte doppelt dargestellt werden.

Der if-Block in der page_content-Funktion ab z.228 - 318
Er ist zuständig für alle Blöcke (bzw Sectionen) mit Übergabe eines numerischen Wertes. Der else-Block darunter regelt die Blöcke ohne solche numerische Übergabe, also page_content() statt page_content(3) und ordnet alle Blöcke ohne Ziffer den Block #1 zu

Im $sSqlSet an Z. 232 werden die Daten festgelegt, die benötigt werden. Ein JOIN zur pages-Tabelle stellt dann sicher, das nur Blöcke auf sichtbaren Seiten eingelesen werden.
Nach Definition der SQL-Abfrage  zuerst ein Fallback für den Fall, das keine Sectionen geunden wurden (Z 248 - 251)

In Z 271 - 275 wird die Sichtbarkeit des jeweiligen Blockes geprüft
ab Z. 281 wird dann die jeweilige view.php des einzubindenen Modul aufgerufen
ab Z 293 erfolgt dann die Einbindung des Search-Templates aus den WB-Option, für den Fall, das die Suche bemüht wurde

Quote
Die Einträge direkt hinter wysiwyg: hast Du die da "einmontiert"?Weil, ich habe es wirklich getestet: [Mainblock 1] und [Mainblock 2
P.S.: als Tip noch: nutze die Möglichkeit, jeder Section einen eigenen Titel zu geben. Das macht es später einfacher. Dazu in jeder Section oben rechts auf das Zahnrad klicken. Der dort eingegebene Titel erscheint dann auch in der Section-Übersicht (siehe mein Bild oben)

Und noch etwas: Das hier gezeigt Konzept mit dem Page_Content funktioniert seit über 25 Jahren. Nicht nur im UrVater-CMS WebsiteBaker, sondern auch in allen Forks und in abgewandelter Form auch in jedem anderen CMS wie WP, Typo3 usw

Vielleicht zeigst du mal dein Template, gern auch per Mail, wenn du es nicht öffentlich machen möchtest
entweder privat an uwe@jacobi22.com
oder offiziel an board@WebsiteBaker.org bzw support@WebsiteBaker.org

23
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by kuerbis42 on February 28, 2026, 09:50:59 AM »
Moin Jacobi, Frage dazu:
Quote from: jacobi22 on February 27, 2026, 01:26:13 AM

Die Einträge direkt hinter wysiwyg: hast Du die da "einmontiert"?Weil, ich habe es wirklich getestet: [Mainblock 1] und [Mainblock 2] werden gesamt ausgegeben, wenn Du das testest, dann müsstest Du den Inhalt dieser beiden Abschnitte auch direkt untereinander haben.

Ich habe mir eine neue Funktion page_content2() gebaut - die gibt mir jetzt alle Blöcke einer Seite zurück - genau wie das Original (page_content()) alles aufbröselt, die Rückgabe
ist aber ein Array:
Code: [Select]
Array (
[0] => Array ( [1] =>Block 1, 2 Spalten )
[1] => Array ( [2] =>Block 2 (Spalte links) )
[2] => Array ( [3] =>Block 2 (Spalte rechts) )
[3] => Array ( [1] =>Block 4 (2 Spalten) )
[4] => Array ( [2] =>noch einmal linke spalte ) )
Damit habe ich die Reihenfolge gesichert und weiß, in welchen Block der Inhalt gehört.
24
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by kuerbis42 on February 27, 2026, 06:43:12 PM »
Ich will da erstmal antworten, aber ich prüfe das noch.
Was mir aufgefallen ist, ist folgendes:
Ich mache in den Abschnitten die Reihenfolge wie im 1. Bild zusehen ist,
bei der Ausgabe (2. Bild) erscheinen die "Blöcke Typ 1" (hier 2spalten) direkt nacheinander.
Im WYSIWYG-Abschnitt 1 steht "Block 1, 2 Spalten"Im WYSIWYG-Abschnitt 2 steht "Block 2, Spalte links"Im WYSIWYG-Abschnitt 3 steht "Block 3, Spalte rechts"Im WYSIWYG-Abschnitt 4 steht "Block 4, 2 Spalten"(Impressum, Datenschutz, AGB ... ist ja noch Test  :) )
Code: [Select]
  <!-- CONTENT -->
  <main class="content-grid">
<?php if (trim($pageContent2spalten) != &#39;&#39;) { ?>
                        <section class="block block-1"><?= $pageContent2spalten; ?></section>
<?php } ?>
<?php if (trim($pageContentlinkespalte) != &#39;&#39;) { ?>
                        <section class="block block-2"><?= $pageContentlinkespalte; ?></section>
<?php } ?>
<?php if (trim($pageContentrechtespalte) != &#39;&#39;) { ?>
                        <section class="block block-3"><?= $pageContentrechtespalte; ?></section>
<?php } ?>
 </main>

....
</div>
 <?php /* nur zum Test */
 
page_content(1);
?>
Ich habe mir auf die Funktion page_content(x) angesehen und analysiert:
die SQL-Abfrage, die dort gemacht wird läuft via while(fetch_assoc) über alle gefundenen Einträge mit Block x (hier 1 == 2spalten) und gibt die dann aus:
frontend.functions.php (ab Zeile 161, hier stark eingekürzt ink.. "wichtigen" Textmarkern (nicht lauffähig so))
Code: [Select]

if (!is_callable('page_content')) {
    ...


        function page_content(int $block = 1) {
            // Get outside objects
            global $TEXT,$MENU,$HEADING,$MESSAGE; // backwards compability
//            static $iSections=1;
            static $i=-1;
..... Zeile 228:
                $block = (($block < 1) ? 1 : $block);
                if (!\defined('PAGE_CONTENT')  || (($block !== 1))){
                    $page_id = (int)(isset($oApp->page_id) ? $oApp->page_id : PAGE_ID);
                    $sBackLink = $oApp->default_link;
 SQL!!!!         $sSqlSet = '
                    SELECT `s`.*
                    ,`p`.`viewing_groups`
                    ,`p`.`visibility`
                    ,`p`.`menu_title`
                    ,`p`.`link`
                    ,`s`.`block`
                    FROM `'.TABLE_PREFIX.'sections` `s`
                    INNER JOIN `'.TABLE_PREFIX.'pages` `p`
                    ON `p`.`page_id`=`s`.`page_id`
                    WHERE `s`.`page_id` = '.( int)$page_id.'
                      AND ('.$iNow.' BETWEEN `s`.`publ_start` AND `s`.`publ_end`)
                      AND `s`.`active` = 1
                      AND `p`.`visibility` NOT IN (\'deleted\',\'none\')
                      AND `s`.`block`='.$block.'
                    ORDER BY `s`.`position`';
.... Zeile 259


                        while(!is_null($aSection = $oSections->fetchAssoc())) {
.....Zeile 305
                                if (!empty($sContent) && $isActive) {
                                    $bPrintAnchor = ($bAnchor && ($sSectionIdPrefix == 'none')||($sSectionIdPrefix != 'none'));
                                    $sAnchor = "\n".'<div id="'.$sSectionIdPrefix.$section_id.'" class="section m-'.$module.' '.$sAttribute.'" >';
                                    $sBeforeContent = ($bPrintAnchor ? $sAnchor : '');
                                    $sAfterContent  = ($bPrintAnchor ? '</div><!-- INFO '.$module.$section_id.' -->' : '');
HIER!!!!                         echo $sContent = ltrim($sBeforeContent."\n".$sContent."\n".$sAfterContent."\n");
                                }
                            }
//  no more sections found, so break e.g from multiselection
                            if ($iSections == 0){break;}
                        } // end while
                    }
.....

        } //  end function page_content
    }

Oben bei dem HIER!!!! passiert es! Es wird einfach der Inhalt ausgegeben! Die SQL-Abfrage (228) ergibt je nach Fall 1,2 oder 3 oder mehr Zeilen ( AND `s`.`block`='.$block.').
Durch die While-Schleife werden dann die Inhalte der Blöcke aus der DB geholt und ausgegeben.

Aber ich prüfe Eure Vorschläge noch einmal intensiv.

25
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by jacobi22 on February 27, 2026, 01:26:13 AM »
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.


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: [Select]
if(trim($page_RightBlock)!=''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

26
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by dbs on February 26, 2026, 08:56:45 PM »
Habs ähnlich. Oben in der index
Code: [Select]
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();

und unten flexibel
Code: [Select]
<?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>

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/
27
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by kuerbis42 on February 26, 2026, 07:20:05 PM »
@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: [Select]
2-spalt,
Block L, Block R,
Block L, Block R,
2-Spalt,
2-Spalt,
Block L, Block R

Die nächste Seite sieht dann so aus:
Code: [Select]
Block L, Block R,
Block L, Block R,
Block L, Block R
2-spalt

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
28
General Help & Support / Re: Content-Blöcke, eine kleine Herausforderung
« Last post by jacobi22 on February 26, 2026, 04:30:50 PM »
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: [Select]
// 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';

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: [Select]
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();

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
    }
    ?>

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
        }
    ?>

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)!=''){ ?>....

bzw so für zwei Spalten
Quote
<?php if(trim($contact_leftBlock)!='' || trim($contact_rightBlock)!='' ){ ?>....
29
General Help & Support / Content-Blöcke, eine kleine Herausforderung
« Last post by kuerbis42 on February 26, 2026, 04:02:33 PM »
Hallöchen zusammen,

ich habe gehofft, das mir die Blöcke bei folgender Idee (Grid-Layout) helfen:
gewollt ist also das hier:
Code: [Select]
+-----------------------------+
|    (1) 2-spalten Block      |
+-----------------------------+
| (2) Block 2  | (3) Block 3  |
+-----------------------------+
| (4)     2-spalten Block     |
+-----------------------------+
|  (5) Block 2 | (6)  Block 3 |
+-----------------------------+
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: [Select]
+-----------------------------+
|    (1) 2-spalten Block      |
|    (4) 2-spalten Block      |
+-----------------------------+
| (2) Block 2  | (3) Block 3  |
| (5) Block 2  | (6)  Block 3 |
+-----------------------------+

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
30
Hilfe & Support (deutsch) / Re: Fehlermeldung bei/nach Update auf WB-Version 2.13.9 r25
« Last post by sternchen8875 on February 26, 2026, 01:42:19 PM »
Danke für die Info!
Pages: 1 2 [3] 4 5 ... 10
  • SMF 2.0.19 | SMF © 2017, Simple Machines
  • XHTML
  • RSS
  • WAP2