Externer Link in der Navigation (rex_navigation::factory)

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

Externer Link in der Navigation (rex_navigation::factory)

Beitragvon mikes11 » 5. Sep 2010, 15:08

Hallo, ist es möglich in der Navigation einen externen Link darzustellen ?

das Template meiner Navigation sieht so aus:

Code: Alles auswählen
<?php

// navigation generator erstellen
$nav = rex_navigation::factory();

// ---------- HEAD NAVI

// Beginne in der Wurzelkategorie
// 1 Ebene Tief
// Nicht aufklappen (hier egal da nur 1 Ebene)
// Offline ausblenden

$category_id = 0;
$depth = 3;
$open = FALSE;
$ignore_offlines = TRUE;

echo $nav->get($category_id, $depth, $open, $ignore_offlines);

?>


Ich möchte nun Praktisch in der Navigation einen Link haben der eine andere, externe Seite öffnet.

Geht das überhaupt ?

Grüße Michael
Gruß Michael
Benutzeravatar
mikes11
 
Beiträge: 44
Registriert: 26. Mai 2009, 11:17
Wohnort: St. Leon-Rot

Beitragvon Thomas.Blum » 5. Sep 2010, 16:43

Hej Michael,

der einfachste weg wäre, dem Startartikel ein Weiterleitungsmodul hinzuzufügen.


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

Beitragvon mikes11 » 5. Sep 2010, 16:56

ja das hab ich im Moment auch so gelöst.. aber gibts da nicht ne bessere Möglichkeit sodass der Link in der Navi gleich auf die richtige Seite verweist ?

P.S. Danke für die rasche Antwort heute am heiligen Sonntag :D
Gruß Michael
Benutzeravatar
mikes11
 
Beiträge: 44
Registriert: 26. Mai 2009, 11:17
Wohnort: St. Leon-Rot

Beitragvon Thomas.Blum » 5. Sep 2010, 17:50

mikes11 hat geschrieben:aber gibts da nicht ne bessere Möglichkeit sodass der Link in der Navi gleich auf die richtige Seite verweist ?


gibt es, daher schrieb ich auch vom "einfachsten Weg".

Der andere könnte so aussehen.

Du legst ein Metainfofeld "externe Links" für Kategorien an. Wenn dieses Feld gefüllt ist, wird unter href dieser Wert ausgegeben. Ansonsten die normale Url.

Das ganze musst du die Navi aber selbst schreiben, oder die Klasse rex_navigation erweitern, da in der selbst dafür nichts vorgesehen ist.

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

Beitragvon mikes11 » 5. Sep 2010, 18:02

mh ok hätte dann den vorteil dass der User gleich sieht wo es wirklich hingeht sobald er über den link fährt...

Danke Thomas
Gruß Michael
Benutzeravatar
mikes11
 
Beiträge: 44
Registriert: 26. Mai 2009, 11:17
Wohnort: St. Leon-Rot

Beitragvon Richard.Laing » 5. Sep 2010, 19:22

hi
oder einfach mal bei den addons schauen ;)

http://www.redaxo.de/180-0-addon-details.html?addon_id=746

gruß richy
REXvideo Videotutorials für Redaxo www.REXvideo.de
Webseite www.on-laing.de smokezig.de www.smokezig.de
Benutzeravatar
Richard.Laing
 
Beiträge: 2108
Registriert: 27. Aug 2005, 23:55
Wohnort: Brühl / Rheinland

Beitragvon Koala » 6. Sep 2010, 17:04

Hatte das mal per str_replace in der Navi direkt gelöst.
Code: Alles auswählen
$nav = rex_navigation::factory();

// ---------- HEAD NAVI
$category_id = 0;
$depth = 3;
$open = FALSE;
$ignore_offlines = TRUE;

$navigation = $nav->get($category_id, $depth, $open, $ignore_offlines);
$navigation = str_replace('href="/buchen/"', 'href="https://www.cboccing.de/"', $navigation);
$navigation = str_replace('href="/newsletter/"','href="javascript:goLOL();" title="" class=""', $navigation);

echo $navigation;
.
<?php print $Footer; ?>

Sven

Ich würde ja die Welt verändern,
doch der Quellcode ist mir zu absurd!


REX_DOKU :: REX_WIKI :: REX_FAQ :: REX_WIKIPEDIA
Benutzeravatar
Koala
 
Beiträge: 1500
Registriert: 3. Okt 2005, 12:20
Wohnort: Cottbus

Beitragvon mikes11 » 10. Okt 2010, 19:14

so ich habs jetzt so gelöst dass ich ein Metadatenfeld art_extlink angelegt habe und die klasse rex_navigation.inc.php folgende Abfrage in Zeile 230 eingefügt:
Code: Alles auswählen
   $myArticle = $nav->getStartArticle();
         if ($myArticle->getValue("art_extlink") == "") {
          $return .= '<a'. $linkClass .' href="'.$nav->getUrl().'">'.htmlspecialchars($nav->getName()).'</a>';
         }
         else {
       $return .= '<a'. $linkClass .' href="'.$myArticle->getValue("art_extlink").'">'.htmlspecialchars($nav->getName()).'</a>';
      }



Falls jemand Verbessrungsvorschläge hat, was den Code angeht - bin für alles offen ;)
Gruß Michael
Benutzeravatar
mikes11
 
Beiträge: 44
Registriert: 26. Mai 2009, 11:17
Wohnort: St. Leon-Rot

Beitragvon Thomas.Blum » 11. Okt 2010, 11:44

mikes11 hat geschrieben:Falls jemand Verbessrungsvorschläge hat, was den Code angeht - bin für alles offen ;)


Code: Alles auswählen
$myArticle = $nav->getStartArticle();

$href = $nav->getUrl();
if (trim($myArticle->getValue('art_extlink')) != '')
{
  $href = trim($myArticle->getValue('art_extlink'));
}

$return .= '<a'. $linkClass .' href="'.$href.'">'.htmlspecialchars($nav->getName()).'</a>';


ich würde noch überprüfen ob der externe Link mit http:// anfängt wobei ich die Klasse nicht editiert sondern eher erweitert hätte. So musst du das bei einem Update immer wieder neu einsetzen. Und wer denkt schon bei einem Update an so etwas, was man nicht gleich sieht und wahrnimmt?

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

Beitragvon mikes11 » 11. Okt 2010, 16:04

mh ok mal ne blöde frage.. wie erweiter ich die klasse ??

Und dann muss ich doch trotzdem daran denken oder ??

Achso jetzt weiss ich was du meinst.. ich mach ne SubKlasse in der ich die funktion durch die von mir editierte ersetze und die navigation mit der erstelle....

mh ok aber so wie ich das jetzt verstanden habe werden private functions nicht vereerbt...
Gruß Michael
Benutzeravatar
mikes11
 
Beiträge: 44
Registriert: 26. Mai 2009, 11:17
Wohnort: St. Leon-Rot

Beitragvon mikes11 » 11. Okt 2010, 17:24

So ich habs hinbekommen.... hab das einfach in mein Navigations-Template eingebaut:

Code: Alles auswählen
<?php

class my_navigation extends rex_navigation {

/*public*/ function factory()
  {
    static $class = null;

    if(!$class)
    {
      // ----- EXTENSION POINT
      $class = rex_register_extension_point('REX_NAVI_CLASSNAME', 'my_navigation');
    }

    return new $class();
  }

/*protected*/ function _getNavigation($category_id,$ignore_offlines = TRUE)
    {
      static $depth = 0;
     
    if($category_id < 1)
          $nav_obj = OOCategory::getRootCategories($ignore_offlines);
        else
          $nav_obj = OOCategory::getChildrenById($category_id, $ignore_offlines);

      $return = "";

        if(count($nav_obj)>0)
          $return .= '<ul class="rex-navi'. ($depth+1) .'">';

        foreach($nav_obj as $nav)
        {
          $liClass = '';
          $linkClass = '';
         
          // classes abhaengig vom pfad
            if($nav->getId() == $this->current_category_id)
            {
              $liClass .= ' rex-current';
              $linkClass .= ' rex-current';
            }
            elseif (in_array($nav->getId(),$this->path))
            {
        $liClass .= ' rex-active';
              $linkClass .= ' rex-active';
            }
            else
            {
        $liClass .= ' rex-normal';
            }
           
      // classes abhaengig vom level
      if(isset($this->classes[$depth]))
        $liClass .= ' '. $this->classes[$depth];

      if(isset($this->linkclasses[$depth]))
        $linkClass .= ' '. $this->linkclasses[$depth];



            $linkClass = $linkClass == '' ? '' : ' class="'. ltrim($linkClass) .'"';
             
      $return .= '<li class="rex-article-'. $nav->getId() . $liClass .'">';
           
            $curStartArticle = $nav->getStartArticle();
            $href = $nav->getUrl();
            //trim entfernt leerzeichen, zeilenschalter, tabs usw.
            if (trim($curStartArticle->getValue("art_extlink")) != "") {
        $href = trim($curStartArticle->getValue("art_extlink"));
      }
     
     
      $return .= '<a'. $linkClass .' href="'.$href.'">'.htmlspecialchars($nav->getName()).'</a>';

            $depth++;
            if(($this->open ||
                $nav->getId() == $this->current_category_id ||
                in_array($nav->getId(),$this->path))
         && ($this->depth > $depth || $this->depth < 0))
            {
                $return .= $this->_getNavigation($nav->getId(),$ignore_offlines);
            }
            $depth--;

            $return .= '</li>';
        }

        if(count($nav_obj)>0)
          $return .= '</ul>';

        return $return;
    }

}



// navigation generator erstellen
$nav = my_navigation::factory();

// ---------- HEAD NAVI

// Beginne in der Wurzelkategorie
// 1 Ebene Tief
// Nicht aufklappen (hier egal da nur 1 Ebene)
// Offline ausblenden

$category_id = 0;
$depth = 3;
$open = FALSE;
$ignore_offlines = TRUE;

echo $nav->get($category_id, $depth, $open, $ignore_offlines);

?>
Gruß Michael
Benutzeravatar
mikes11
 
Beiträge: 44
Registriert: 26. Mai 2009, 11:17
Wohnort: St. Leon-Rot

Beitragvon mikes11 » 12. Okt 2010, 15:45

so ich habe meine Navigation mal in den Download-Bereich von Redaxo unter Templates gepostet - falls sie jemand haben will
Gruß Michael
Benutzeravatar
mikes11
 
Beiträge: 44
Registriert: 26. Mai 2009, 11:17
Wohnort: St. Leon-Rot


Zurück zu Templates/Navigationen [R4]

Wer ist online?

Mitglieder in diesem Forum: Markus.Lorch und 0 Gäste