Problem mit 4er Navi

Wie verwendet man Templates oder erstellt Navigationen und passt diese an.

Problem mit 4er Navi

Beitragvon sindy » 18. Apr 2008, 13:30

Hallo zusammen,
ich habe da ein Problem mit meinem Navitemplate-denke ich, da im Validator immer wieder Fehler dieser Art auftauchen:
Line 36, Column 81: end tag for "ul" which is not finished.
…nav1st"><li>Home<ul class="nav2nd"></ul></div></div>
Nur komme ich nicht auf den Fehler. :? So läuft die Navi auch problemlos. Vielleicht hat von euch jemand eine Idee?
Das wäre supi!
Liebe Grüße
Sindy

Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];
$path4 = $PATH[4];
$path5 = $PATH[5];
$sitePath = '';
$titlePath = '';
$navLeftCol = '';




/* START 1st level categories */
$navHeader .= '<ul>';
$navLeftCol .= '<div id="navheight_horiz_vert">';
foreach (OOCategory::getRootCategories() as $lev1) {
      
   if ($lev1->isOnline()):
      if ($lev1->getId() == $path1) {
         $navHeader .= '<li><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
         if ($lev1->getId() != "1") {
            $sitePath .= ' ›› <a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
         }
         $titlePath .= ' >> '.$lev1->getName();
      }
      // 2nd level - no active link
      else {
         $navHeader .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
      }
      
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
      if ($lev1Size != "0"):
         $navLeftCol .= '<ul class="nav1st">';
         $navLeftCol .= '<li>'.$lev1->getName();
         $navLeftCol .= '<ul class="nav2nd">';

         // START 2nd level categories
         foreach ($lev1->getChildren() as $lev2):
                  
            if ($lev2->isOnline()):
   
            // 2nd level - active link
               if ($lev2->getId() == $path2) {
                  $navLeftCol .= '<li class="active"><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
                  $sitePath .= ' ›› <a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  $titlePath .= ' >> '.$lev2->getName();
               }
               // 2nd level - no active link
               else {
                  $navLeftCol .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
               }
                                       // 2st level had categories? -> go on
            $lev2Size = sizeof($lev2->getChildren());
   
            if ($lev2->getId() == $path2) {
            if ($lev2Size != "0"):
                       
                           $navLeftCol .= '<ul class="nav3rd">';
               //$navLeftCol .= '<li><strong>Unterkategorien2</strong></li>';

               
               // START 3nd level categories
               foreach ($lev2->getChildren() as $lev3):
                  
                  if ($lev3->isOnline()):
   
                  // 3nd level - active link
                      if ($lev3->getId() == $path3) {
                        $navLeftCol .= '<a class="current" href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                        $sitePath .= ' ›› <a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                        $titlePath .= ' >> '.$lev3->getName();
                     }
                     // 3nd level - no active link
                      else {
                        $navLeftCol .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                     }
                                       // 3st level had categories? -> go on
            $lev3Size = sizeof($lev3->getChildren());
   
            if ($lev3->getId() == $path3) {
            if ($lev3Size != "0"):
                       
                           $navLeftCol .= '<ul class="nav4rd">';
               //$navLeftCol .= '<li><strong>Unterkategorien3</strong></li>';

   

            // START 4nd level categories
               foreach ($lev3->getChildren() as $lev4):
                  
                  if ($lev4->isOnline()):
   
                  // 4nd level - active link
                      if ($lev4->getId() == $path4) {
                        $navLeftCol .= '<a class="current" href="'.$lev4->getUrl().'">'.$lev4->getName().'</a>';
                        $sitePath .= ' ›› <a href="'.$lev4->getUrl().'">'.$lev4->getName().'</a>';
                        $titlePath .= ' >> '.$lev4->getName();
                     }
                     // 4nd level - no active link
                      else {
                        $navLeftCol .= '<li><a href="'.$lev4->getUrl().'">'.$lev4->getName().'</a></li>';
                     }




      
   endif;         
            endforeach;


         // END 4nd level categories            
            endif;
          $navLeftCol .= '</li>';               
            }


          // END 3nd level categories
           endif; // END by if ($lev1Size != "0"):              
        endforeach;
        //$navHeader .= ''; 
    endif;
    if ($navLeftCol != "") $navLeftCol .= '</ul>';
     }


            // END 2nd level categories
           endif; // END by if ($lev1Size != "0"):              
        endforeach;
        //$navHeader .= ''; 
    endif;
    if ($navLeftCol != "") $navLeftCol .= '</ul>';
     }
  endif; // END by if ($lev1->isOnline())
}
$navHeader .= '</ul>';
$navLeftCol .= '</div>';

// END 1st level categories


?>
sindy
 

Beitragvon sebhecht » 18. Apr 2008, 18:26

Hey Sindy,

Bei $navLeftCol öffnest Du vier mal ein ul (jeweils "class=nav1,2,3,4"), du schließt aber nur zwei davon (sieht aus wie die von 1 und 2). Das heißt, es fehlen noch zwei </ul>, jeweils am Ende der 4. und 3. Ebene.

MfG Sebastian
sebhecht
 
Beiträge: 114
Registriert: 22. Feb 2008, 10:02
Wohnort: Mainz

Beitragvon sindy » 19. Apr 2008, 13:12

Hallo Sebastian,
vielen Dank für deine Hilfe. Ich habe zwar die fehlenden </ul> geschlossen, nur ist irgendwo was faul. Es kommt immer wieder diese eine Fehler im Validator
Validation Output: 1 Error
Line 37, Column 81: end tag for "ul" which is not finished .
…v1st"><li>Home<ul class="nav2nd"></ul></li></ul></div></div>

Most likely, you nested tags and closed them in the wrong order. For example <p><em>...</p> is not acceptable, as <em> must be closed before <p>. Acceptable nesting is: <p><em>...</em></p>


Dabei habe ich nun schon so viel probiert...aber ich komme nicht drauf was es noch sein könnte. :(

Hier noch mal mein geänderter Code. Vielleicht siehst du oder jemand anderes noch etwas?
Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];
$path4 = $PATH[4];
$path5 = $PATH[5];
$sitePath = '';
$titlePath = '';
$navLeftCol = '';

/* START 1st level categories */
$navHeader .= '<ul>';
$navLeftCol .= '<div id="navheight_horiz_vert">';
foreach (OOCategory::getRootCategories() as $lev1) {
      
   if ($lev1->isOnline()):
      if ($lev1->getId() == $path1) {
         $navHeader .= '<li><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
         if ($lev1->getId() != "1") {
            $sitePath .= ' ›› <a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         }
         $titlePath .= ' >> '.$lev1->getName();
      }
      // 2nd level - no active link
      else {
         $navHeader .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
      }
      
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
      if ($lev1Size != "0"):
         $navLeftCol .= '<ul class="nav1st">';
         $navLeftCol .= '<li>'.$lev1->getName();
         $navLeftCol .= '<ul class="nav2nd">';

         // START 2nd level categories
         foreach ($lev1->getChildren() as $lev2):
                  
            if ($lev2->isOnline()):
   
            // 2nd level - active link
               if ($lev2->getId() == $path2) {
                  $navLeftCol .= '<li><a class="current" href= href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
                  $sitePath .= ' ›› <a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  $titlePath .= ' >> '.$lev2->getName();
               }
               // 2nd level - no active link
               else {
                  $navLeftCol .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
               }
                                       // 2st level had categories? -> go on
            $lev2Size = sizeof($lev2->getChildren());
   
            if ($lev2->getId() == $path2) {
            if ($lev2Size != "0"):
                       
                           $navLeftCol .= '<ul class="nav3rd">';
               //$navLeftCol .= '<li><strong>Unterkategorien2</strong></li>';

               
               // START 3nd level categories
               foreach ($lev2->getChildren() as $lev3):
                  
                  if ($lev3->isOnline()):
   
                  // 3nd level - active link
                      if ($lev3->getId() == $path3) {
                        $navLeftCol .= '<li><a class="current" href=href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                        $sitePath .= ' ›› <a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                        $titlePath .= ' >> '.$lev3->getName();
                     }
                     // 3nd level - no active link
                      else {
                        $navLeftCol .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                     }
                                       // 3st level had categories? -> go on
            $lev3Size = sizeof($lev3->getChildren());
   
            if ($lev3->getId() == $path3) {
            if ($lev3Size != "0"):
                       
                           $navLeftCol .= '<ul class="nav4rd">';
               //$navLeftCol .= '<li><strong>Unterkategorien3</strong></li>';

            // START 4nd level categories
               foreach ($lev3->getChildren() as $lev4):
                  
                  if ($lev4->isOnline()):
   
                  // 4nd level - active link
                      if ($lev4->getId() == $path4) {
                        $navLeftCol .= '<li><a class="current" href="'.$lev4->getUrl().'">'.$lev4->getName().'</a>';
                        $sitePath .= ' ›› <a href="'.$lev4->getUrl().'">'.$lev4->getName().'</a>';
                        $titlePath .= ' >> '.$lev4->getName();
                     }
                     // 4nd level - no active link
                      else {
                        $navLeftCol .= '<li><a href="'.$lev4->getUrl().'">'.$lev4->getName().'</a></li>';
                     }
   
   endif;   
   
            endforeach;

         // END 4nd level categories            
            endif;
          $navLeftCol .= '</li>';   
          $navLeftCol .= '</ul>';            
            }


          // END 3nd level categories
           endif; // END by if ($lev1Size != "0"):              
        endforeach;
        //$navHeader .= '</li>'; 
    endif;
    if ($navLeftCol != "") $navLeftCol .= '</li>';
                                 $navLeftCol .= '</ul>';
                             
     }

            // END 2nd level categories
           endif; // END by if ($lev1Size != "0"):    
      
        endforeach;
       // $navHeader .= '</li>';
                         
    endif;
    if ($navLeftCol != "") $navLeftCol .= '</ul>';
                                 $navLeftCol .= '</li>';
                                 $navLeftCol .= '</ul>';
     }
  endif; // END by if ($lev1->isOnline())
}

$navHeader .= '</ul>';
$navLeftCol .= '</div>';

// END 1st level categories
?>



Vielen Dank!
Liebe Grüße
Sindy
sindy
 

Beitragvon darwin » 19. Apr 2008, 15:11

Hi..
schau dir mal deine Struktur genauer an...
so sollte es funktionieren:

<div>
<ul>
<li><a></a> // wenn unterpunkt vorhanden offen
<ul>
<li><a></a></li>
<li><a></a></li>
<li><a></a> // wenn unterpunkt vorhanden offen
<ul>
<li><a></a></li>
<li><a></a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>

grz. Chris
Benutzeravatar
darwin
 
Beiträge: 1261
Registriert: 2. Jan 2007, 16:10
Wohnort: LA

Beitragvon sindy » 22. Apr 2008, 08:52

Hallo zusammen,
vielen lieben Dank für Eure Hilfe. Das Navi-Template ist jetzt valide. Hier nochmal der valide Code:
Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// GET CURRENTS
$path1 = $PATH[1];
$path2 = $PATH[2];
$path3 = $PATH[3];
$path4 = $PATH[4];
$path5 = $PATH[5];
$sitePath = '';
$titlePath = '';
$navLeftCol = '';

/* START 1st level categories */
$navHeader .= '<ul>';
$navLeftCol .= '<div id="navheight_horiz_vert">';
foreach (OOCategory::getRootCategories() as $lev1) {
       
   if ($lev1->isOnline()):
      if ($lev1->getId() == $path1) {
         $navHeader .= '<li><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
         if ($lev1->getId() != "1") {
            $sitePath .= ' ›› <a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         }
         $titlePath .= ' >> '.$lev1->getName();
      }
      // 2nd level - no active link
      else {
         $navHeader .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
      }
       
         
      // 1st level had categories? -> go on
      $lev1Size = sizeof($lev1->getChildren());
   
      if ($lev1->getId() == $path1) {
      if ($lev1Size != "0"):
         $navLeftCol .= '<ul class="nav1st">';
         $navLeftCol .=  '<li><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a></li>';
       

         // START 2nd level categories
         foreach ($lev1->getChildren() as $lev2):
                   
            if ($lev2->isOnline()):
   
            // 2nd level - active link
               if ($lev2->getId() == $path2) {
                  $navLeftCol .= '<li><a class="current" href= href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
                  $sitePath .= ' ›› <a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a>';
                  $titlePath .= ' >> '.$lev2->getName();
               }
               // 2nd level - no active link
               else {
                  $navLeftCol .= '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
               }
                                       // 2st level had categories? -> go on
            $lev2Size = sizeof($lev2->getChildren());
   
            if ($lev2->getId() == $path2) {
            if ($lev2Size != "0"):
                       
                           $navLeftCol .= '<ul class="nav3rd">';
               //$navLeftCol .= '<li><strong>Unterkategorien2</strong></li>';

               
               // START 3nd level categories
               foreach ($lev2->getChildren() as $lev3):
                   
                  if ($lev3->isOnline()):
   
                  // 3nd level - active link
                      if ($lev3->getId() == $path3) {
                        $navLeftCol .= '<li><a class="current" href=href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                        $sitePath .= ' ›› <a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a>';
                        $titlePath .= ' >> '.$lev3->getName();
                     }
                     // 3nd level - no active link
                      else {
                        $navLeftCol .= '<li><a href="'.$lev3->getUrl().'">'.$lev3->getName().'</a></li>';
                     }
                                       // 3st level had categories? -> go on
            $lev3Size = sizeof($lev3->getChildren());
   
            if ($lev3->getId() == $path3) {
            if ($lev3Size != "0"):
                       
                           $navLeftCol .= '<ul class="nav4rd">';
               //$navLeftCol .= '<li><strong>Unterkategorien3</strong></li>';



  // START 4nd level categories
               foreach ($lev3->getChildren() as $lev4):
                   
                  if ($lev4->isOnline()):
   
                  // 4nd level - active link
                      if ($lev4->getId() == $path4) {
                        $navLeftCol .= '<li><a class="current" href="'.$lev4->getUrl().'">'.$lev4->getName().'</a>';
                        $sitePath .= ' ›› <a href="'.$lev4->getUrl().'">'.$lev4->getName().'</a>';
                        $titlePath .= ' >> '.$lev4->getName();
                     }
                     // 4nd level - no active link
                      else {
                        $navLeftCol .= '<li><a href="'.$lev4->getUrl().'">'.$lev4->getName().'</a></li>';
                     }
   
   endif;
             
     
            endforeach;

         // END 4nd level categories             
            endif;
          $navLeftCol .= '</li>';   
            }


           // END 3nd level categories
           endif; // END by if ($lev1Size != "0"):               
        endforeach;
        //$navHeader .= '</li>'; 
    endif;
    if ($navLeftCol != "") $navLeftCol .= '</li>';
                                 $navLeftCol .= '</ul>';
                             
     }

            // END 2nd level categories
           endif; // END by if ($lev1Size != "0"):     
       
        endforeach;
       // $navHeader .= '</li>';
          $navLeftCol .= '</ul>';
                         
    endif;
    if ($navLeftCol != "")  $navLeftCol .= '';
                               
                               
                               
     }
  endif; // END by if ($lev1->isOnline())
}


$navHeader .= '</ul>';
$navLeftCol .= '</div>';

// END 1st level categories
?>


Liebe Grüße
Sindy
sindy
 

Beitragvon alexschuengel » 23. Jan 2009, 19:24

hallo.
die navi entspricht im westentlichen dem was ich suche :) von daher bin ich sehr froh sie endlich in der form gefunden zu haben.

allerdings ist sie nicht mehr valide wenn man eine seite der 3.ebene anklickt.
dann kommt es bei mir zu problemen in der darstellung, weil die liste nicht korrekt verschachtelt ist... :(
Benutzeravatar
alexschuengel
 
Beiträge: 150
Registriert: 18. Mär 2008, 17:43


Zurück zu Templates/Navigationen [R4]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast