ConPresso4 Community

Fragen, Antworten, Diskussionen rund um das Content Management System ConPresso

 
Ebenenfrage

 
Neue Antwort erstellen    ConPresso4 Community Foren-Übersicht -> Modul Menu (ConPresso 4)
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
hscha
ConPresso-Experte


Anmeldungsdatum: 22.02.2006
Beiträge: 509
Wohnort: Berlin

BeitragVerfasst am: 06.11.2019 19:13    Titel: Ebenenfrage Antworten mit Zitat

Hallo Markus,
wie schaffe ich es, einen Menübaum mit 2 Ebenen auszugeben? Die oberste Ebene ist kein Problem. Ich habe heute die neue Version mod_menu 4b installiert.
Template für ein horizontales Menü mit Dropdown-Untermenüs

Code:
<!-- START_MOD_MENU_NAVIGATION -->
<nav class="reframe">
 <div class="topnav" id="myTopnav">
  <a href="index.html">Home</a>   
  <div class="dropdown">
<!-- START_NAVITEM -->
<a href="### NAV_LINK ###" class="dropbtn">☰### NAV_TEXT ###</a>
<!-- ENDE_NAVITEM -->
<a href="javascript:void(0); " class="icon" onclick="myFunction()">☰ </a>
<div class="dropdown"><div class="dropbtn"><form class="suche" method="get" name="suche" action="https://paula-fuerst-gemeinschaftsschule.de/cms/mod_search/index.php?rubric=suche" target="_self" ><input class="suche" type="hidden" name="action" value="search" />
<span>? </span>
<input class="suche" type="hidden" name="rubric" value="suche" /><input class="suche" type="text" name="q" size="10" value="" /></form>
</div>
</div>
</div>
</nav>
<!-- ENDE_MOD_MENU_NAVIGATION --><!-- START_MOD_MENU_NAVIGATION -->
<nav class="reframe">
 <div class="topnav" id="myTopnav">
  <a href="index.html">Home</a>   
  <div class="dropdown">
<!-- START_NAVITEM -->
<a href="### NAV_LINK ###" class="dropbtn">☰### NAV_TEXT ###</a>
<!-- ENDE_NAVITEM -->
<a href="javascript:void(0); " class="icon" onclick="myFunction()">☰ </a>
<div class="dropdown"><div class="dropbtn"><form class="suche" method="get" name="suche" action="https://paula-fuerst-gemeinschaftsschule.de/cms/mod_search/index.php?rubric=suche" target="_self" ><input class="suche" type="hidden" name="action" value="search" />
<span>? </span>
<input class="suche" type="hidden" name="rubric" value="suche" /><input class="suche" type="text" name="q" size="10" value="" /></form>
</div>
</div>
</div>
</nav>
<!-- ENDE_MOD_MENU_NAVIGATION -->

Bei Levelwechsel steht ebenfalls <div class="dropdown"> bzw. </div>
Die Stylesheets sind zentral abgelegt.
Kann ich die Anzahl der auszugebenden Ebenen in Seitentemplates übergeben?
Grüße von Horst
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7070

BeitragVerfasst am: 06.11.2019 21:02    Titel: Antworten mit Zitat

Ich schreibe das jetzt aus reiner Erinnerung, also ungetestet.

Das Konzept der getrennten Navigationen bestand eigentlich darin entweder eine vertikale Navigation mit mehreren Ebenen zu haben oder davon die erste Ebene in eine horizontale Hauptnavigation auszulagern.

Will man eine einzelne Navigation mit mehreren Ebenen, dann wählt man das Template für die vertikale Navigation, gestaltet sie aber so, dass sie horizontal ausgegeben wird.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Experte


Anmeldungsdatum: 22.02.2006
Beiträge: 509
Wohnort: Berlin

BeitragVerfasst am: 07.11.2019 10:31    Titel: Antworten mit Zitat

Danke Markus!
Mein Problem ist eher, dass ich über das Seitentemplate mit <!-- function: ModMenuHorizontal; --> ConPresso nicht dazu bewegen kann, den Menü-Baum komplett oder wahlweise mit Ebene 1 und 2 ausgeben kann. Ich kriege immer nur die 1. Ebene zu sehen. Das ist unabhängig von mod_menu - glaube ich zumindest...
Grüße von Horst
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7070

BeitragVerfasst am: 07.11.2019 11:02    Titel: Antworten mit Zitat

Mit <!-- function: ModMenuHorizontal; --> (das ist die horizontale Navigation) kannst Du KEINE komplette Navigation ausgeben und auch keine weiteren Ebenen, da diese IMMER nur die ERSTE Ebene ausgibt.

Nur die vertikale Navigation kann MEHR als die erste Ebene ausgeben.

Willst Du also eine Navigation mit MEHREREN Ebenen über nur einen Platzhalter ausgeben, dann MUSST Du deinen Code in das Feld für die vertikale Navigation einfügen, als Typ "Nur vertikales Menü ohne kolabierende Einträge" auswählen und den Platzhalter <!-- function: ModMenuVertikal; --> im Seitentemplate verwenden.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Experte


Anmeldungsdatum: 22.02.2006
Beiträge: 509
Wohnort: Berlin

BeitragVerfasst am: 07.11.2019 11:52    Titel: Antworten mit Zitat

Danke, Markus!
Nun bin ich schon eine Weile mit trial&error damit beschäftigt, das wie oben eingestellte Modul zur Ausgabe folgenden Codes zu bewegen:
Code:
<div class="dropdown">
    <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=unterricht" class="dropbtn">☰ Alltag</a>
    <div class="dropdown-content">
      <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=klassen">Klassen</a>
      <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/detail.php?rubric=unterricht&nr=10250">Stunden- und Pausenzeiten</a>
      <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=mensa">Speiseplan</a>     
      <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=ssp">SchulSozialPädagogik</a>
      <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=ags">AGs</a>            <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=btr">Ergänzende Betreuung</a>               
      <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=sov">Soziale Verantwortung</a>       
      <a href="https://paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=faq">FAQs, Dokumente, Hilfe</a>     
    </div>
  </div>

Ich möchte das Menü mit 2 Ebenen ausgeben. Der erste Link ist auf Ebene 1, dann folgen die Unterpunkte auf Ebene 2. Die aus redaktionellen Gründen ebenfalls vorhandene 3. Ebene möchte ich nicht ausgeben. Das obige Beispiel umfasst einen von fünf Hauptmenü-Punkten.
Wie müsste das Template für eine solche Menüausgabe aussehen?

(P.S.: Danke für deine Geduld)
Grüße von Horst
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7070

BeitragVerfasst am: 07.11.2019 14:50    Titel: Antworten mit Zitat

Die 3. Ebene besteht aber nicht aus geschlossenen Rubriken, oder?

Leider kennt mod_menu keine Ausgabe bis zu x-ten Ebene.
Entweder alle oder eben die Über- und Unterpunkte der aktiven Rubrik.

Schade dass die Klassen nicht nach Ebenen nummeriert sind, dann könnte man ### NAV_LEVEL ### benutzen.

Und schade, dass Du keine UL-Liste benutzt, denn dann könnte man printNavigation() leicht anpassen, was ich letztens erst gemacht habe.

Muss mal drüber nachdenken...

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7070

BeitragVerfasst am: 07.11.2019 15:23    Titel: Antworten mit Zitat

BTW bevor man Arbeit reinsteckt:
"dropdown" und "☰" (Hamburger) suggerieren ein Mouse-Over-Dropdown

Wie funktioniert das auf Touch-Geräten, die ja kein Mouse-Over kennen?

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7070

BeitragVerfasst am: 07.11.2019 15:39    Titel: Antworten mit Zitat

Zitat:
Wie müsste das Template für eine solche Menüausgabe aussehen?

Ist IMHO so nicht möglich, ohne ein neues Menü-Modul zu programmieren.
Das Modul ist so gebaut, dass entweder eine Tabellenkonstruktion oder eine Linkliste (ohne weitere Tags) mit Klassen gestaltet wird.

In deinem Code werden aber HTML-Tags zwischen einzelnen Einträgen benötigt, die aber nicht bei jedem Element benötigt werden.

Da wäre es wie erwähnt deutlich einfacher printNavigation() anzupassen.

Ideal wäre es, wenn Du ein Design hättest, bei dem die heute üblichen UL-Listen verwendet werden.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Experte


Anmeldungsdatum: 22.02.2006
Beiträge: 509
Wohnort: Berlin

BeitragVerfasst am: 07.11.2019 19:24    Titel: Antworten mit Zitat

Schau's dir mal an:
https://www.paula-fuerst-gemeinschaftsschule.de/cms/_rubric/index.php?rubric=feigenblatt
Auf Mobiltelefonen funktioniert es per Antippen. Das Menü ist statisch. Ich möchte es halt vom CMS generieren lassen...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7070

BeitragVerfasst am: 07.11.2019 19:52    Titel: Antworten mit Zitat

Du könntest in printnavigation.inc.php die Funktion folgendermaßen anpassen:

Code:
function printNavigation($navi = '', $activeRubric = 0, $levels = 99, $parent = 0, $activeOnly = false, $target = '')
{

    if ($navi=='') $navi = getNavigation();
    if (empty($navi)) return false;

    if ($activeRubric==0) $activeRubric = $GLOBALS['cpoRubric']['id'];

    $actLevels = getActiveElements($navi, $activeRubric);

    $level = 0;
    if ($parent==0) $level = 1; // start with first level

    $ulstart = '<div class="'.($parent==0)?'dropdown':'dropdown-content'.'">';
    $ulend  = '';
    foreach ($navi as $k=>$v) {
        if ($v['level']<$level) $level = 0;            // printed all childs of active parent => clear $level
        if ($v['id']==$parent) $level = $v['level']+1; // found active parent => save $level
        if ($v['level']!=$level) continue;             // not the active level => continue
        if ($v['rubric']['seclevel']==SECLEVEL_CLOSED) {
            if (empty($_SESSION['SID_user']['id'])) continue;
            $db = new DB;
            $db->query("SELECT COUNT(*) FROM ".CPO_RUBRIC_PERMISSION." "
                      ."WHERE rubric_id='".(int)$v['rubric']['id']."' "
                      ."AND usergroups_id='".(int)$_SESSION['SID_user']['usergroups_id']."'");
            $db->next_record();

            if ($db->v('COUNT(*)')<=0 && $_SESSION['SID_user']['admin']!=ROLE_ADMIN) continue;
        }

        echo $ulstart;
        $ulstart = '';
        $ulend = '</div>';

        // build link
        $link = $v['navigation']['externalURL'];

        $_target = $target;
        // externalURLTarget can be used to override the setting
        if (!empty($v['navigation']['externalURLTarget']))
            $_target = $v['navigation']['externalURLTarget'];

        if (isset($v['rubric']['directory']) && $GLOBALS['cpoSystem']['PATH_INFO']) {
            $link = BASE_ABS.$v['rubric']['directory'].'/index.php/'.urlencode($v['rubric']['name']);
        }

        if (isset($v['rubric']['directory']) && !$GLOBALS['cpoSystem']['PATH_INFO']) {
            $link = BASE_ABS.$v['rubric']['directory'].'/index.php?rubric='.urlencode($v['rubric']['name']);
        }

        // mark active list elements
        //if ($actLevels[$level]==$v['id']) echo '<li class="active">';
        //else                           echo '<li>';

        // print caption
        if (empty($link)) echo htmlspecialchars($v['caption'], ENT_COMPAT, 'ISO-8859-15');
        else {
            echo '<a ';
            echo 'href="'.htmlspecialchars($link, ENT_COMPAT, 'ISO-8859-15').'"';
            if ($_target!='') echo ' target="'.htmlspecialchars($_target, ENT_COMPAT, 'ISO-8859-15').'"';
            if ($parent==0) echo ' class="dropbtn"';
            echo '>'.htmlspecialchars($v['caption'], ENT_COMPAT, 'ISO-8859-15').'</a>';
        }

        if ($activeOnly===true) $activeOnly = 0;

        // RECURSION!
        if (
            ($activeOnly===false || $activeOnly>0 || $actLevels[$level]==$v['id']) && // print only active sublevels
            $levels-1>0 // maximum number of levels to print
        ) {
            $newActiveOnly = $activeOnly;
            if (!is_bool($activeOnly)) $newActiveOnly = $activeOnly - 1 ;
            printNavigation($navi, $activeRubric, $levels-1, $v['id'], $newActiveOnly, $target);
        }

        //echo '</li>';
    }
    echo $ulend;
}


Ungetestet! Ob die Abfrage von $parent schon das gewünschte Ergebnis liefert, weiß ich nicht, hängt ein wenig von Deiner Navigation ab.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Experte


Anmeldungsdatum: 22.02.2006
Beiträge: 509
Wohnort: Berlin

BeitragVerfasst am: 07.11.2019 21:02    Titel: Antworten mit Zitat

Das sieht schon ganz gut aus! Ich frage mich, wie diese Zeile funktioniert:
Code:
$ulstart = '<div class="'.($parent==0)?'dropdown':'dropdown-content'.'">'

Denn ausgegeben wird nur "dropdown" ohne <div class=...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7070

BeitragVerfasst am: 07.11.2019 21:11    Titel: Antworten mit Zitat

Sollte eigentlich funktionieren.

Kannst es aber auch mal ändern zu:
Code:
$ulstart = ($parent==0) ? '<div class="dropdown">' : '<div class="dropdown-content">';

oder wir versuchen es mit Klammersetzung:
Code:
$ulstart = '<div class="'.(($parent==0)?'dropdown':'dropdown-content').'">'

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7

 
Für dieses Posting bedanken sich die folgenden User: hscha
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
hscha
ConPresso-Experte


Anmeldungsdatum: 22.02.2006
Beiträge: 509
Wohnort: Berlin

BeitragVerfasst am: 07.11.2019 22:53    Titel: Antworten mit Zitat

Variante 1 funktioniert...

Vielen Dank!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Beiträge der letzten Zeit anzeigen:   
Neue Antwort erstellen    ConPresso4 Community Foren-Übersicht -> Modul Menu (ConPresso 4) Alle Zeiten sind GMT + 2 Stunden
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen