Vertikale Navigation mit Kategorien und Artikel?

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

Vertikale Navigation mit Kategorien und Artikel?

Beitragvon veturi » 6. Mai 2007, 16:12

Hallo lieber "Redaxer" :wink: ...
bin gerade dabei mich in Redaxo einzuarbeiten und bin bis jetzt ganz begeistert, was die Mehrsprachigkeit angeht...
stehe aber jetzt vor einem wahrscheinlich kleinem Problem mit der Navigation:
Es soll eine vertikale Navigation werden, in der nicht nur die Kategorien, sondern auch die Artikel der jeweils aktiven Kategorie in der Navi angezeigt werden, also etwa so:

Kategorie1
Kategorie2
Subkategorie1
Artikel1
Artikel2
Artikel3
Kategorie3
Kategorie4
usw...
als Template habe ich bis jetzt folgendes Beispiel genommen:


Code: Alles auswählen
<?PHP
//---TEMPLATE MODIFIED BY------------------------
//-- Michael Seifried
//-- michael@m-seifried.de
//-- www.tanzclub-hanau.de
//-----------------------------------------------
// EXPLODE PATH


/*  Einbinden wie folgt:

<div id="navigation">
  <?php print $navLeftCol; ?>
</div>
verwendet nur eine ul liste, für beliebige viele Ebenen
Ebenen werden durch CSS formatiert
Aktive Seite markiert
Folgende Optionen:
1. Es wird immer die Top Ebene angezeigt, Brotkrümel bis zur aktuellen Ebene, dann die aktuelle Ebene komplett.
2. Brotkrümel bis zur aktuellen Ebene, dann Ebene komplett
3. Alle aktiven Ebenen

*/

function NavigationsListe(&$navLeftCol ,$lev,$Path,$PathIndex)
{
    if(! $lev->isOnline())                  // offline ausblenden
        return;
    $time = time();
    // Falls zur Zeit nicht online --> ausblenden
    if(($lev->getValue("online_from") > $time) || ($lev->getValue("online_to") < $time))
        return;

    if ($lev->getId() == $Path[$PathIndex])         // Eintrag ist im aktuellen Pfad, also selbst oder Subkategorie aktiv
    {
        $levSize = sizeof($lev->getChildren());
        if($levSize != "0")                   // es gibt Kinder
        {
            if((count($Path) > $PathIndex) &&($Path[$PathIndex + 1] > 0))
            {
                // History $lev
                $navLeftCol .= '<li class="navhistory"><a class="level'.$PathIndex.'" href="'.$lev->getUrl().'">'.$lev->getName().'</a></li>'."\n";
            }
            else
            {
                // aktiv $lev                                   // wir sind aktiv
                $navLeftCol .= '<li class="active"><a class="level'.$PathIndex.'" href="'.$lev->getUrl().'">'.$lev->getName().'</a></li>';

            }
            // die Kinder noch anzeigen
            foreach($lev->getChildren() as $sublevel)       // Subebene normal anzeigen
            {
                NavigationsListe($navLeftCol,$sublevel,$Path,$PathIndex + 1);
            }
        }
        else
        {
            // aktiv $lev
            $navLeftCol .= '<li class="active"><a class="level'.$PathIndex.'" href="'.$lev->getUrl().'">'.$lev->getName().'</a></li>\n';
            return;
        }
    }
    else
    {
         if(
//            1 ||                          // alle Ebenen anzeigen
            ($PathIndex == 1) ||            // Top Level anzeigen
            ((count($Path) > $PathIndex) && ($Path[$PathIndex + 1] == 0))    //unterste Ebene anzeigen
            )
        {
            // normal $lev
            $navLeftCol .= '<li><a class="level'.$PathIndex.'" href="'.$lev->getUrl().'">'.$lev->getName().'</a></li>\n';
        }
    }
}


/* START 1st level categories */
$Path = explode("|",$this->getValue("path").$this->getValue("article_id")."|");
$navLeftCol .= '<ul ID="nav" class="nav1st">\n'; // die ID #nav ist nur für das javascript für den IE wichtig.

foreach (OOCategory::getRootCategories() as $lev1)
{
    NavigationsListe($navLeftCol,$lev1,$Path,1);
}
$navLeftCol .= '</ul>\n';



?>




Wie bekomme ich denn nun noch die Artikel da rein?
hmmm... falls irgendjemad das so schon hat, wäre ich sehr dankbar für nen Hinweis... :)
Danke im Voraus...
suche solange weiter...
veturi
 
Beiträge: 3
Registriert: 6. Mai 2007, 14:46

hmmm... hab ich ein Verständnisproblem?

Beitragvon veturi » 11. Mai 2007, 13:30

also relativ viele Leute haben meine Frage gelesen, aber keiner hat geantwortet... hmmm... hab ich vielleicht nur ein Problem, das Konzept von Redaxo richtig zu verstehen?
Hier noch mal meine Problemstellung:
Kunde verkauft Artikel in verschiedenen Kategorien, in jede Kategorie kommen also im Laufe der Zeit mehrere Artikel. Diese Artikel möchte ich im Menü angezeigt bekommen, aber auch als Teaser in anderen Bereichen, z.B. die neuesten auf der Startseite.
Wie sollte ich Eurer Meinung nach vorgehen?
Bin für jeden Tipp dankbar !!! :)

Ralf
veturi
 
Beiträge: 3
Registriert: 6. Mai 2007, 14:46

Beitragvon Thomas.Blum » 11. Mai 2007, 14:26

Hej,

lege doch für jeden Artikel eine Kategorie an und den Inhalt dann im Startartikel.

vg 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 veturi » 11. Mai 2007, 18:30

Hi Thomas,
danke für die schnelle Antwort...
tbaddade hat geschrieben:,
lege doch für jeden Artikel eine Kategorie an und den Inhalt dann im Startartikel.

hatte ich mir auch schon überlegt, aber ist es nicht für den Anwender sehr umständlich, wenn er für jeden "Artikel" erst ne neue Kategorie anlegen muss um dann den Startartikel dort zu ändern (den wollte ich eigentlich nutzen um eine Artikelliste, also quasi ein Inhaltsverzeichnis zu erstellen). Und es wäre auch viel umständlicher an die Teaser zu kommen, da ich ja dann die ganzen Unterkategorien durchsuchen müsste... hmm...
Noch irgend eine andere Idee?
vg...
Ralf
veturi
 
Beiträge: 3
Registriert: 6. Mai 2007, 14:46

Beitragvon svenalbert » 12. Mai 2007, 09:41

Hi,

kombiniere doch einfach ein navigations-template deiner wahl mit dem artikelliste modul.

das sollte dann sicherlich das machen, was du bezweckst.

Sven
Benutzeravatar
svenalbert
 
Beiträge: 1295
Registriert: 24. Nov 2005, 16:21
Wohnort: Clausthal-Zellerfeld / lower saxony

Beitragvon aleccus » 19. Mai 2007, 22:07

Hallo, darf ich mich mal kurz einklinken?

Ich finde es essentiell für kleinere Websites, die keine 2nd Level Nav brauchen auch direkt die Artikel in der Nav-Struktur anzuzeigen, und zwar nicht über diesen Umweg mit der Kategorie/Startartikel-Lösung.

Hat da keiner eine Idee, wie man das einfach umsetzen kann. Ich kenne die OO-Struktur des Redaxo nicht genug, um das selber zu machen, möchte das Rad auch nicht neu erfinden. Hat das denn bislang keiner umgesetzt? Es wäre phantastisch.....

Viele Grüße
Aleccus
Benutzeravatar
aleccus
 
Beiträge: 4
Registriert: 19. Mai 2007, 21:52

Beitragvon franz007 » 20. Mai 2007, 06:39

Das ist eine Lösung die ich einsetzte basierend auf der Navi "4-Teilige Navigation"
Es macht zwar nicht genau das was du willst aber ist nahe dran.
Die Kategorieen werden in einer Liste angezeigt und die Artikel der jeweiligen Kategorie in einer Liste unter der anderen.
Aber ich denk als basis für anpassungen gut geeignet.

Im Template2:
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];


/* START 1st level categories */
$navLeftCol .='<h3>NAVIGATION</h3>';
$navLeftCol .= '<ul>';
foreach (OOCategory::getRootCategories() as $lev1) {
      
   if ($lev1->isOnline()):
      if ($lev1->getId() == $path1) {
         $navLeftCol .= '<li><a class="active" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         if ($lev1->getId() != "1") {
            $sitePath .= ' ›› <a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         }
         $titlePath .= ' >> '.$lev1->getName();
      }
      // 1st level - no active link
      else {
         $navLeftCol .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
               
      $navLeftCol .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$navLeftCol .= '</ul>';
// END 1st level categories

// Extended NAVI

$cat = OOCategory::getCategoryById($this->getValue(category_id));
$cats = $cat->getChildren();
$catSize = sizeof($cat->getChildren());
if ($catSize != "0"){
$navLeftCol .='<h3>Subkategorien</h3>';
$navLeftCol .='<ul>';
if (is_array($cats)) {
   foreach ($cats as $cat) {

   $catId         = $cat->getId();
   $catName      = $cat->getName();
   
if ($cat->isOnline(true)){       
   $navLeftCol .= '<li><a href="'.rex_getUrl($catId).'">'.$catName.'</a></li>';
   }
}}
$navLeftCol .= '</ul>';
}
$cat = OOCategory::getCategoryById($this->getValue(category_id));
$article = $cat->getArticles();
$artSize = sizeof($cat->getArticles());
if ($artSize != "0"){
$navLeftCol .= '<h3>Artikel</h3>';
$navLeftCol .= '<ul>';
      if (is_array($article)) {
         foreach ($article as $var) {

         $articleId = $var->getId();
         $articleName = $var->getName();
         if ($var->isOnline(true)){       
            $navLeftCol .= '<li><a href="'.rex_getUrl($articleId).'">'.$articleName.'</a></li>';
}
}}
$navLeftCol .= '</ul>';
}

if ($REX['CUR_CLANG'] == 1) $breadcrumb = 'You are here: <a href="/index.php?clang=1">Startpage</a> '.$sitePath;
else $breadcrumb = 'Sie befinden sich hier: <a href="/index.php">Startseite</a> '.$sitePath;

?>


Im Haupttemplate:
Code: Alles auswählen
<?php
   include $REX['INCLUDE_PATH']."/generated/templates/2.template"; #ganz oben (oder auch wo anders)
?>

<?php print $navLeftCol; #dort wo die navi erscheinen soll ?>
Benutzeravatar
franz007
 
Beiträge: 276
Registriert: 15. Aug 2006, 23:36

Beitragvon aleccus » 20. Mai 2007, 08:49

Es ist nett von Dir, dass Du das hier reingesetzt hast. Danke.

Ich habe es ausprobiert, aber es listet leider keine einzelnen Artikel auf. Nur die Startseite wird unter '<h3>Artikel</h3>'; gezeigt.
Benutzeravatar
aleccus
 
Beiträge: 4
Registriert: 19. Mai 2007, 21:52

Beitragvon eth » 21. Jun 2007, 07:57

auf die schnelle aus dem modulen kategorieliste und artikelliste zusammengebastelt könnte das vom ansatz her so aussehen. müsste man dann natürlich erweitern für mehrere kategorieebenen usw.

Code: Alles auswählen
<?php
// EXPLODE PATH
$PATH = explode("|",$this->getValue("path").$this->getValue("article_id")."|");
// GET CURRENTS
$path1 = $PATH[1];
/* START 1st level categories */
$nav .= '<ul class="nav1st">';
foreach (OOCategory::getRootCategories() as $lev1) {

   if ($lev1->isOnline(true)):
   if ($lev1->getId() == $path1) {
      $nav .= '<li class="active"><a class="current" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      $cat = OOCategory::getCategoryById($this->getValue(category_id));

      $articles = $cat->getArticles( true); // Alle Artikel der Kategorie auslesen, die Online sind

      if ( is_array( $articles) && count( $articles) > 0) {
         foreach ( $articles as $article) {
            // Den aktuellen Artikel nicht verlinken
            // if ( $article->getId() == REX_ARTICLE_ID) continue;
            // Startartikel ausblenden
            // if ( $article->isStartPage()) continue;

            $nav .= '<br /><a href="'.$article->getUrl().'">'.$article->getName().'</a>';

         }
      }
   }
   // 2nd level - no active link
   else {
      $nav .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
   }
   $nav .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$nav .= '</ul>';
// END 1st level categories

print $nav;
?>
eth
 
Beiträge: 10
Registriert: 21. Jun 2007, 07:47

Beitragvon argon » 14. Feb 2008, 21:05

Ich benutze auch dieses Navi-Template und es funktioniert soweit sehr gut.
Vielen Dank erst einmal an den Urheber.

Ich habe folgende Frage:
Was muss ich machen damit bestimmt Kategorien nicht in der Navi-Struktur angezeigt werden?
Ich möchte z.B. Kategorie "Impressum" auf Online haben aber wo anders anzeigen.

Versuche mich seit ein paar Stunden daran bekomme es aber leider nicht hin.

Freue mich über jede Hilfe.

Viele Grüße
argon



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];


/* START 1st level categories */
$navLeftCol .='<h3>NAVIGATION</h3>';
$navLeftCol .= '<ul>';
foreach (OOCategory::getRootCategories() as $lev1) {
     
   if ($lev1->isOnline()):
      if ($lev1->getId() == $path1) {
         $navLeftCol .= '<li><a class="active" href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         if ($lev1->getId() != "1") {
            $sitePath .= ' ›› <a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
         }
         $titlePath .= ' >> '.$lev1->getName();
      }
      // 1st level - no active link
      else {
         $navLeftCol .= '<li><a href="'.$lev1->getUrl().'">'.$lev1->getName().'</a>';
      }
               
      $navLeftCol .= '</li>';

   endif; // END by if ($lev1->isOnline())
}
$navLeftCol .= '</ul>';
// END 1st level categories

// Extended NAVI

$cat = OOCategory::getCategoryById($this->getValue(category_id));
$cats = $cat->getChildren();
$catSize = sizeof($cat->getChildren());
if ($catSize != "0"){
$navLeftCol .='<h3>Subkategorien</h3>';
$navLeftCol .='<ul>';
if (is_array($cats)) {
   foreach ($cats as $cat) {

   $catId         = $cat->getId();
   $catName      = $cat->getName();
   
if ($cat->isOnline(true)){       
   $navLeftCol .= '<li><a href="'.rex_getUrl($catId).'">'.$catName.'</a></li>';
   }
}}
$navLeftCol .= '</ul>';
}
$cat = OOCategory::getCategoryById($this->getValue(category_id));
$article = $cat->getArticles();
$artSize = sizeof($cat->getArticles());
if ($artSize != "0"){
$navLeftCol .= '<h3>Artikel</h3>';
$navLeftCol .= '<ul>';
      if (is_array($article)) {
         foreach ($article as $var) {

         $articleId = $var->getId();
         $articleName = $var->getName();
         if ($var->isOnline(true)){       
            $navLeftCol .= '<li><a href="'.rex_getUrl($articleId).'">'.$articleName.'</a></li>';
}
}}
$navLeftCol .= '</ul>';
}

if ($REX['CUR_CLANG'] == 1) $breadcrumb = 'You are here: <a href="/index.php?clang=1">Startpage</a> '.$sitePath;
else $breadcrumb = 'Sie befinden sich hier: <a href="/index.php">Startseite</a> '.$sitePath;

?>
Benutzeravatar
argon
 
Beiträge: 85
Registriert: 13. Sep 2007, 05:44
Wohnort: Berlin


Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast