BC 1.3 Frage zu Menü Syntax

Hier können Tipps und Tricks rund um die Verwendung von BlackCat CMS gepostet werden.
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von shadowcat »

Ich weiß jetzt nicht ob Du Bootstrap 3 oder 4 benutzt, für 3 versuch mal:

{cat_fullmenu(1, top_ul_class: "navbar-nav mr-auto", ul_class: "dropdown-menu", li_class: "nav-item", link_class: "nav-link", current: "active", child: "dropdown", first: "", last: "" )}

Wenn Du bei einer mehrstufigen Hierarchie auf einer Unterseite bist, werden die übergeordneten Seiten noch mit einer Klasse "trail_item" versehen. Falls Dich das stört, kannst Du die auch noch abschalten:

trail_li_class: ""

first, last, trail_li_class wären hilfreich, wenn Du jeweils die erste oder letzte Seite auf einer Ebene anders gestalten möchtest, oder eben den "Pfad" bei einer Unterseite. Ansonsten hast Du bei einem mehrstufigen Menü in der Navbar das Problem, dass die Root-Seite, die zu der Unterseite gehört, nicht als "aktiv" markiert ist. Mit der trail_li_class kannst Du das ändern.
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
DG70
Beiträge: 174
Registriert: Fr 5. Dez 2014, 12:59

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von DG70 »

Erstmal vielen Dank für die immer wieder schnelle Hilfe von Euch :daumen:

Ich benutze Bootstrap 4, habe dafür eine eigene lib_bootstrap_4 "gebaut". Allerdings nicht ganz so umfangreich wie Eure originale lib_bootstrap.
Habe nur die Bootstrap 4.4.1 Dateien und die dazugehörigen Bootswatch Varianten (es gibt ein paar Neue und 2 Namensänderungen) eingebunden.
{cat_fullmenu(1, top_ul_class: "navbar-nav mr-auto", ul_class: "dropdown-menu", li_class: "nav-item", link_class: "nav-link", current: "active", child: "dropdown", first: "", last: "" )}
Grundsätzlich geht es so, nur beim ersten Aufruf ist kein Menüeintrag als aktiv gesetzt. Nach dem ersten Menü Aufruf ist alles normal.
Beim SM2 ist die Startseite gleich "aktiv" im Menü sichtbar.
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von shadowcat »

Hmm, mit erstem Aufruf meinst Du vermutlich die Root-Seite? Vielleicht wird die vom Page Helper nicht korrekt als "current" markiert. Schau ich nochmal.
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von shadowcat »

Tausch mal die Datei ./framework/CAT/Helper/Page.php mit der angehängten aus.
Dateianhänge
Page.zip
(22.03 KiB) 167-mal heruntergeladen
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
DG70
Beiträge: 174
Registriert: Fr 5. Dez 2014, 12:59

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von DG70 »

Das sollte es gewesen sein ... nun sieht es gut aus :daumen:

HTML:
2020-03-26 19_49_44-Window.png
2020-03-26 19_49_44-Window.png (1.12 KiB) 4751 mal betrachtet

Die Entwicklertools zeigen es auch:
2020-03-26 19_48_55-Window.png
2020-03-26 19_48_55-Window.png (7.83 KiB) 4751 mal betrachtet


DANKE !! für Deine Hilfe !!
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von shadowcat »

Danke für Deine Frage! So kann ich das gleich noch als Korrektur in das nächste Release mit aufnehmen. :daumen:
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
DG70
Beiträge: 174
Registriert: Fr 5. Dez 2014, 12:59

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von DG70 »

wenn man so helfen kann ... immer gerne. :D

Eine Bitte habe ich dann noch. Wenn es eine vollständige Liste der catMenü Optionen gibt, kannst du die mal veröffentlichen?
Mir waren einige Möglichkeiten nicht bekannt.
Es ist im Moment nicht zwingend, aber ich würde gerne noch das hier realisieren:

In der Bootstrap Navbar wird beim Dropdopwn (auf Unterseiten) eine DIV Klasse (dropdown-menu) eingeschoben:

Code: Alles auswählen

<li class="nav-item dropdown">
        <a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
        <div class="dropdown-menu" aria-labelledby="navbarDropdown">
          <a class="dropdown-item" href="#">Action</a>
          <a class="dropdown-item" href="#">Another action</a>
          <div class="dropdown-divider"></div>
          <a class="dropdown-item" href="#">Something else here</a>
        </div>
      </li>
Für SM2 ist das problematisch, bzw. wird wohl nicht sauber unterstützt (laut Google-Suche).
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von shadowcat »

Ich war da zuerst den Weg gegangen, für die Parameter, die wbList hat, einen Extrakt für die Menüs zu machen, wegen der Namen und so. Irgendwann habe ich das dann aber entnervt so erweitert, dass man einfach auch die Original-Parameter von wbList nutzen kann. :lol:

Code: Alles auswählen

                // ***** keys in the input array *****
                '__children_key'        => 'children',
                '__current_key'         => 'current',
                '__hidden_key'          => 'hidden',
                '__href_key'            => 'href',
                '__id_key'              => 'id',
                '__is_open_key'         => 'is_open',
                '__level_key'           => 'level',
                '__more_info_key'       => '',
                '__nodes_cookie_name'   => NULL,
                '__parent_key'          => 'parent',
                '__title_key'           => 'title',
                '__trail_key'           => 'is_in_trail',
                // ***** output templates *****
                'top_list_open'         => '<ul id="%%id%%" class="%%class%%">',
                'top_list_close'        => '</ul>',
                'list_open'             => '<ul id="%%id%%" class="%%class%%">',
                'list_close'            => '</ul>',
                'item_open'             => '<li id="%%id%%" class="%%class%%{{lastcss}}">',
                'item_close'            => '</li>',
                'item'                  => '%%text%%',
                'select_open'           => '<select name="%%id%%" id="%%id%%" class="%%">',
                'select_close'          => '</select>',
                'select_option'         => '<option class="%%" value="%%value%%"%%selected%%>%%text%%</option>',
                'more_info'             => '<span class="more_info">%%</span>',
                'href'                  => '<a href="%%href%%"%%class%%>%%text%%</a>',
                // ***** global options *****
                'create_level_css'      => true,
                'create_li_id'          => false,
                'space'                 => '    ',
                'max_recursion'         => 15,
                'maxlevel'              => 999,
                // ***** css options *****
                'css_prefix'            => '',

                'ul_id_prefix'          => 'ul_',
                'top_ul_class'          => 'list',
                'ul_class'              => 'sublist',

                'li_class'              => 'item',
                'first_li_class'        => 'first_item',
                'last_li_class'         => 'last_item',
                'current_li_class'      => 'current_item',
                'has_child_li_class'    => 'has_child',
                'is_open_li_class'      => 'is_open',
                'is_closed_li_class'    => 'is_closed',
                'trail_li_class'        => 'trail_item',
                'select_class'          => '',
                'li_id_prefix'          => 'li_',

                'link_class'            => '',
Die Optionen mit den Unterstrichen wirst Du nicht brauchen, interessant können noch die "output templates" und eben die "css options" sein. Wobei ich nicht sicher bin, ob ich schon mal probiert habe, bei catfullmenu() ein Template zu übergeben...

Ich hoffe, die Namen der Optionen sind einigermaßen selbsterklärend, ansonsten frag. :D

Das mit dem Einschieben der DIV-Klasse in Bootstrap ist total doof, daher hab ich alternative Lösungen ergooglet, zumal Bootstrap nur zwei Menüebenen unterstützt und ich mehr wollte. Ich könnte mir aber vorstellen, dass man das mit den Templates hinkriegt. Ich teste das mal.
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von shadowcat »

Hm, nee, das wird nix. Ich habe nie vorgesehen, dass sich innerhalb so einer Liste das Markup so grundlegend ändert. Also auf Level 1 ist es noch eine <ul> und dann im Level 2 nicht mehr... Also entweder paßt Du Dir das so an, dass es auch als korrekt verschachtelte Liste funktioniert - wie gesagt, Beispiele findet man per Suchmaschine -, oder Du müßtest statt des catMenü Markups mit einem passenden Dwoo-Markup arbeiten. Irgendwie hab ich das Gefühl, das schon mal irgendwo gemacht zu haben... :think:
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Benutzeravatar
shadowcat
Administrator
Beiträge: 5283
Registriert: Di 5. Feb 2013, 10:36
Kontaktdaten:

Re: BC 1.3 Frage zu Menü Syntax

Beitrag von shadowcat »

So, hier mal als Basis:

Code: Alles auswählen

<?php $this->scope["pages"] = CAT_Helper_Page::getPages(); ?>

{template pagetree pages}
  {foreach $pages item}
    {if $item.level==0}
    <li class="nav-item{if $item.current} active{/if}{if $item.children} dropdown{/if}">
      <a class="nav-link{if $item.children} dropdown-toggle" id="navbarDropdown" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"{else}"{/if} href="{$item.href}">{$item.menu_title}{if $item.current} <span class="sr-only">(current)</span>{/if}</a>
      {if $item.children}
      <div class="dropdown-menu" aria-labelledby="navbarDropdown">
          {foreach $pages subitem}{if $subitem.parent==$item.page_id}
          <a class="dropdown-item" href="{$subitem.href}">{$subitem.menu_title}</a>
          {/if}{/foreach}
      </div>
      {/if}
    </li>
    {/if}
  {/foreach}
{/template}

<nav class="navbar navbar-expand-lg navbar-light bg-light">
  <a class="navbar-brand" href="#">Navbar</a>
  <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
    <span class="navbar-toggler-icon"></span>
  </button>

  <div class="collapse navbar-collapse" id="navbarSupportedContent">
    <ul class="navbar-nav mr-auto">
{pagetree $pages}
    </ul>
  </div>
</nav>
Braucht eventuell noch etwas Feinschliff. ;) Speicher Dir das als nav.tpl und mach {include 'nav.tpl'}, dann kannst Du es prima von einem Template ins nächste übernehmen.

Geht übrigens dann nur mit 2 Menüleveln, aber das ist halt Bootstrap.
Dateianhänge
2020-03-27 14_50_03-BlackCat CMS - Unterseite 2.png
2020-03-27 14_50_03-BlackCat CMS - Unterseite 2.png (6.59 KiB) 4734 mal betrachtet
My software never has bugs, it just develops random features.
If it’s not broken, keep fixing it until it is
Antworten