Darstellungsproblem in geteilter Hauptnavigation

Gesperrt
Andreas
Beiträge: 254
Registriert: So 16. Nov 2003, 14:48
Wohnort: Reichshof
Kontaktdaten:

Darstellungsproblem in geteilter Hauptnavigation

Beitrag von Andreas » Mo 23. Jul 2012, 13:45

Hallo zusammen,

ich verwende die geteilte Hauptnavigation. Funktioniert auch alles wie gewünscht.
Nun benötige ich jedoch unterhalb der 2. Navigationsebene (bzw. unter deren Darstellung) ein "margin von 11px".
Im Modul wird ein Template Namens mnavi2_end.html aufgerufen. Hier hatte ich die entsprechende CSS-Anweisung eingebaut. Dieses Template wird aber anscheinend nicht aufgerufen...
Kann mir da vielleicht jemand helfen?

Hier der Output des Moduls:

Code: Alles auswählen

<?php

echo "<div id=\"hauptnavi_ebene2\">";

/* Include Template Class */
include_once($cfg["path"]["contenido"] . 'classes/class.template.php');

/**
 * Array storing alle the
 * navigation data
 */
$navitems = array();


/* Template Instance */
$tpl = new Template;

$sql = "SELECT
            A.idcat,
            C.name,
          C.public,
             C.idcatlang
        FROM
            ".$cfg["tab"]["cat_tree"]." AS A,
            ".$cfg["tab"]["cat"]." AS B,
            ".$cfg["tab"]["cat_lang"]." AS C
        WHERE
            A.idcat     = B.idcat   AND
            B.idcat     = C.idcat   AND
            B.idclient  = '$client' AND
            C.idlang    = '$lang'   AND
            C.visible   = '1'       AND
            B.parentid  = '$sel_idcat'
        ORDER BY
            A.idtree";

$db->query($sql);

while ( $db->next_record() ) {

        /* Check for external redirects... */
        $sql = "SELECT
                    a.external_redirect AS ext,
                    a.idartlang AS idartlang
                FROM
                    ".$cfg["tab"]["art_lang"]." AS a,
                    ".$cfg["tab"]["cat_art"]." AS b,
                    ".$cfg["tab"]["cat"]." AS c
                WHERE
                    b.idcat     = '".$db->f("idcat")."' AND
                    c.idclient  = '".$client."' AND
                    c.idcat     = b.idcat AND
                    a.idart     = b.idart AND
                    a.idlang    = '".$lang."'";

        $db2->query($sql);
        #$db2->next_record();
      $flag = false;
      while ($db2->next_record()&&!$flag) {
           if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
           {
            $flag = true;
               $target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
     
               $navitems[$db->f("idcat")] = array("idcat"  => $db->f("idcat"),
                                                  "name"   => $db->f("name"),
                                                  "public" => $db->f("public"),
                                            "idcatlang" => $db->f("idcatlang"),
                                                  "target" => $target);
           }
      }
}

/* Create Navigation Array */
if(($sel_idcat=='')||($sel_idcat=='0')){
    $cApiClient = new cApiClient($client);
    $sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage');
}

nav($sel_idcat);

/* Start Output buffer */
ob_start();

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

   if (checkCatPermission($data['idcatlang'],$data['public'])) {







  /* 2. Navigation level */
  if( is_array($data['sub']) ) {
   foreach( $data['sub'] as $key => $data ) {
    if( checkCatPermission($data['idcatlang'],$data['public']) ) {
     $tpl->reset();
     $tpl->set('d', 'NAME',  $data['name']);
     $tpl->set('d', 'UL_STAGE', '3');
     $tpl->set('d', 'LI_STAGE', '2');
     $tpl->set('d', 'TARGET', $data['target']);
     $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
     $tpl->next();
     if( $idcat == $data['idcat'] && empty($data['sub']) ) {               
        $tpl->generate('templates/mnavi2_on.html', 0, 0);                     # AKTIVER PUNKT HAT KEINE SUBCATS
     } elseif( $idcat == $data['idcat'] && !empty($data['sub']) ) {
        $tpl->generate('templates/mnavi2_on_open.html', 0, 0);                # AKTIVER PUNKT HAT SUBCATS
       } elseif( $idcat != $data['idcat'] && is_array($data['sub']) && catIsChildOf($sel_idcat, $data['idcat']) ) {
          $tpl->generate('templates/mnavi2_off_open.html', 0, 0);               # PASSIVER PUNKT HAT SUBCATS
         } else {
            $tpl->generate('templates/mnavi2_off.html', 0, 0);                    # PASSIVER PUNKT HAT KEINE SUBCATS
           }

           if( is_array( $second_subdata ) ) {
              $last_cat = end( $second_subdata );
            if( $data['idcat'] == $last_cat['idcat'] ) {
               $tpl->generate('templates/mnavi2_end.html', 0, 0);
            } // end if
           } // end if
           $third_subdata = $data['sub'];

     /* 3. Navigation level */
     if( is_array($data['sub']) ) {
      foreach( $data['sub'] as $key => $data ) {
         if( checkCatPermission($data['idcatlang'],$data['public']) ) {
        $tpl->reset();
        $tpl->set('d', 'NAME',  $data['name']);
        $tpl->set('d', 'UL_STAGE', '4');
        $tpl->set('d', 'LI_STAGE', '3');
        $tpl->set('d', 'TARGET', $data['target']);
        $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
        $tpl->next();
        if( $idcat == $data['idcat'] && empty($data['sub'])) {
           $tpl->generate('templates/mnavi3_on.html', 0, 0);
          } elseif( $idcat == $data['idcat'] && !empty($data['sub']) ) {
             $tpl->generate('templates/mnavi3_on_open.html', 0, 0);
            } elseif( $idcat != $data['idcat'] && is_array($data['sub']) && catIsChildOf($sel_idcat, $data['idcat']) ) {
               $tpl->generate('templates/mnavi3_off_open.html', 0, 0);
              } else {
                 $tpl->generate('templates/mnavi3_off.html', 0, 0);
                }

                if( is_array($third_subdata) ) {
                   $last_cat = end( $third_subdata );
                   if( $data['idcat'] == $last_cat['idcat'] ) {
                      $tpl->generate('templates/mnavi3_end.html', 0, 0);
                 } // end if
                } // end if
                $forth_subdata = $data['sub'];

        /* 4. Navigation level */
        if( is_array($data['sub']) ) {
         foreach( $data['sub'] as $key => $data) {
          if( checkCatPermission($data['idcatlang'],$data['public']) ) {
           $tpl->reset();
           $tpl->set('d', 'NAME',  $data['name']);
           $tpl->set('d', 'UL_STAGE', '5');
           $tpl->set('d', 'LI_STAGE', '4');
           $tpl->set('d', 'TARGET', $data['target']);
           $tpl->set('d', 'HREF',  $sess->url('front_content.php?idcat='.$data['idcat']));
           $tpl->next();
           if( $idcat == $data['idcat'] && empty($data['sub']) ) {
              $tpl->generate('templates/mnavi4_on.html', 0, 0);
           } elseif( $idcat == $data['idcat'] && !empty($data['sub']) ) {
              $tpl->generate('templates/mnavi4_on_open.html', 0, 0);
           } elseif( $idcat != $data['idcat'] && is_array($data['sub']) && catIsChildOf($sel_idcat, $data['idcat']) ) {
              $tpl->generate('templates/mnavi4_off_open.html', 0, 0);
           } else {
              $tpl->generate('templates/mnavi4_off.html', 0, 0);
           }

           if( is_array($forth_subdata) ) {
              $last_cat = end( $forth_subdata );
            if( $data['idcat'] == $last_cat['idcat'] ) {
               $tpl->generate('templates/mnavi4_end.html', 0, 0);
            } // end if
           } // end if
           $fith_subdata = $data['sub'];

           /* 5. Navigation level */
           if( is_array($data['sub']) ) {
              foreach( $data['sub'] as $key => $data ) {
             if( checkCatPermission($data['idcatlang'],$data['public']) ) {
              $tpl->reset();
              $tpl->set('d', 'NAME', $data['name']);
              $tpl->set('d', 'UL_STAGE', '6');
              $tpl->set('d', 'LI_STAGE', '5');
              $tpl->set('d', 'TARGET', $data['target']);
              $tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
              $tpl->next();
              if( $idcat == $data['idcat'] && empty($data['sub']) ) {
                 $tpl->generate('templates/mnavi5_on.html', 0, 0);
              } else {
                 $tpl->generate('templates/mnavi5_off.html', 0, 0);
              }

              if( is_array($fith_subdata) ) {
                 $last_cat = end($fith_subdata);
                 if( $data['idcat'] == $last_cat['idcat'] ) {
                    $tpl->generate('templates/mnavi5_end.html', 0, 0);
                 } // end if
              } // end if

             } // end if

            } // end foreach
           } // end if
          } // end if
         } // end foreach
        } // end if
       } // end if
      } // end foreach
     } // end if
    } // end if
   } // end foreach
  } // end if
 } // end if
} // end foreach

/* Read out buffer */
$html = ob_get_contents();

/* Clean buffer */
ob_end_clean();

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

?>
</div>
Gruß
Andreas

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Re: Darstellungsproblem in geteilter Hauptnavigation

Beitrag von yodatortenboxer » Mo 23. Jul 2012, 16:18

Hallo Andreas,

hast du die Seite irgendwie online zum anschauen?
Wie ist der Inhalt der mnavi2_end.html und warum denkst du, das sie nicht aufgerufen wird?

Soweit ich das sehen kann, wird hier entweder eine mnavi2_on.html, mnavi2_on_open.html, mnavi2_off_open.html oder mnavi2_off.html und am ende eine mnavi2_end.html aufgerufen.
Hast du die alle angepasst?

Gruß Ralf
Schöne Grüße von Usedom
Ralf

Andreas
Beiträge: 254
Registriert: So 16. Nov 2003, 14:48
Wohnort: Reichshof
Kontaktdaten:

Re: Darstellungsproblem in geteilter Hauptnavigation

Beitrag von Andreas » Mo 30. Jul 2012, 12:06

Hallo Ralf,

eigentlich brauche ich nur eine einfache Abfrage nach dem Motto:
Wenn eine Unternavigation vorhanden ist, zeige

Code: Alles auswählen

echo "<div id=\"hauptnavi_ebene2\">";
(am Begin des Moduls), ansonsten zeige nichts.
Irgendwie stehe ich da auf dem Schlauch...
Gruß
Andreas

yodatortenboxer
Beiträge: 424
Registriert: Do 22. Jan 2004, 14:45
Wohnort: Kölpinsee auf Usedom
Kontaktdaten:

Re: Darstellungsproblem in geteilter Hauptnavigation

Beitrag von yodatortenboxer » Mo 30. Jul 2012, 12:47

Hallo Andreas,

so eine Abfrage ist, soweit ich sehen kann, schon im Modul vorhanden.
In Zeile 85 steht:

Code: Alles auswählen

foreach ($navitems as $key => $data) {
womit die erste Ebene der Navigation ausgelesen wird.

In Zeile 95 steht dann:

Code: Alles auswählen

  /* 2. Navigation level */
  if( is_array($data['sub']) ) {
   foreach( $data['sub'] as $key => $data ) {
Das bedeutet, ist bei diesem Navipunkt ein Untermenü, lese diese als nächstes erst einmal alle aus.

In Zeile 124 steht:

Code: Alles auswählen

     /* 3. Navigation level */
     if( is_array($data['sub']) ) {
      foreach( $data['sub'] as $key => $data ) {
Das bedeutet, ist bei diesem Navipunkt 2 ein weiteres Untermenü, lese diese als nächstes erst einmal alle aus.

Und so geht es immer weiter.

Der Aufbau ist also grob gesehen:

Code: Alles auswählen

foreach ($navitems as $key => $data) {
     // hier der Code...

     /* 2. Navigation level */
     if( is_array($data['sub']) ) {
          foreach( $data['sub'] as $key => $data ) {
               // hier der Code...

               //* 3. Navigation level */
               if( is_array($data['sub']) ) {
                    foreach( $data['sub'] as $key => $data ) {
                    // hier der Code...
                   // und die Schleife geht immer mehr in die Tiefe...

                    } // end foreach( $data['sub'] as $key => $data ) {
               } // end Bereich Navi 3 if( is_array($data['sub']) ) {
          } // end foreach( $data['sub'] as $key => $data ) {
     } // end Bereich Navi 2 if( is_array($data['sub']) ) {
} // end foreach ($navitems as $key => $data) {
Theoretisch müsste also nun dein Echo mit in diese Schleife gelegt werden.

Code: Alles auswählen

foreach ($navitems as $key => $data) {
     // hier der Code...

     /* 2. Navigation level */
     if( is_array($data['sub']) ) {

          // HIER DAS ECHO FÜR DEN START echo "<div id=\"hauptnavi_ebene2\">";

          foreach( $data['sub'] as $key => $data ) {
               // hier der Code...

               //* 3. Navigation level */
               if( is_array($data['sub']) ) {
                    foreach( $data['sub'] as $key => $data ) {
                    // hier der Code...
                   // und die Schleife geht immer mehr in die Tiefe...

                    } // end foreach( $data['sub'] as $key => $data ) {
               } // end Bereich Navi 3 if( is_array($data['sub']) ) {
          } // end foreach( $data['sub'] as $key => $data ) {

          // HIER DAS ECHO FÜR DAS ENDE echo "</div>";

     } // end Bereich Navi 2 if( is_array($data['sub']) ) {
} // end foreach ($navitems as $key => $data) {
ABER:
So ist das natürlich nicht machbar, da du ja hier Templates einbindest.
Und zwar startest du ja mit dem Templates und hier ist es wichtig, was in den Templates drin steht.
Startet dein Template beispielsweise mit einem ul und die Unternavipunkte sind alle ul li sieht dein Quelltext am ende als Beispiel so aus:

Code: Alles auswählen

<ul>
     <li></li>
     <li>
          <ul>
               <li></li>
               <li></li>
          </ul>
     </li>
     <li></li>
     <li></li>
</ul>
Würdest du nun also einfach ein echo = "<div>" einfügen, könnte folgendes passieren:

Code: Alles auswählen

<ul>
     <li></li>
     <li>
          <div> <= Problem 
          <ul>
               <li></li>
               <li></li>
          </ul>
          </div> <= Problem 
     </li>
     <li></li>
     <li></li>
</ul>
Gruß Ralf
Schöne Grüße von Usedom
Ralf

Gesperrt