toc

General questions about CMSimple
ustalo
Posts: 164
Joined: Mon Aug 16, 2010 7:42 am
Location: Russia
Contact:

Re: toc

Post by ustalo » Sat Aug 15, 2020 5:36 pm

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
Aleksei

ustalo
Posts: 164
Joined: Mon Aug 16, 2010 7:42 am
Location: Russia
Contact:

Re: toc

Post by ustalo » Sun Aug 16, 2020 5:21 am

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>
Aleksei

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: toc

Post by frase » Sun Aug 16, 2020 7:49 am

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.

cmb
Posts: 14225
Joined: Tue Jun 21, 2011 11:04 am
Location: Bingen, RLP, DE
Contact:

Re: toc

Post by cmb » Sun Aug 23, 2020 9:27 pm

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

Christoph M. Becker – Plugins for CMSimple_XH

frase
Posts: 5085
Joined: Thu Apr 21, 2016 6:32 am
Location: Saxony
Contact:

Re: toc

Post by frase » Mon Aug 24, 2020 3:59 am

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.

Post Reply