Breadcrumb Anpassung für Template von Raybeam

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

Breadcrumb Anpassung für Template von Raybeam

Beitragvon BobFreddy » 12. Jun 2007, 11:05

Hallo Peter,

möchte die Breadcrumb aus Deinem Template so anpassen, daß die Navigation beim Startartikel (sprich Homeseite) anfängt.
Momentan zeigt mir die Breadcrumb den Webseiten-Titel und dann die erste angeklickte Rubrik. Was mache ich falsch bzw. was muß ich ändern?
Kannst Du mir einen Tip geben?

schöne Grüße

Bob
BobFreddy
 
Beiträge: 31
Registriert: 9. Jun 2007, 13:57

Beitragvon raybeam » 12. Jun 2007, 17:19

Hi Bob,

Du musst zwei Anpassungen in deinem Navigationstemplate vornehmen

1.

Erweitere
Code: Alles auswählen
//////////////// ------- Breadcrumb erstellen ---------- ////////////////

    $aktArticle = OOArticle::getArticleById($this->getValue('article_id'));
    $tree = $aktArticle->getParentTree();



wie folgt:

Code: Alles auswählen
//////////////// ------- Breadcrumb erstellen ---------- ////////////////

    $aktArticle = OOArticle::getArticleById($this->getValue('article_id'));
    $siteStartArticle = OOArticle::getSiteStartArticle();
    $tree = $aktArticle->getParentTree();


2.
und ersetze ein paar Zeilen tiefer

Code: Alles auswählen
$breadcrumb = '<div id="breadcrumb">'."\n".'<span class="bcTitle">'.$bcTitle.$REX ['SERVERNAME'].'</span>';


durch

Code: Alles auswählen
if($aktArticle->getId()==$siteStartArticle->getId())
{
       $homeLink='';
       $bcDivi='';
}
else
{
       $homeLink=$siteStartArticle->toLink();
}

$breadcrumb = '<div id="breadcrumb">'."\n".'<span class="bcTitle">'.$bcTitle.$homeLink.'</span>';


Dann müsste es eigentlich klappen.
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon raybeam » 13. Jun 2007, 16:42

Nach einem Hinweis von Robert (der Homelink wurde doppelt angezeigt, wenn die Homeseite aktiv war) habe ich den Quelltext nochmal verändert. Jetzt sollte alles korrekt funktionieren.
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon Sauer » 9. Okt 2007, 17:10

Hi, zuerst mal vielen dank für dein tolles Template. Ich habe es soeben probiert. Es fonktioniert eigentlich. Ich habe leider nur ein paar Anpassungsprobleme.

Ich hab das Template angepasst wie hir oben erwähnt.

Allerdings werden mir 2 mal Home angezeigt wenn ich z.b. auf Team klicke.

Home

Team


Ausserdem bekomme ich das mit dem CSS nicht richtig hin, hätte gerne den Path horizontal angezeigt und nicht wie es im Moment aussieht

So sieht mein css im moment aus:


Code: Alles auswählen
div#path {
   width: 900px;
   height: 21px;
   background-color:  #fff;
   padding-top: 4px;
   padding-left: 0px;
   color: #fff;
}   



.breadcrumb{
   margin-bottom: 10px;
}
.bcActive{
   color: black;
   font-weight: bold;
}


.bcTitle {
      color: #000;
}


und so mein Template

Code: Alles auswählen
<?php
   /*
   Navigationstemplate zur Gestaltung von Seitennavigationen/-menüs auf der
   Grundlage unsortierter Listen (<ul></ul>) mit folgenden Funktionen:

   - beliebige Verschachtelungstiefe
   - Veröffentlichungszeitraum (Online vom/bis) wird beachtet
   - individuelle Benutzerbereiche werden ausgewertet
   - Verschachtelung der unsortierten Listen wahlweise mit w3c-konformer
     <ul>-Gliederung im jeweils übergeordnetern <li>-Element oder als
     "Pseudo"-Verschachtelung in nur einem <ul>-Element
   - Wahlweise Anzeige der Untermenüpunkte nur der aktuellen Kategorie oder
     Anzeige aller Untermenüpunkte
   - Wahlweise getrennte Anzeige von Haupt- und Untermenü
   - Generierung eines Breadcrumb-Menüs

   ------------------------------------------------------------------------
   Peter Reiche - www.raybeam.de
   ------------------------------------------------------------------------
   letzte Änderung: 25.01.2007:
   Wahlweise getrennte Anzeige von Haupt- und Untermenü ($subUl='extra')
   letzte Änderung: 10.12.2006:
   Einbindung eines "SuperUsers" der alle individuellen Menüpunkte sieht
   Auswahl: Untermenüpunkte des aktiven Menüpunkts / alle anzeigen
   letzte Änderung: 12.10.2006:
   Darstellung der Untermenüpunkte erweitert
   letzte Änderung: 09.07.2006:
   Breadcrumb-Menü optimiert
   ------------------------------------------------------------------------

   Installation:

   Einbindung des Navigationstemplates in das Seitentemplate durch

   // Template f. Navigation bestimmen
   $navTemplateId = "14"; hier die aktuelle Navigations-Template-ID eintragen

   // Navigation einbinden
   include $REX['INCLUDE_PATH']."/generated/templates/$navTemplateId.template";

   Darstellung des Breadcrumb-Menüs im HTML-Teil des Seitentemplates durch:
   print $breadcrumb."\n";

   Darstellung der Navigation im HTML-Teil des Seitentemplates durch:
   print $navigation."\n";
   
   Trennung von Haupt- und Unternavigation durch Setzen des "Menü-Umschalters" auf:
   $subUl = 'extra';
   
   Dadurch Darstellung der Navigation im HTML-Teil des Seitentemplates durch:
   print $navigation."\n";
   
   und Darstellung der Unternavigation im HTML-Teil des Seitentemplates durch:
   print $subNavigation."\n";

   */

   function build_navigation($userTyp, $nav, $path, $subUl='on',$pathIndex=1)
   {
      // Wenn der Veröffentlichungszeitraum "Online von / bis zum" nicht zutrifft, wird der
      // Navigationslink nicht angezeigt. Artikel die direkt über den URL aufgerufen
       // wurden, werden jedoch immer noch angezeigt. Das entsprechende Seiten-Template
       // muss also bezügl. des Veröffentlichungszeitraums ebenfalls angepasst werden.
       $time = time();
       
       // Type-ID für den "SuperUser", der alle individuellen Menüpunkte sehen darf.
      // Die ID sollte mit dem $su-Wert aus dem Authentifizierungstemplate übereinstimmen.
      $su = 99;
      
         if($nav->getValue('online_from') > $time || $nav->getValue('online_to') < $time)
         {
            return;
         }
         // Wenn die Typ-ID des Startartikels = 1 ist oder der UserTyp des angemeldeten
         // Benutzers mit der Typ-ID des Startartikels der aktuellen Kategorie überein
       // stimmt, geht es weiter
       if($nav->getTypeId()==1 || $userTyp == $nav->getTypeId() || $userTyp == $su)
         {
            // Nur Submenü des aktuellen Root anzeigen
            if($subUl=='on' || $subUl=='off' || $subUl=='extra')
            {
               if($nav->getId()==$path[$pathIndex])
               {
                  // Durch ...->getChildren(1) anstatt ...->getChildren() werden
                 // nur Kategorien durchlaufen die "online" sind
                 if($nav->getChildren(1))
                   {
                      // "geöffnete" Rootkategorie durch css-Klasse '.open' markieren
                      if($pathIndex==1)
                     {
                        $oClass="open";
                     }
                     else
                     {
                        $oClass="";
                     }
                     if((count($path) > $pathIndex) && ($path[$pathIndex + 1] > 0))
                     {
                        if($pathIndex>1 && $subUl=='extra')
                        {
                           $subNavigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }
                        else
                        {
                           $navigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }
                     }
                     else
                     {
                        // bei 'extra' würde der root-Navigationspunkt ins submenü verschoben, soll er aber nicht
                        if($pathIndex>1 && $subUl=='extra')
                        {
                           $subNavigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }
                        else
                        {
                           $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                        }
                     }
                     // Wenn keine untergeordneten <ul>-Tags im Menü verwendet
                       // werden sollen ($subUl='off'), wird der <li>-Tag geschlossen
                  if($subUl=='off')
                       {
                          $navigation.= '</li>'."\n";
                       }
                       // Wenn untergeordnete <ul>-Tags im Menü verwendet
                     // werden sollen ($subUl='on'), wird in dem noch offenen
                     // <li>-Tag der <ul>-Tag geöffnet
                     else
                     {
                        if($pathIndex>1 && $subUl=='extra')
                        {
                           $subNavigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
                        }
                        else
                        {
                           $navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
                        }
                     }
                     // Durch ...->getChildren(1) anstatt ...->getChildren() werden
                     // nur Kategorien durchlaufen die "online" sind - dazu wird die
                     // Funktion erneut aufgegrufen
                     foreach($nav->getChildren(1) as $sub)
                     {
                        $tmpNav=build_navigation($userTyp, $sub, $path,$subUl, $pathIndex+1);
                        $navigation.=$tmpNav[0];
                        $subNavigation.=$tmpNav[1];
                     }
                     // Wenn untergeordnete <ul>-Tags im Menü verwendet
                     // werden sollen ($subUl='on'), wird der <ul>-Tag hier wieder geschlossen
                     if($subUl=='on' || $subUl=='extra')
                     {
                        if($pathIndex>1 && $subUl=='extra')
                        {
                           $subNavigation.="</ul>\n";
                        }
                        else
                        {
                           $navigation.="</ul>\n";
                        }
                     }
                    }
                    else
                    {
                       if($pathIndex==1)
                     {
                        $oClass="open";
                     }
                     else
                     {
                        $oClass="";
                     }

                  if($pathIndex>1 && $subUl=='extra')
                  {
                         $subNavigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                      }
                      else
                      {
                         $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                      }
                         

                  if($subUl=='off')
                      {
                         $navigation.= '</li>'."\n";
                      }
                    }
                 }
                 else
              {
               if($pathIndex>1 && $subUl=='extra')
               {
                  $subNavigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
               }
               else
               {
                  $navigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
               }

               if($subUl=='off')
                   {
                      $navigation.= '</li>'."\n";
                   }
                }
            if($subUl=='on' || $subUl=='extra')
              {
                 if($pathIndex>1 && $subUl=='extra')
                 {
                    $subNavigation.= '</li>'."\n";
                 }
                 else
                 {
                    $navigation.= '</li>'."\n";
                 }
               }
            }
            // Subemenüs aller Kategorien anzeigen
            elseif($subUl=='allOn' || $subUl=='allOff')
            {
               if($nav->getChildren(1))
                {
                   // "geöffnete" Rootkategorie durch css-Klasse '.open' markieren
                   if($pathIndex==1)
                  {
                     $oClass="open";
                  }
                  else
                  {
                     $oClass="";
                  }
                   if($nav->getId()==$path[$pathIndex])
                  {
                     $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                  }
                  else
                  {
                     $navigation.='<li class="inactive '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                  }
                  // Wenn keine untergeordneten <ul>-Tags im Menü verwendet
                    // werden sollen ($subUl='allOff'), wird der <li>-Tag geschlossen
               if($subUl=='allOff')
                    {
                       $navigation.= '</li>'."\n";
                    }
                    // Wenn untergeordnete <ul>-Tags im Menü verwendet
                  // werden sollen ($subUl='allOn'), wird in dem noch offenen
                  // <li>-Tag der <ul>-Tag geöffnet
                  else
                  {
                     $navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
                  }
                  foreach($nav->getChildren(1) as $sub)
                  {
                      $tmpNav=build_navigation($userTyp, $sub, $path,$subUl, $pathIndex+1);
                      $navigation.=$tmpNav[0];
                  }
                  // Wenn untergeordnete <ul>-Tags im Menü verwendet
                  // werden sollen ($subUl='allOn'), wird der <ul>-Tag hier wieder geschlossen
                  if($subUl=='allOn')
                  {
                      $navigation.="</ul>\n";
                  }
                }
                else
                {
                   if($nav->getId()==$path[$pathIndex])
                   {
                      $navigation.='<li class="active '.$oClass.' level'.$pathIndex.'"><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                   }
                   else
                   {
                      $navigation.='<li class="inactive level'.$pathIndex.'"><a class="level'.$pathIndex.' inactive" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
                   }
                    if($subUl=='allOff')
                   {
                      $navigation.= '</li>'."\n";
                   }
                }
             }
            if($subUl=='allOn')
           {
              $navigation.= '</li>'."\n";
            }
         }
         


      // Kleiner Trick, falls ausser der root-Kategorie alle weiteren aufgrund
         // der Rechtevergabe ausgeblendet sind. Um validen HTML-Code zu erhalten
         // muss am Ende des $navigations-String "<ul class=\"subnav1\">\n</ul>"
         // gelöscht werden
         if(strstr($navigation,"<ul class=\"subnav1\">\n</ul>"))
         {
            $navigation = str_replace("\n<ul class=\"subnav1\">\n</ul>","\n",$navigation);
         }
         $navArray=array();
         $navArray[0].=$navigation;
         $navArray[1].=$subNavigation;

         return $navArray;
    }  /////////////////// Ende der function build_navigation //////////////


//////////////// ------- Navigation erstellen ------------ ///////////////

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

// Usertyp festlegen, um Authentifizierung zu ermöglichen
    $userTyp='0';
    if ($FORM['USR_TYP'] != 0)
    {
        $userTyp = $FORM['USR_TYP'];
    }
//////////////////////////////////////////////
//  " M E N Ü - U M S C H A L T E R "
//////////////////////////////////////////////
//  Menü mit <ul></ul> Auszeichnung
//  auch in den Unter-Menüpunkten oder
//  alle Untermenüpunkte ständig anzeigen
//  <ul> einschalten:.................. on
//  <ul> ausschalten:.................. off
//  alle mit <ul> ständig anzeigen:.... allOn
//  alle ohne <ul> ständig anzeigen:... allOff
//  Untermenü extra:................... extra
//////////////////////////////////////////////

    $subUl = 'off';

//////////////////////////////////////////////

      // Durch ...::getRootCategories(1) anstatt ...::getRootCategories()
      // werden nur die Root-Kategorien durchlaufen die "online" sind
      $navi=array();
      foreach (OOCategory::getRootCategories(1) as $nav)
      {
        $navi=build_navigation($userTyp, $nav, $path, $subUl);
        $navMain.=$navi[0];
        $navSub.=$navi[1];
      }

   if($navMain)
      {
         $navigation= "<ul class=\"navroot\">\n".$navMain."</ul>\n";
      }
      
      if($navSub)
      {
         $subNavigation= "<ul class=\"navsub\">\n".$navSub."</ul>\n";
      }
   
//////////////// ------- Breadcrumb erstellen ---------- ////////////////

    $aktArticle = OOArticle::getArticleById($this->getValue('article_id'));
    $siteStartArticle = OOArticle::getSiteStartArticle();
    $tree = $aktArticle->getParentTree();

//////////////////////////////////////////////
//  Titel und Trennzeichen für die
//  Breadcrumb-Links festlegen
//////////////////////////////////////////////

    $bcTitle = 'Sie befinden sich hier: ';
    $bcDivi  = ' > ';

//////////////////////////////////////////////

    if(is_array($path))
    {
if($aktArticle->getId()==$siteStartArticle->getId())
{
       $homeLink='';
       $bcDivi='';
}
else
{
       $homeLink=$siteStartArticle->toLink();
}

$breadcrumb = '<div id="breadcrumb">'."\n".'<span class="bcTitle">'.$bcTitle.$homeLink.'</span>';

       foreach($path as $bcNr)
       {
          if($bcNr!='')
          {
             $art = OOArticle::getArticleByID($bcNr);
             if($art->getValue('id')!=$this->getValue('article_id'))
             {
                // Pfad-Einträge des Artikels verlinken
                $breadcrumb .= $bcDivi.$art->toLink();
             }
             else
             {
                // Artikelname der aktuellen Seite nicht verlinken
                $breadcrumb .= $bcDivi.'<span class="bcActive">'.$this->getValue("name")."</span>\n";
             }
          }
       }
       $breadcrumb .='</div>'."\n";
    }
?>



Vielen dank für eure Hilfe.

greetings Sauer
greetings Frank
Sauer
 
Beiträge: 22
Registriert: 4. Jan 2007, 23:46

Beitragvon raybeam » 9. Okt 2007, 19:35

Hallo Sauer,

ich habe den Quelltext kopiert und in das navi-Template meiner Testseite eingefügt: Läuft einwandfrei. Warum bei deiner Site der Home-Link doppelt angezeigt wird ist mir "schleierhaft". Dazu hab ich z. Z. keine Erklärung.

Bezüglich deines CSS-Problems konnte ich folgende Zeile in dem HTML-Quelltext deiner Seite finden:

Code: Alles auswählen
a{display:block;color: #981793;padding:10px}


Das Problem liegt in dem "display:block". Dies sorgt dafür, dass aus den ursprünglich "inline"-formatierten Links im Breadcrumb Blockelemente generiert werden. Und nach einem Blockelement folgt grundsätzlich ein "Zeilenumbruch".

Wenn Du "display:block" aus dem Stylesheet löschst. Durfte das Breadcrumb einzeilig angezeigt werden. Evtl. geht dann aber eine gewünschte Formatierung von anderen <a>-Selektoren verloren.

Gruß

Peter
Benutzeravatar
raybeam
 
Beiträge: 445
Registriert: 5. Feb 2006, 20:30

Beitragvon Sauer » 9. Okt 2007, 22:00

Vielen dank Peter für deine schnelle Hilfe. Ich hab das Display Block entfernd. Nun wird es wie gewüscht angezeigt vielen dank.

Dass Home 2 mal angezeigt wird verstehe ich leider immer noch nicht. Werd mir das nochmal anschauen müssen.

Aber trotzdem vielen herzlichen Dank

greetings Sauer
greetings Frank
Sauer
 
Beiträge: 22
Registriert: 4. Jan 2007, 23:46

Beitragvon Sauer » 10. Okt 2007, 11:58

Ich habe mir das Ganze nochmal angeschaut. Und die Navigation in mein Contact Template gepackt. Siehe da, es funktioniert wie gewünscht
Siehe hier

Bei Home wird mir leider immer noch Home 2mal angezeigt. Könnte es vieleicht mir der Struktur meiner Artikel zu tun haben?

Siehe hier

Meine Struktur für Contact:

Rubrik Contact

Startartikel : contact
mit Unterrubriken
-contactez_nous
-roadmap
-devenir_membre
-devenir_partenaire

Meine Struktur für Home:

Rubrik Home

Startartikel : Home
mit Unterrubriken
-tarifs
-team
-wellness
-galerie
-partenaires

Auf den ersten blick scheind mir alles in Ordnung zu sein. Desshalb wundere ich mich dass ich nach wie vor dieses Problem habe.

Vielleicht kann ja jemand mir helfen.

Mit freundlichen Grüssen
Sauer
greetings Frank
Sauer
 
Beiträge: 22
Registriert: 4. Jan 2007, 23:46


Zurück zu Templates/Navigationen [R3]

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast