Links zweiter Ebene nur, wenn erste Ebene aufgerufen

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

Links zweiter Ebene nur, wenn erste Ebene aufgerufen

Beitragvon bodo » 20. Sep 2005, 14:52

Hey Leute,

am Beispiel des Demo-Templates:

Hier ist der Link "Leistungen" und direkt drunter die beiden Links "CMS" und "Template Design".

Wie lässt es sich realisieren, die beiden Links unter "Leistungen" aufzuklappen, wenn "Leistungen" geklickt wurde?

Und / oder:

Wie lassen sich diese beiden Links auf einer separaten Fläche (z.B. in der Kopfzeile) darstellen.

Schöne Grüße

Bodo
bodo
 
Beiträge: 6
Registriert: 20. Sep 2005, 14:51

Beitragvon Thomas.Blum » 20. Sep 2005, 15:05

Hej,

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

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];


foreach (OOCategory::getRootCategories() as $lev1):
  if($lev1->isOnline()):
    echo '<a class="menu"  href="'.$lev1->getUrl().'">&raquo;&nbsp;'.$lev1->getName().'</a>';
   if ($lev1->getId() == $path1) :
    $lev1Size = sizeof($lev1->getChildren());

    if($lev1Size != "0"):
      foreach ($lev1->getChildren() as $lev2):
        if ($lev2->isOnline()):
          echo '<a class="submenu" href="'.$lev2->getUrl().'">&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev2->getName().'</a>';
        endif;
        // ANFANG  EBENE 3
       $lev2Size = sizeof($lev2->getChildren());
       if($lev2Size != "0" && in_array($lev2->getId(), $path)):
         foreach ($lev2->getChildren() as $lev3):
           if ($lev3->isOnline()):
             echo '<a class="submenu" href="'.$lev3->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev3->getName().'</a>';
           endif;
         endforeach;
       endif;
       // ENDE EBENE 3
    endforeach;
  endif;
  endif;
endif;
endforeach;
/*
$navigation = OOTemplate::getNavigation();
print $navigation;
*/
?>


Zu deiner zweiten Frage:
Ich würde alle Kategorien der 1ten und der 2ten Ebene in einem Skalar speichern. Und dann das Navi-Template im Default-Template vor dem Doctype includieren. Dort wo du deine Hauptnavigation haben willst

Code: Alles auswählen
print $main-nav


Dort wo die Unterkategorien erscheinen sollen

Code: Alles auswählen
print $sub-nav;



Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon bodo » 21. Sep 2005, 09:56

cool, sehr geil.

Ich habe mir es etwas angepasst.
Geht sehr gut! Vielen Dank!
bodo
 
Beiträge: 6
Registriert: 20. Sep 2005, 14:51

Beitragvon Thomas.Blum » 21. Sep 2005, 10:19

DaNichtFür

wo kann mna isch das mal ansehen?

Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon bodo » 21. Sep 2005, 10:38

Noch gar nicht, weil im Moment nur lokal.

Hier ist das umgebaute Menü, welches Du in das Template einfügst:


"<div id="sub-block2">" suchen und danach folgendes einfügen:

Code: Alles auswählen
<!-- VERTIKALES MENUE-->

<?php


$path = explode( '|', $this->getValue("path").$this->getValue("article_id"));
//array_shift( $path);

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];



echo '<ul class="navigation">';
foreach (OOCategory::getRootCategories() as $lev1):
  if($lev1->isOnline()):
    echo '<li><a href="'.$lev1->getUrl().'">&nbsp;'.$lev1->getName().'</a>';
   if ($lev1->getId() == $path1) :


    $lev1Size = sizeof($lev1->getChildren());
      if($lev1Size != "0"):
      echo '<ul>';
      foreach ($lev1->getChildren() as $lev2):
        if ($lev2->isOnline()):
          echo '<li><a href="'.$lev2->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;'.$lev2->getName().'</a></li>';
        endif;
        // ANFANG  EBENE 3


       $lev2Size = sizeof($lev2->getChildren());
       if($lev2Size != "0" && in_array($lev2->getId(), $path)):
      echo '<ul>';
         foreach ($lev2->getChildren() as $lev3):
           if ($lev3->isOnline()):
             echo '<li><a href="'.$lev3->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'.$lev3->getName().'</a></li>';
           endif;
         endforeach;
        echo '</ul>';
       endif;
       // ENDE EBENE 3
    endforeach;
echo '</ul>';
  endif;
  endif;
echo '</li>';
endif;
endforeach;
echo '</ul>';


/*
$navigation = OOTemplate::getNavigation();
print $navigation;
*/
?>


<!--  ENDE VERTIKALES MENUE -->
bodo
 
Beiträge: 6
Registriert: 20. Sep 2005, 14:51

Beitragvon webstar » 3. Nov 2005, 16:08

Also ich versuche im Prinzip das gleiche zu machen. Ich möchte gern die Kategorien (also Hauptnavi) oben waagerecht dargstellt haben.Das funktioniert auch so ganz gut. Jetz möchte ich das wenn einer der Hauptnavi-Punkte gewählt wird, die Unternavigation (also alle darin befindlichen Artikel) links senkrecht angezeigt werden.Die oben stehenden Beispiele haben scheinbar genau diesen Sinn, nur weigere ich mich, dies zu übernehmen ohne es zu verstehen. :lol:

Also mein Template sieht folgendermaßen aus:
Code: Alles auswählen
<!--Headerspalte Ende-->

<!--Navispalte-->
<tr>
   <td bgcolor="#999999" class="kategorie" style="border-top:3px solid #FFFFCC; border-bottom: 3px solid #FFFFCC;"  colspan="2">
        <?php
                        $path = explode( '|', $this->getValue("path").$this->getValue("article_id"));
                        $path1 = $path[1];

         foreach (OOCategory::getRootCategories() as $lev1):
            if($lev1->isOnline()):
               echo '&nbsp;<a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>&nbsp;|';
                                endif;
                        endforeach;
        ?>
   </td>
</tr>
<!--Navispalte Ende-->

<!--Artikel-Anzeigespalte-->
<tr>
        <td align="left" valign="top" class="artikel">
        <?php
         if($lev1->getId() == $path1):
         $lev1Size = sizeof($lev1->getChildren());
               if($lev1Size != "0"):
                  echo '<ul>';
                  foreach ($lev1->getChildren() as $lev2):

                     if ($lev2->isOnline()):
                        echo '<li><a href="'.$lev2->getUrl().'">'.$lev2->getName().'</a></li>';
                     endif;
                  endforeach;
                  echo '</ul>';
               endif;
           endif;
       
        ?>
        </td>


<!--Inhaltsspalte-->
   <td align="center" class="content">
        <?php
        echo $this->getArticle();
        ?>
   </td>
</tr>
<!--Inhaltsspalte Ende-->

</table>
<!--Haupttabelle Ende-->

</body>
</html>


Wie zu sehen ist, hab ich versucht einige Sachen aus der Demo mit einigen aus diesem Post zu vereinen. Aber irgendwie will es nicht funktionieren.

Wozu braucht man 3 Ebenen? Soweit ich das sehe ruft man zuerst die Kategorien auf und lässt diese darstellen und dann zu jeder einzelnen bei bedarf die darin befindlichen Artikel. Also wozu diese 3. Ebene? Kann mir jemand erklären was es damit auf sich hat. Zudem, was macht diese Explode-Funktion? Aufrufe bestimmter Felder aus der DB?
Unwissenheit schützt nicht vor Mittäterschaft.
webstar
 
Beiträge: 54
Registriert: 1. Nov 2005, 11:51
Wohnort: Erfurt

Beitragvon Gast » 4. Nov 2005, 09:11

Hey,

also ich habe mich nicht geweigert es ohne zu verstehen zu übernehmen.
OK ein klein wenig habe ich es verstanden.

Warum die 3 Ebenen?
Gegenfrage: Warum nicht sogar 5?

Es ist einfach eine Entscheidungsfrage.
Die erste Ebene könnte "Freizeit" heißen, die zweite Sport und die dritte Tennis.


Schöne Grüße

Bodo
Gast
 

Beitragvon Thomas.Blum » 4. Nov 2005, 10:00

Hej,
webstar hat geschrieben:Wozu braucht man 3 Ebenen?


Ebene oder auch Kategorien sollten zur Struktur der Webseite dienen. Also die Struktur ist gleich die Navigation. Ein schönes Beispiel hat ja Bodo bereits geschrieben.

Freizeit -> Sport -> Tennis

Das wäre eine Struktur mit 3 Ebenen. Wenn du nun zum Theme Tennis nix weiter schreiben willst, ausser einen Artikel, kannst du unter der Ebene natürlich auch einen Artikel "Tennis" anlegen. Mit einer Artikelliste bzw. einem Teaser-Modul könntest du dir dann eben die Artikel auch als Navigationsliste bzw. Teaser darstellen lassen.

Willst du aber mehere Arikel zum Thema Tennis schreiben, dann eine weitere Kategorie anlegen und dort die Artikel "Der Tennisschläger", "Der Tennisball" usw. ablegen. Per Teaser oder Artikelliste dann die Artikel kurz darstellen und auf den kompletten Artikel verweisen.

Hoffe du verstehst, wenn nicht fragen

Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon webstar » 4. Nov 2005, 12:26

Also gut. Ich möchte 2 Ebenen haben. Die erste soll wie gesagt die Hauptnavigation (also die angelegten Kategorien) sein und die Unternavi die zu einer Kategorie gehörigen Artikel. Was ist denn an meinem Template falsch? Ich hab ewig versucht den fehler zu finden. Und was genau macht dieses Explode bzw wozu legt man die $path-Variablen an?
Unwissenheit schützt nicht vor Mittäterschaft.
webstar
 
Beiträge: 54
Registriert: 1. Nov 2005, 11:51
Wohnort: Erfurt

Beitragvon Markus.Staab » 4. Nov 2005, 13:31

Hi Webstar

webstar hat geschrieben:Und was genau macht dieses Explode bzw wozu legt man die $path-Variablen an?


In den Path Variablen steht dann drinne, wo sich der User im Frontend gerade befindet.

z.b.

Code: Alles auswählen
echo $path0  // 3
echo $path1  // 5
echo $path2  // 7


Das sind die IDs des "Pfades".

d.h. in der Struktur würde das so aussehen

News(id=3) - Sport(id=5) - Fussball(id=7)

Du weisst also auf Welcher Ebene in der Struktur welche Kategorie gewählt wurde..

Gruß,
Markus
Benutzeravatar
Markus.Staab
Entwickler
 
Beiträge: 9781
Registriert: 29. Jan 2005, 14:50
Wohnort: Aschaffenburg/Germany

Beitragvon webstar » 5. Nov 2005, 13:19

Also es will einfach nicht funktionieren. Ich habe jetzt sogar schon mal ein völlig leeres Template angelegt das gnau den Quelltext aus dem Downloadbereich enthält.

Code: Alles auswählen
<html>
<body>

<?php
$path = explode( '|', $this->getValue("path").$this->getValue("article_id"));

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];

echo $path1;
echo $path2;
echo $path3;

foreach (OOCategory::getRootCategories() as $lev1):
   if($lev1->isOnline()):
      echo '<a class="menu"  href="'.$lev1->getUrl().'">&raquo;&nbsp;'.$lev1->getName().'</a>';
      if ($lev1->getId() == $path1) :
         $lev1Size = sizeof($lev1->getChildren());

         if($lev1Size != "0"):
            foreach ($lev1->getChildren() as $lev2):
               if ($lev2->isOnline()):
                  echo '<a class="submenu" href="'.$lev2->getUrl().'">&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev2->getName().'</a>';

               endif;
               // ANFANG  EBENE 3
               $lev2Size = sizeof($lev2->getChildren());
               if($lev2Size != "0" && in_array($lev2->getId(), $path)):
                  foreach ($lev2->getChildren() as $lev3):
                     if ($lev3->isOnline()):
                        echo '<a class="submenu" href="'.$lev3->getUrl().'">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&bull;&nbsp;'.$lev3->getName().'</a>';
                     endif;
                  endforeach;
               endif;
               // ENDE EBENE 3
            endforeach;
         endif;
      endif;
   endif;
endforeach;
?>

</body>
</html>


Die $path-Variablenm hab ich mir nur ausgeben lassen um zu sehen was die enthalten. Bei Klick auf die "Home"-Kategorie wird die !!EINE!! Zahl 1 angezeigt, bei klick auf die zweite Kategorie die 2. Irgendwie versteh ich das alles nich so ganz. Was is denn nur falsch. In beiden Kathegorien befinden sich jeweils ein Startartikel, aber selbst wenn ich noch einen oder mehr hinzufüge erscheinen sie nicht.

So langsam bin ich am verzweifeln, ich raff das nich.Am meisten Probleme macht mir trotz Erklärung dieser Teil:

Code: Alles auswählen
$path = explode( '|', $this->getValue("path").$this->getValue("article_id"));

$path1 = $path[1];
$path2 = $path[2];
$path3 = $path[3];


Ich weiß das is alles Basiswissen für PHP, aber im objektorientierten denken bin ich echt ne Null.
Unwissenheit schützt nicht vor Mittäterschaft.
webstar
 
Beiträge: 54
Registriert: 1. Nov 2005, 11:51
Wohnort: Erfurt

Beitragvon Thomas.Blum » 5. Nov 2005, 14:00

Hej,

ein Artikel befindet sich in einer bestimmten Kategorie. Rufst du einen bestimmten Artikel auf, rufst du auch gleichzeitig die Pfadangaben dieses Artikels auf.

Die Pfadangaben für einen Artikel (ID 20) der in der Kategorie HOME (ID 1) in der SubKategorie IRGENDWAS (ID 5) hat somit die Pfadangaben |1|5|20|.

Mit der explode Funktion erhälst du ein Array und zwar mit den Zahlen der Pfadangaben für diesen Artikel.

in $path wäre somit array(1,5,20). Die "|" fallen raus, da du nach diesem Zeichen das ganze ausliest.

Um nun den Verlauf (wo befindet sich genau der Artikel in der Struktur) des Artikels herauszufinden, hast du in

$path1 = $path[0] -> 1
$path2 = $path[1] -> 5
$path3 = $path[2] -> 20

die Ids der Kategorien sowie die ArikelID.

grüße Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon webstar » 5. Nov 2005, 14:05

Hmm ok ok, soweit hab ich das grob verstanden. Aber wieso werden denn lediglich Die Kategrien angezeigt und keine darunter befindlichen Artikel?
Bei den meisetn Usern hier hat doch der Quelltext ausm Downloiad auch auf anhieb funktioniert, wieso dann hier nicht?
Unwissenheit schützt nicht vor Mittäterschaft.
webstar
 
Beiträge: 54
Registriert: 1. Nov 2005, 11:51
Wohnort: Erfurt

Beitragvon Thomas.Blum » 5. Nov 2005, 14:15

Es werden nur alle Kategorien angezeigt und nicht die Artikel die in der Kategorie sind. Gib mal nen Zugang und schreibe noch mal genau auf was du von dem Script erwartest.

Thomas
blumbeet - web.studio - Dresden - 0351 217 6225
webbude - Blog über CSS.XHTML.REX
Ein Wunschzettel
Benutzeravatar
Thomas.Blum
Entwickler
 
Beiträge: 4670
Registriert: 24. Aug 2004, 21:11
Wohnort: Dresden

Beitragvon webstar » 5. Nov 2005, 14:51

Also das Problem hat sich bene von alleine erledigt. Das Problem lag wie immer beim User selbst. Ich hatte bisher nicht mitbekommen, das man innerhalb einer Kategorie nocheinmal Kategorien anlegen kann. Oje, jetz hab ich sinnlos Wellen gemacht. Also sorry nochmal, aber das war wohl n typisches Layer 8 Problem :lol:
Unwissenheit schützt nicht vor Mittäterschaft.
webstar
 
Beiträge: 54
Registriert: 1. Nov 2005, 11:51
Wohnort: Erfurt


Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 0 Gäste