Navigationsliste als sortierte oder unsortierte Liste

Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Navigationsliste als sortierte oder unsortierte Liste

Beitrag von Karin Dähne »

Hat sich schon jemand damit beschäftigt, dieNavigationsliste als OL oder UL auszugeben, mit echten Verschachtelungen?

Also z.B:

Code: Alles auswählen

<div id="navcontainer-left">
 <ol id="navlist-left">
  <li class="navfirst-left-off"><a href ="#" class="current-left">Menuepunkt 01</a></li>
  <li class="navfirst-left-on"><a href="#" class="current-left">Menuepunkt 02</a>
   <ol class="subnavlist-left">
    <li class="navsecond-left-off"><a href="#" class="subcurrent-left">SUB-Menuepunkt 02.01</a></li>
    <li class="navsecond-left-off"><a href="#" class="subcurrent-left">SUB-Menuepunkt 02.02</a></li>
   </ol>
  </li>
  <li class="navfirst-left-on"><a href="#" class="current-left">Menuepunkt 03</a>
   <ol class="subnavlist-left">
    <li class="navsecond-left-off"><a href="#" class="subcurrent-left">SUB-Menuepunkt 03.01</a></li>
    <li class="navsecond-left-off"><a href="#" class="subcurrent-left">SUB-Menuepunkt 03.02</a></li>
    <li class="navsecond-left-on"><a href="#" class="subcurrent-left">SUB-Menuepunkt 03.03</a></li>
   </ol>
  </li>
  <li class="navfirst-left-off"><a href="#" class="current-left">Menuepunkt 04</a></li>
  <li class="navfirst-left-off"><a href="#" class="current-left">Menuepunkt 05</a></li>
 </ol>
</div>
Sieht dann so aus:

Code: Alles auswählen

1. Menuepunkt 01 
2. Menuepunkt 02 
    1. SUB-Menuepunkt 02.01 
    2. SUB-Menuepunkt 02.02 
3. Menuepunkt 03 
    1. SUB-Menuepunkt 03.01 
    2. SUB-Menuepunkt 03.02 
    3. SUB-Menuepunkt 03.03 
4. Menuepunkt 04 
5. Menuepunkt 05
Ich komm mit den OL-Verschachtelungen nicht so recht weiter:
Im Output des Modules habe ich

<div id="navcontainer-left">
<ol id="navlist-left">

vor die erste Navigationsebene statt der Tabelle gesetzt (Und nachher weiter unten natürlich wieder gesclossen)

Wenn ich aber die Listenpunkte in die Templates setze, fängt es an...
Bei den nichtaktiven Menuepunkten ist das noch kein Problem:

<li class="navsecond-left-off"><a href="#" class="subcurrent-left">SUB-Menuepunkt 02.01</a></li>

Auch bei aktiven nicht, wenn es danach keine Verschachtelung gibt:
<li class="navsecond-left-on"><a href="#" class="subcurrent-left">SUB-Menuepunkt 02.02</a></li>

Wenn aber eine Verschachtelung auftritt, komme ich mit den Templates nicht mehr weiter: (öffnendes <li> öffnendes <ol> und nachher wieder schliessen)

<li class="navfirst-left-on"><a href="#" class="current-left">Menuepunkt 03</a>
<ol class="subnavlist-left">
<li class="navsecond-left-off"><a href="#" class="subcurrent-left">SUB-Menuepunkt 03.01</a></li>
<li class="navsecond-left-off"><a href="#" class="subcurrent-left">SUB-Menuepunkt 03.02</a></li>
<li class="navsecond-left-on"><a href="#" class="subcurrent-left">SUB-Menuepunkt 03.03</a></li>
</ol>
</li>

Also müßte ich da im wohl im Output des Modules etwas ändern.
Hat jemand eine Idee?

Danke im Voraus,

Grüsse,
Karin.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

wie sieht den dein template für die zweite und dritte ebene aus... ?
eine beschreibung der template klasse findest du hier...
-> http://www.contenido.de/forum/viewtopic ... s+template

deine einrückungen stellst du ausserhalb des <!-- BEGIN:BLOCK --> <!-- END:BLOCK -->
innerhalb des blocks wird mittels 'd' für dynamisch angesteuert...
ausserhalb mittels 's'
die <ol></ol> stehen dann ausserhalb des blocks..

die klasse hat noch einen netten kleinen bonus bei generate...
zb:
$html = $tpl->generate($template, 1); // in dem fall wird das template nicht ausgegeben sondern in der variable gespeichert...
*** make your own tools (wishlist :: thx)
Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne »

Hallo emergence!
Nett, daß sich doch noch jemand erbarmt ;-))

