Page 3 of 3

Re: toc

Posted: Sat Aug 15, 2020 5:36 pm
by ustalo
But he may not always want the full sitemap, he just wants the one of the current branch.
I suppose. So an open submenu to the last level.

right

Re: toc

Posted: Sun Aug 16, 2020 5:21 am
by ustalo
I did not get with this code... is it two part - css and php for content?

content

<?php
function get_decendants(XH\Pages $pages, $page)
{
$all = $children = $pages->children($page);
foreach ($children as $child) {
$grandchildren = get_decendants($pages, $child);
$all = array_merge($all, $grandchildren);
}
return $all;
}
function open_submenu()
{
global $s;

if ($s < 0) return '';
$pages = new XH\Pages;
$descendants = array_unique(get_decendants($pages, $s), SORT_NUMERIC);
sort($descendants, SORT_NUMERIC);
return li($descendants, 'submenu');
}
?>
<nav><?=open_submenu()?></nav>

Re: toc

Posted: Sun Aug 16, 2020 7:49 am
by frase
The first part <?php... ?> can be inserted in the template.htm right at the top directly after <!DOCTYPE html>.
Or you can insert this part into the userfuncs.php.
The second part <nav><?=open_submenu()?></nav> you place in the template.htm, exactly at the place where the menu should appear.
The output of the menu (the list) has to be designed according to your needs with CSS.

Re: toc

Posted: Sun Aug 23, 2020 9:27 pm
by cmb
frase wrote:
Sat Aug 15, 2020 7:01 am
open_submenu() zeigt alle Unter- und Unter-Seiten an.
Ich benötige hingegen immer den gesamten Menüzweig (ab L2) unterhalb einer L1-Seite, egal ob man sich auf einer L2, L3 ... Seite befindet.
Außerdem muss die aktuell geöffnete Seite im Menü mindestens markiert sein, damit ersichtlich ist wo man sich in dem Zweig befindet.
Geplant war, alle Unterseiten >L2 einzuklappen und nur den aktuellen Zweig zu öffnen. Die anderen müssen aber vorhanden sein, damit man sie per Klick öffnen (aufklappen) kann.

Das soll also ähnlich funktionieren, wie das Menü in fhs_adminmenu - nur eben mit allen Menüpunkten unterhalb einer L1-Seite. Im Idealfall sollte eben auch der aktuelle Zweig bei Aufruf geöffnet sein und die aktuelle Seite hervorgehoben.
Falls noch relevant, etwa:

Code: Select all

<?php
function get_descendants(XH\Pages $pages, $page)
{
    $all = $children = $pages->children($page);
    foreach ($children as $child) {
        $grandchildren = get_descendants($pages, $child);
        $all = array_merge($all, $grandchildren);
    }
    sort($all, SORT_NUMERIC);
    return $all;
}

function l2menuof($page)
{
    $pages = new XH\Pages;
    switch ((int) $pages->level($page)) {
        case 1:
            return '';
        case 2:
            $l2page = $page;
            break;
        default:
            $ancestors = $pages->getAncestorsOf($page);
            foreach ($ancestors as $ancestor) {
                if ($pages->level($ancestor) == 2) {
                    $l2page = $ancestor;
                    break;
                }
            }
        }
        $descendants = get_descendants($pages, $l2page);
        return li($descendants, 'submenu');
}
?>
<?=l2menuof($s)?>


Re: toc

Posted: Mon Aug 24, 2020 3:59 am
by frase
cmb wrote:
Sun Aug 23, 2020 9:27 pm
Falls noch relevant, etwa: ...
Da arbeitet doch jemand sonntags in der Nacht die liegengebliebenen Dinge ab ... :P

Im Ernst, zwei Dinge sind zu vermelden:
1.
Dein letzter Code müsste noch weiter verfeinert werden, weil er noch "nicht ganz" das bringt, was ich erträumte. Das liegt aber wohl eher an meiner verquasten Fragestellung und nicht am Code.
2.
Zwischenzeitlich ist die Entscheidung gefallen, dass im konkreten Projekt auch <?=toc(2,9)?> völlig ausreichend ist und sich alles XH-typisch verhält. (übrigens weiß ich gar nicht, ob die "9" darin richtig ist - aber es funktioniert)

Dennoch bin ich dir sehr dankbar für deine Mühe.
Ich kann im Moment aus Zeitgründen nicht weiter damit experimentieren, bin mir aber sicher, dass ich später noch einmal darauf zurückkommen werde.