Ich habe Deinen Vorschlag umgesetzt.
Leider nicht mit dem gewünschten Erfolg:
Wenn ich die <ol></ol> ausserhalb der <!-- BEGIN:BLOCK --> <!-- END:BLOCK --> in die Templates setze, bekomme ich immer ein <ol></ol> um die Listenpunkte.
Oder hätte ich da im Modul etwas dafür definieren müssen? (Wenn ja, was, wie?)
Meine Templates sehen dann aus, wie folgt:

Die erste <ol>-Definition hatte ich schon im Modul gesetzt:

Code: Alles auswählen

/* Create Navigation Array */
nav($sel_idcat);

/* Start Output buffer */
ob_start();

echo '<div id="navcontainer-left">
<ol id="navlist-left">[<-ol->_L1]';

foreach ($navitems as $key => $data) {


und dann am Ende:

    } // end if

} // end foreach

echo '[<-/ol->_L1]</ol>';// end navlist-left
echo '</div>';
/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;

?>
Templates:

Code: Alles auswählen

navfirst_off.html:
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->

navfirst_on.html:
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->

navsecond_off.html:
<ol>
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->
</ol>

navsecond_on.html:
<ol>
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->
</ol>

navthird_off.html:
<ol>
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->
</ol>

navthird_off.html:
<ol>
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->
</ol>
Erzeugter Quelltext:

Code: Alles auswählen

<div id="navcontainer-left">
 <ol>
   <li><a href="xxx">1. Ebene 01-off</a></li>
   <li><a href="xxx">2. Ebene 01-on</a></li>
   <ol>
    <li><a href="xxx">1. Ebene 02-off</a></li>
   </ol>
   <ol>
    <li><a href="xxx">2. Ebene 02-off</a></li>
   </ol>
   <ol>
    <li><a href="xxx">3. Ebene 02-off</a></li>
   </ol>
   <ol>
    <li><a href="xxx">1. Ebene 03-on</a></li>
   </ol>
   <ol>
    <li><a href="xxx">2. Ebene 03-off</a></li>
   </ol>
   <ol>
    <li><a href="xxx">4. Ebene 02-off</a></li>
   </ol>
   <ol>
    <li><a href="xxx">5. Ebene 02-off</a></li>
   </ol>
   <ol>
    <li><a href="xxx">6. Ebene 02-off</a></li>
   </ol>
   <ol>
    <li><a href="xxx">7. Ebene 02-off</a></li>
   </ol>
  <li><a href="xxx">3. Ebene 01-off</a></li>
  <li><a href="xxx">4. Ebene 01-off</a></li>
  <li><a href="xxx">5. Ebene 01-off</a></li>
  <li><a href="xxx">6. Ebene 01-off</a></li>
 </ol>
</div>
Dann habe ich die <ol></ol> wieder herausgenommem und ins Modul gesetzt:

Templates:

Code: Alles auswählen

navfirst_off.html:
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->

navfirst_on.html:
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->

navsecond_off.html:
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->

navsecond_on.html:
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->

navthird_off.html:
<!-- BEGIN:BLOCK -->
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->

navthird_on.html:
<!-- BEGIN:BLOCK -->
<li><a class="nav-kontext_on" target="{TARGET}" href="{HREF}">{NAME}</a></li>
<!-- END:BLOCK -->

Modulveränderung:

Code: Alles auswählen

/* Create Navigation Array */
nav($sel_idcat);

/* Start Output buffer */
ob_start();

echo '<div id="navcontainer-left">
<ol id="navlist-left">[<-ol->_L1]';

foreach ($navitems as $key => $data) {

    /* 1. Navigations Ebene */
    $tpl->reset();
    $tpl->set('d', 'NAME',  $data['name']);
    $tpl->set('d', 'TARGET', $data['target']);
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
    $tpl->next();

    if ($idcat == $data['idcat'] || is_array($data['sub'])) {

        $tpl->generate('templates/navfirst_on.html');
    } else {
        $tpl->generate('templates/navfirst_off.html');
    }

    if (is_array($data['sub'])) {
echo '<ol class="subnavlist-left">[<-ol->_L2]';
      foreach ($data['sub'] as $key => $data) {

        /* 2. Navigations Ebene */
        $tpl->reset();
        $tpl->set('d', 'NAME',  $data['name']);
        $tpl->set('d', 'TARGET', $data['target']);
        $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
        $tpl->next();

        if ($idcat == $data['idcat'] || is_array($data['sub'])) {
            $tpl->generate('templates/navsecond_on.html');
        } else {
            $tpl->generate('templates/navsecond_off.html');
        }

            if (is_array($data['sub'])) {
echo '<ol class="subnavlist-left">[<-ol->_L3]';
       foreach ($data['sub'] as $key => $data) {

       /* 3. Navigations Ebene */
       $tpl->reset();
       $tpl->set('d', 'NAME',  $data['name']);
       $tpl->set('d', 'TARGET', $data['target']);
       $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
      $tpl->next();

       if ($idcat == $data['idcat']) {
           $tpl->generate('templates/navthird_on.html');
       } else {
           $tpl->generate('templates/navthird_off.html');
     }

    } // end foreach

echo '[<-/ol->_L3]</ol>';// end subnavlist-left
echo '[<-/li->_L2-on]</li>';// end navlist-left

   } // end if

  } // end foreach

echo '[<-/ol->_L2]</ol>';// end subnavlist-left
echo '[<-/li->_L1-on]</li>';// end navlist-left

 } // end if

} // end foreach

echo '[<-/ol->_L1]</ol>';// end navlist-left
echo '</div>';
/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

/* Output buffer-contents */
echo $html;

?>
Erzeugter Quelltext:

Code: Alles auswählen

<!--start modul-->
<div id="navcontainer-left">
<ol>
<li><a href="xxx">1. Ebene 01-off</a></li>
<li><a href="xxx">2. Ebene 01-off</a></li>
 <ol class="subnavlist-left">
  <li><a href="xxx">1. Ebene 02-off</a></li>
  <li><a href="xxx">2. Ebene 02-off</a></li>
  <li><a href="xxx">3. Ebene 02-off</a>
   <ol>
    <li><a href="xxx">1. Ebene 03-on</a></li>
    <li><a href="xxx">2. Ebene 03-off</a></li>
   </ol>
  </li>
  <li><a href="xxx">4. Ebene 02-off</a></li>
  <li><a href="xxx">5. Ebene 02-off</a></li>
  <li><a href="xxx">6. Ebene 02-off</a></li>
  <li><a href="xxx">7. Ebene 02-off</a></li>
 </ol>
</li>
<li><a href="xxx">3. Ebene 01-off</a></li>
<li><a href="xxx">4. Ebene 01-off</a></li>
<li><a href="xxx">5. Ebene 01-off</a></li>
<li><a href="xxx">6. Ebene 01-off</a></li>
</ol>
</div>
Hat nur einen Schönheitsfehler:
Wenn ich einen Menuepunkt auswähle, der keine Unterpunkte hat, wird trotzdem (natürlich) das <ol></ol> erzeugt ;-((

Müßte da nicht eine dritte Abfrage her?
Status: aktiv aber ohne Unterpunkte?
Und wenn? Wie?

Wenn Du Dir das Ganze ansehen möchtest:
http://www.dilight.com/front_content.php

Die farbigen Hyroglyphen habe ich reingesetzt, damit man ohne jedesmal den Qeulltext durchwühlen zu müssen, sieht was wo passiert.
(Die habe ich oben jeweils aus den Quelltexten der Übersichtlichkeit halber entfernt.)

Fällt Dir etwas geniales dazu ein? :oops:

Grüße,
Karin.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm, die richtige verschachtelung wäre ja:

Code: Alles auswählen

<UL>
  <LI>eins</LI>
  <UL>
    <LI>zwei</LI>
    <UL>
      <LI>drei</LI>
    </UL>
  </UL>
</UL>
und jedes template sowohl on als auch off enthält (first, second und third)

Code: Alles auswählen

<!-- BEGIN:BLOCK --> 
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li> 
<!-- END:BLOCK --> 
hier das modul

Code: Alles auswählen

/* Create Navigation Array */ 
nav($sel_idcat); 

/* Start Output buffer */ 
ob_start(); 

echo '<div id="navcontainer-left"> 
echo "<ul>";
foreach ($navitems as $key => $data) { 

    /* 1. Navigations Ebene */ 
    $tpl->reset(); 
    $tpl->set('d', 'NAME',  $data['name']); 
    $tpl->set('d', 'TARGET', $data['target']); 
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
    $tpl->next(); 

    if ($idcat == $data['idcat'] || is_array($data['sub'])) { 

        $tpl->generate('templates/navfirst_on.html'); 
    } else { 
        $tpl->generate('templates/navfirst_off.html'); 
    } 

    if (is_array($data['sub'])) { 
      echo "<ul>";
      foreach ($data['sub'] as $key => $data) { 

        /* 2. Navigations Ebene */ 
        $tpl->reset(); 
        $tpl->set('d', 'NAME',  $data['name']); 
        $tpl->set('d', 'TARGET', $data['target']); 
        $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
        $tpl->next(); 

        if ($idcat == $data['idcat'] || is_array($data['sub'])) { 
            $tpl->generate('templates/navsecond_on.html'); 
        } else { 
            $tpl->generate('templates/navsecond_off.html'); 
        } 

        if (is_array($data['sub'])) { 
          echo "<ul>";
          foreach ($data['sub'] as $key => $data) { 

            /* 3. Navigations Ebene */ 
            $tpl->reset(); 
            $tpl->set('d', 'NAME',  $data['name']); 
            $tpl->set('d', 'TARGET', $data['target']); 
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
            $tpl->next(); 

            if ($idcat == $data['idcat']) { 
                $tpl->generate('templates/navthird_on.html'); 
            } else { 
                $tpl->generate('templates/navthird_off.html'); 
            } 

          } // end foreach 
          echo "</ul>";
        } // end if 

      } // end foreach 
      echo "</ul>";
    } // end if 

} // end foreach 
echo "</ul>";

echo '</div>'; 
/* Read out buffer */ 
$html = ob_get_contents(); 

/* Clean buffer */ 
ob_end_clean(); 

/* Output buffer-contents */ 
echo $html; 

?> 
müsste dann doch stimmen oder ?
*** make your own tools (wishlist :: thx)
Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne »

emergence hat geschrieben:ähm, die richtige verschachtelung wäre ja:

Code: Alles auswählen

<UL>
  <LI>eins</LI>
  <UL>
    <LI>zwei</LI>
    <UL>
      <LI>drei</LI>
    </UL>
  </UL>
</UL>

Wenn's doch nur so einfach wäre...
Dann säße ich nicht schon seit Tagen an dieser blöden Navi...
Hatte ich auch erst so angelegt und der W3C hat mich ausgeschimpft!

In den Beispielen die ich zu diesem Thema gefunden habe wurde aber auch nie eine Liste "echt" bis zum Ende verschachtelt.
Da wurde dann immer wieder neu in den Unterpunkten angesetzt.
Das hat aber sicher Gründe in der Css-Formatierung, da die Schriftgrösse vererbt wird. Bei relativen Werten ergibt das dann leider immer kleinere Werte in der Verschachtelung, gegen die man gegensteuern muß.

Code: Alles auswählen

HTML

<div id="navcontainer">
<ul id="navlist">
<li id="active"><a href="#" id="current">Item one</a>
<ul id="subnavlist">
<li id="subactive"><a href="#" id="subcurrent">Subitem one</a></li>
<li><a href="#">Subitem two</a></li>
<li><a href="#">Subitem three</a></li>
<li><a href="#">Subitem four</a></li>
</ul></li>
<li><a href="#">Item two</a></li>
<li><a href="#">Item three</a></li>
<li><a href="#">Item four</a></li>
</ul>
</div>
aus: http://css.maxdesign.com.au/listamatic2/vertical01.htm

Da freut sich der W3C ;-)

Eine Version für cms-Systeme habe ich noch nicht gefunden.
Aber das müßte doch zu lösen sein, oder?

Hoffnungsvolle Grüße,
Karin.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm ich würd es trotzdem so machen:

Code: Alles auswählen

<div id="navcontainer"> 
  <ul id="navlist"> 
    <li id="active"><a href="#" id="current">Item one</a></li>
    <ul id="subnavlist"> 
      <li id="subactive"><a href="#" id="subcurrent">Subitem one</a></li> 
      <li><a href="#">Subitem two</a></li> 
      <li><a href="#">Subitem three</a></li> 
      <li><a href="#">Subitem four</a></li> 
    </ul> 
    <li><a href="#">Item two</a></li> 
    <li><a href="#">Item three</a></li> 
    <li><a href="#">Item four</a></li> 
  </ul> 
</div>
wie sieht den der code meinen änderungen aus.. ?
*** make your own tools (wishlist :: thx)
Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne »

Hallo emergence!

Ich habe das Modul und die Templates LOKAL angepasst. Wenn ich es auf den Server schieben soll sag Bescheid ;-)
Wie schon vermutet mault der W3C.

Ich habe nachfolgend mal alle erzeugten Varianten in eine Datei gesetzt und durchchecken lassen. Danach habe ich gleich die W3C-Meckerpunkte als Kommentare eingefügt.
Das hoffentlich halbwegs übersichtliche Ergebnis:

Code: Alles auswählen

<body>
So muss es aussehen:
Aktiver Navidationspunkt OHNE Unterpunkte:
<!--start modul--> 
<div> 
 <ol> 
  <li><a href="xxx">1. Ebene 01-off</a></li>
  <li><a href="xxx">2. Ebene 01-off</a></li>
  <li><a href="xxx">3. Ebene 01-off</a></li>
  <li><a href="xxx">4. Ebene 01-off</a></li>
  <li><a href="xxx">5. Ebene 01-on</a></li> <!-- Navipunkt aktiv OHNE Unterpunkte-->
  <li><a href="xxx">6. Ebene 01-off</a></li>
 </ol> 
</div>
<!--end Modul-->

So muss es aussehen:
Aktiver Navidationspunkt MIT Unterpunkten:
<!--start modul--> 
<div>
 <ol>
  <li><a href="xxx">1. Ebene 01-off</a></li>
  <li><a href="xxx">2. Ebene 01-on</a> <!--Navipunkt aktiv MIT Unterpunkt-->
   <ol>
    <li><a href="xxx">1. Ebene 02-off</a></li>
    <li><a href="xxx">2. Ebene 02-off</a></li>
    <li><a href="xxx">3. Ebene 02-off</a> <!--Navipunkt aktiv MIT Unterpunkt-->
     <ol>
      <li><a href="xxx">1. Ebene 03-on</a></li>
      <li><a href="xxx">2. Ebene 03-off</a></li>
     </ol>
    </li>
    <li><a href="xxx">4. Ebene 02-off</a></li>
    <li><a href="xxx">5. Ebene 02-off</a></li>
    <li><a href="xxx">6. Ebene 02-off</a></li>
    <li><a href="xxx">7. Ebene 02-off</a></li>
   </ol>
  </li>
  <li><a href="xxx">3. Ebene 01-off</a></li>
  <li><a href="xxx">4. Ebene 01-off</a></li>
  <li><a href="xxx">5. Ebene 01-off</a></li>
  <li><a href="xxx">6. Ebene 01-off</a></li>
 </ol>
</div>
<!--end Modul-->

Erzeugter Quellcode, wenn 
Template:
Code: 
<!-- BEGIN:BLOCK --> 
<li><a target="{TARGET}" href="{HREF}">{NAME}</a></li> 
<!-- END:BLOCK -->  


<!--start modul-->
<div>
 <ol>
  <li><a href="xxx">1. Ebene 01-off</a></li>
  <li><a href="xxx">2. Ebene 01-on</a></li> <!-- Navipunkt aktiv OHNE Unterpunkte-->
   <ol> <!-- W3C MECKER 1-->
    <li><a href="xxx">1. Ebene 02-off</a></li>
    <li><a href="xxx">2. Ebene 02-off</a></li>
    <li><a href="xxx">3. Ebene 02-on</a></li> <!-- Navipunkt aktiv OHNE Unterpunkte-->
     <ol> <!-- W3C MECKER 2-->
      <li><a href="xxx">1. Ebene 03-on</a></li>
      <li><a href="xxx">2. Ebene 03-off</a></li>
     </ol>
    <li><a href="xxx">4. Ebene 02-off</a></li> 
    <li><a href="xxx">5. Ebene 02-off</a></li> 
    <li><a href="xxx">6. Ebene 02-off</a></li> 
    <li><a href="xxx">7. Ebene 02-off</a></li> 
   </ol>
  <li><a href="xxx">3. Ebene 01-off</a></li> 
  <li><a href="xxx">4. Ebene 01-off</a></li> 
  <li><a href="xxx">5. Ebene 01-off</a></li> 
  <li><a href="xxx">6. Ebene 01-off</a></li> 
 </ol>
</div>
<!--end Modul-->


<!--start modul-->
<div>
 <ol>
  <li><a href="xxx">1. Ebene 02-off</a></li> 
  <li><a href="xxx">2. Ebene 02-off</a></li> 
  <li><a href="xxx">3. Ebene 02-on</a></li> <!-- Navipunkt aktiv OHNE Unterpunkte-->
   <ol></ol> <!-- W3C MECKER 3--> <!-- W3C MECKER 4-->
  <li><a href="xxx">4. Ebene 01-off</a></li> 
  <li><a href="xxx">5. Ebene 01-off</a></li> 
  <li><a href="xxx">6. Ebene 01-off</a></li>
 </ol>
</div>
<!--end Modul-->


<!--start modul-->
<div>
 <ol>
  <li><a href="xxx">1. Ebene 02-off</a></li> 
  <li><a href="xxx">2. Ebene 02-off</a></li> 
  <li><a href="xxx">3. Ebene 02-on</a></li> <!-- Navipunkt aktiv OHNE Unterpunkte-->
   <ol><li>xxx</li></ol> <!-- W3C MECKER 5-->
    <li><a href="xxx">4. Ebene 01-off</a></li> 
    <li><a href="xxx">5. Ebene 01-off</a></li> 
    <li><a href="xxx">6. Ebene 01-off</a></li>
 </ol>
</div>
<!--end Modul-->
</body>
W3C-MECKER:

Code: Alles auswählen

File:  D:\xampp\htdocs\ulrich_co\z_layout\z_work_layout02.htm 
Encoding:  iso-8859-1 
Doctype:  HTML 4.01 Transitional 
Errors:  5 

This page is not Valid HTML 4.01 Transitional!
Below are the results of attempting to parse this document with an SGML parser. 

Line 67, column 3: document type does not allow element "OL" here; assuming missing "LI" start-tag
<ol>

Line 71, column 3: document type does not allow element "OL" here; assuming missing "LI" start-tag
<ol>

Line 95, column 3: document type does not allow element "OL" here; assuming missing "LI" start-tag
<ol></ol>

Line 95, column 8: end tag for "OL" which is not finished
<ol></ol>

Line 110, column 3: document type does not allow element "OL" here; assuming missing "LI" start-tag
<ol><li>xxx</li></ol>
Ich denke, da müßte eine Abfrage vor der Verschachtelung in eine neue Ebene rein.
Also: Templates mit *_on ohne </li> und dann im Output des Moduls vor die nächste Navigationsebene ein:

"Wenn keine weitere Verschachtelung, dann "</li>" sonst die Abfragen nach dem nächsten Unterpunkt."

Oder vielleicht ganz anders? Über switch/case (ohne Templates), ähnlich wie bei der Anpassung der Sitemap von scipio als Liste:
http://contenido.de/forum/viewtopic.php ... iste#15778

Code: Alles auswählen

//Läuft über switch/case, da ich in einem 2. Schritt eine verschachtelte Liste generieren werde

switch ($lvl)
{
case 0: $result.=  "<ul class='sitemap-level00'><li><a class='sitemap-level00' href='front_content.php?idcat=".$db->f("idcat")."&lang=$lang&client=$client' title='Hauptebene: ".$db->f("name")."'>".$db->f("name")."</a></li></ul>".sitemap($db->f("idcat"));break;
.....(usw.)
Hast Du eine Idee zu den Abfragen?

Hoffnungsvolle Grüße,
Karin.
Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne »

Kann mir denn bei meinem Problem keiner weiter helfen? :oops:

Grüße,
Karin.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ach ja das war ja noch offen:

versuch mal als template

Code: Alles auswählen

<!-- BEGIN:BLOCK --> 
<li class="status"><a target="{TARGET}" href="{HREF}">{NAME}</a> 
<!-- END:BLOCK -->


und als modul:

Code: Alles auswählen

/* Create Navigation Array */ 
nav($sel_idcat); 

/* Start Output buffer */ 
ob_start(); 

echo '<div id="navcontainer-left">'; 
echo "<ul>"; 
foreach ($navitems as $key => $data) { 

    /* 1. Navigations Ebene */ 
    $tpl->reset(); 
    $tpl->set('d', 'NAME',  $data['name']); 
    $tpl->set('d', 'TARGET', $data['target']); 
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
    $tpl->next(); 

    if ($idcat == $data['idcat'] || is_array($data['sub'])) { 

        $tpl->generate('templates/navfirst_on.html'); 
    } else { 
        $tpl->generate('templates/navfirst_off.html'); 
    } 

    if (is_array($data['sub'])) { 
      echo "<ul>"; 
      foreach ($data['sub'] as $key => $data) { 

        /* 2. Navigations Ebene */ 
        $tpl->reset(); 
        $tpl->set('d', 'NAME',  $data['name']); 
        $tpl->set('d', 'TARGET', $data['target']); 
        $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
        $tpl->next(); 

        if ($idcat == $data['idcat'] || is_array($data['sub'])) { 
            $tpl->generate('templates/navsecond_on.html'); 
        } else { 
            $tpl->generate('templates/navsecond_off.html'); 
        } 

        if (is_array($data['sub'])) { 
          echo "<ul>"; 
          foreach ($data['sub'] as $key => $data) { 

            /* 3. Navigations Ebene */ 
            $tpl->reset(); 
            $tpl->set('d', 'NAME',  $data['name']); 
            $tpl->set('d', 'TARGET', $data['target']); 
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat'])); 
            $tpl->next(); 

            if ($idcat == $data['idcat']) { 
                $tpl->generate('templates/navthird_on.html'); 
            } else { 
                $tpl->generate('templates/navthird_off.html'); 
            } 
            echo "</li>";
          } // end foreach 
          echo "</ul>"; 
        } // end if 
        echo "</li>";
      } // end foreach 
      echo "</ul>"; 
    } // end if 
    echo "</li>";
} // end foreach 
echo "</ul>"; 

echo '</div>'; 
/* Read out buffer */ 
$html = ob_get_contents(); 

/* Clean buffer */ 
ob_end_clean(); 

/* Output buffer-contents */ 
echo $html; 

?>
Zuletzt geändert von emergence am Fr 14. Mai 2004, 10:07, insgesamt 1-mal geändert.
*** make your own tools (wishlist :: thx)
Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne »

Hallo emergence!

Wie lieb von Dir, daß Du Dich meinem Problem noch einmal annimmst!!!

Leider bleibt es bestehen:

Ich habe weiterhin bei einem Menuepunkt, der aktiv ist, aber KEINE Unterpunkte hat ein " <ul></ul> ".

Gibt es keine Möglichkeit, eine dritte Abfrage einzubauen (Aktiv aber ohne Unterpunkte)?

Es sind doch 3 Möglichkeiten, die auftreten:
1. Inaktiver Menuepunkt
2. Aktiver Menuekunkt OHNE Untermenuepunkt
3. Aktiver Menuepunkt MIT Untermenuepunkt


Hoffnungsvolle Grüße,
Karin.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

jetzt hab ich es das erste mal getestet.
ich hab oben noch eine kleinigkeit geändert

echo '<div id="navcontainer-left">';
und am ende hatte ich bei echo "</li>"; vergessen.

bei mir stimmt jetzt die verschachtelung:

Code: Alles auswählen

<div id="navcontainer-left">
<ul>
  <li class="on"><a target="_self" href="front_content.php?idcat=3">Punkt 1</a> 
  <ul>
    <li class="off"><a target="_self" href="front_content.php?idcat=6">Punkt 1.1</a></li>
    <li class="on"><a target="_self" href="front_content.php?idcat=7">Punkt 1.2</a> 
    <ul>
      <li class="off"><a target="_self" href="front_content.php?idcat=16">Punkt 2.3</a></li>
    </ul></li>
  </ul></li>
  <li class="off"><a target="_self" href="front_content.php?idcat=8">Punkt 2</a></li>
</ul></div>
und deine 3 punkte sind mir nicht klar...
*** make your own tools (wishlist :: thx)
wolfganggarella
Beiträge: 74
Registriert: Fr 7. Nov 2003, 11:35
Wohnort: München
Kontaktdaten:

Beitrag von wolfganggarella »

Hi Karin,

ersetz' 'mal im Modul der Hauptnavi Alles zwischen start output buffer und read out buffer durch Folgendes:

Code: Alles auswählen

/************************************************************/

echo '<ul>';/*liste erste ebene***********************************/

foreach ($navitems as $key => $data) {

    /* 1. Navigations Ebene */
    $tpl->reset();
    $tpl->set('d', 'NAME',  nl2br($data['name']));
    $tpl->set('d', 'TARGET', $data['target']);
    $tpl->set('d', 'HREF',  $sess->url('?idcat='.$data['idcat']));
    $tpl->next();
echo '<li>';/*anfang listenpunkte erste ebene***********************/
    if ($idcat == $data['idcat'] ) {
$tpl->generate('templates/navfirst_on.html');
    } else {
$tpl->generate('templates/navfirst_off.html');
    }

    if (count($data['sub'])>=1) {
echo '<ul>';/*anfang liste zweite ebene****************************/

        foreach ($data['sub'] as $key => $data) {

            /* 2. Navigations Ebene */
            $tpl->reset();
            $tpl->set('d', 'NAME',  nl2br($data['name']));
            $tpl->set('d', 'TARGET', $data['target']);
            $tpl->set('d', 'HREF',  $sess->url('?idcat='.$data['idcat']));
            $tpl->next();
echo '<li>';/*anfang listenpunkte zweite ebene**********************/
            if ($idcat == $data['idcat']) {
                $tpl->generate('templates/navsecond_on.html');
            } else {
                $tpl->generate('templates/navsecond_off.html');
            }

    if (count($data['sub'])>=1) {
echo '<ul>';/*anfang liste dritte ebene*****************************/


                foreach ($data['sub'] as $key => $data) {

                    /* 3. Navigations Ebene */
                    $tpl->reset();
                    $tpl->set('d', 'NAME',  nl2br($data['name']));
                    $tpl->set('d', 'TARGET', $data['target']);
                    $tpl->set('d', 'HREF',  $sess->url('?idcat='.$data['idcat']));
                    $tpl->next();
echo '<li>';/*anfang listenpunkte dritte ebene***********************/
                    if ($idcat == $data['idcat']) {
                        $tpl->generate('templates/navthird_on.html');
                    } else {
                        $tpl->generate('templates/navthird_off.html');
                    }
echo '</li>';/*ende listenpunkte dritte ebene************************/
                } // end foreach
echo '</ul>';/*ende liste dritte ebene******************************/

            } // end if
echo '</li>';/*ende listenpunkte zweite ebene***********************/
        } // end foreach
echo '</ul>';/*ende liste zweite ebene*****************************/
    } // end if

echo '</li>';/*ende listenpunkte erste ebene************************/
} // end foreach

echo '</ul>';/*ende liste erste ebene*******************************************************/

/***********************************************************/
Die Templates schauen so aus:
die nav..._off:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
<a href="{HREF}">{NAME}</a>
<!-- END:BLOCK -->
die nav..._on:

Code: Alles auswählen

<!-- BEGIN:BLOCK -->
{NAME}
<!-- END:BLOCK -->
CSS-Formatierungen wirst Du ja wohl selbst machen wollen.
Das ist es, glaub' ich, was Du haben willst.(?)

Gruß
Wolfgang
Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne »

Hallo emergence,

Die Verschachtelung hatte ich schon geändert;-)


Zu den drei Punkten:

Bei der Abfrage nach dem Menuepunkt der aktiv ist

Code: Alles auswählen

if ($idcat == $data['idcat'] || is_array($data['sub'])) {
        $tpl->generate('templates/mainnav_on.html');
wird doch davon ausgegangen bzw. die Möglichkeit eingeschlossen, daß ein Untermenuepunkt existiert.
(Wenn ich das mit meinen bescheidenen PHP Kenntnissen so richtig verstehe.)
Also wird dort alles gesteuert, was eigentlich 2 Möglichkeiten beinhaltet:
"Untermenuepunkt" und "KEIN Untermenuepunkt"
Z.B. ist es doch mit dieser Abfrage auch nicht möglich, eine gezielte Farbzuweisung auf für die gerade aktive Siete in der navigation anzeigen zu lassen. Es werden immer ALLE Menuepunkte, aus denen sich die Seite herleitet mit angesprochen, oder?:

Code: Alles auswählen

1. Muenuepunkt (inaktiv = schwarz)
2. Muenuepunkt (aktiv = rot)
   1. Submenuepunkt (inaktiv = schwarz)
   2. Submenuepunkt (aktiv = rot)
       1. SubSubmenuepunkt (inaktiv = schwarz)
       2. SubSubmenuepunkt (aktiv = rot)
       3. SubSubmenuepunkt (inaktiv = schwarz)
   3. Submenuepunkt (inaktiv = schwarz)
1. Muenuepunkt (inaktiv = schwarz)
Falls ich mich noch unklar ausgedrückt habe, bitte weiter bohren ;-))

Grüße,
Karin.
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

also stimmt jetzt die verschachtelung ?

Code: Alles auswählen

if ($idcat == $data['idcat'] || is_array($data['sub'])) {
        $tpl->generate('templates/mainnav_on.html');
$idcat == $data['idcat'] -> bedeutet die gerade aktive kategorie...
is_array($data['sub']) -> bedeutet das dieser menüpunkt noch subkategorien besitzt, die angezeigt werden sollen.

du kannst die abfrage ja weiter aufsplitten...
wenn ich mich nicht ganz irre sieht das dann so aus...

Code: Alles auswählen

if ($idcat == $data['idcat']) { // template für aktiven menüpunkt
        $tpl->generate('templates/mainnav_active.html');
} elseif ( is_array($data['sub']) ) { // template für geöffnete kategorien
        $tpl->generate('templates/mainnav_on.html');
} else { // template für geschlossene nicht aktive kategorie
        $tpl->generate('templates/mainnav_off.html');
}
*** make your own tools (wishlist :: thx)
Karin Dähne
Beiträge: 140
Registriert: Fr 20. Feb 2004, 17:48
Wohnort: Braunschweig
Kontaktdaten:

Beitrag von Karin Dähne »

Hallo wolfganggarella!

Hey, soweit ich das auf die Schnelle sehe, ist es genau das, was ich gesucht habe!!!

Ich muß noch die css-Formatierung reinbauen, aber dem Quelltext nach stimmt es. Die leeren <ul></ul> sind weg!!! :P

Ich meld mich, wenn ich es ausgetestet habe.


@ emergence :

Ich teste gerade das output von wolfganggarella.

Melde mich gleich wieder.


Danke erst einmal Euch Beiden !!!



Grüße,
Karin.
Gesperrt