Hauptnavigation mit passender idart

Gesperrt
spengel
Beiträge: 25
Registriert: Do 29. Apr 2004, 12:52
Kontaktdaten:

Hauptnavigation mit passender idart

Beitrag von spengel »

Hallo, ich bin auf der Suche nach einer (hoffentlich kleinen) Änderung des Navigationsmoduls 1.1 und zwar in der Form das "&idart=xxxx" mit im generierten Link auftaucht. Leider gelingt es mir mangels Datenbankerfahrung partout nicht die zum jeweiligen Navigationspunkt passende idart auszulesen. Könnte sich dem jemand annehmen?

Code: Alles auswählen

<?php 

/** 
* Navigation 
* 
* OUTPUT 
* Modulname   :     Navigation 1.1
* Author      :     Jan Lengowski
* Copyright   :     Contenido - four for business
* Created     :     15-05-2003
* Modified    :     26-05-2003

/** 
* Check if a category is child 
* of another category 
* 
* @return boolean true/false 
* @author Jan Lengowski <Jan.Lengowski@4fb.de> 
* @copyright four for business AG 2003 
*/ 
function catIsChildOf($id, $idparent) { 

    global $cfg, $client, $lang; 

    $db = new DB_Contenido; 

    $parent = $id; 

    while ( $parent != 0 ) { 

        $sql = "SELECT 
                    a.parentid 
                FROM 
                    ".$cfg["tab"]["cat"]." AS a, 
                    ".$cfg["tab"]["cat_lang"]." AS b 
                WHERE 
                    a.idclient  = '".$client."' AND 
                    b.idlang    = '".$lang."' AND 
                    a.idcat     = b.idcat AND 
                    a.idcat   = '".$parent."'"; 

        $db->query($sql); 
        $db->next_record(); 

        $parent = $db->f("parentid"); 

        if ($parent == $idparent) { 
            return true; 
        } 

    } 

    return false; 

} 

if ( catIsChildOf($idcat, CMS_VALUE[0]) ) { 
    $sel_idcat = $idcat; 
} else { 
    $sel_idcat = CMS_VALUE[0]; 
} 

// template klasse includen 
include_once($cfg["path"]["contenido"] . 'classes/class.template.php'); 

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


// template instanz 
$tpl = new Template; 

function nav($idcat) { 

        global $navitems, $client, $lang, $db, $cfg; 

        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat'"; 

        $db->query($sql); 
        $db->next_record(); 

        $parentid = $db->f("parentid"); 

        if ( $parentid == 0 ) { 
           if ( $idcat != CMS_VALUE[0] ){ 

              $navitems=array(); 
              $sql = "SELECT A.idcat, C.name 
                      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='CMS_VALUE[0]' ORDER BY A.idtree"; 

                      $db->query($sql); 

                      while ($db->next_record()) { 
                             $navitems[$db->f("idcat")] = array("idcat"=>$db->f("idcat"), 
                                                                 "name"=>$db->f("name")); 
                      } 

           } 
           return true; 
        } 

        $sql = "SELECT A.idcat, C.name 
        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='$parentid' ORDER BY A.idtree"; 

        $db->query($sql); 

        while ($db->next_record()) { 

               $tmp_nav[$db->f("idcat")] = array("idcat"=>$db->f("idcat"), 
                                           "name"=>$db->f("name")); 
        } 

        $tmp_nav[$idcat]["sub"] = $navitems; 
        $navitems = $tmp_nav; 

        nav($parentid); 

} 



$sql = "SELECT A.idcat, C.name 
        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() ) { 
       $navitems[$db->f("idcat")] = array("idcat"=>$db->f("idcat"), 
                                         "name"=>$db->f("name")); 
} 

nav($sel_idcat); 

/** 
* array $navitems enthält alle daten 
* die für das aufbauen der navigation 
* notwendig sind. 
*/ 
echo '<table cellspacing="0" cellpadding="0" border="0">'; 

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

    // 1. navi ebene 
    $tpl->reset(); 
    $tpl->set('d', 'NAME',  $data['name']); 
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?client='.$client.'&lang='.$lang.'&idcat='.$data['idcat'])); 
    $tpl->next(); 

    if ($idcat == $data['idcat']) { 
        $tpl->generate('templates/navfirst_on.html'); 
    } else { 
        $tpl->generate('templates/navfirst_off.html'); 
    } 

    if (is_array($data['sub'])) { 

        foreach ($data['sub'] as $key => $data) { 

            // 2. navi ebene 
            // 1. navi ebene 
            $tpl->reset(); 
            $tpl->set('d', 'NAME',  $data['name']); 
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?client='.$client.'&lang='.$lang.'&idcat='.$data['idcat'])); 
            $tpl->next(); 

            if ($idcat == $data['idcat']) { 
                $tpl->generate('templates/navsecond_on.html'); 
            } else { 
                $tpl->generate('templates/navsecond_off.html'); 
            } 

            if (is_array($data['sub'])) { 

                foreach ($data['sub'] as $key => $data) { 

                    // 3. navi ebene 
                    // 1. navi ebene 
                    $tpl->reset(); 
                    $tpl->set('d', 'NAME',  $data['name']); 
                    $tpl->set('d', 'HREF', $sess->url('front_content.php?client='.$client.'&lang='.$lang.'&idcat='.$data['idcat'])); 
                    $tpl->next(); 

                    if ($idcat == $data['idcat']) { 
                        $tpl->generate('templates/navthird_on.html'); 
                    } else { 
                        $tpl->generate('templates/navthird_off.html'); 
                    } 

                } // end foreach 

            } // end if 

        } // end foreach 

    } // end if 

} // end foreach 

echo '</table>'; 

?>
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ähm wieso eigentlich ?
die idcat alleine sollte ja reichen...

na wie auch immer

so wie die navigation aufgebaut ist, hast du alle sql abfragen nach dem startartikel mit entfernt...

du benötigst also für jede idcat den startartikel...

ich würde diese klasse dazu benützen das zu bekommen...
-> http://contenido.org/forum/viewtopic.php?t=2087

würde glaube ich so aussehen... (ist nicht getestet)
wenn du den code vergleichst, siehts du wie ich es auf die schnelle machen würde...

Code: Alles auswählen

<?php 

/** 
* Navigation 
* 
* OUTPUT 
* Modulname   :     Navigation 1.1 
* Author      :     Jan Lengowski 
* Copyright   :     Contenido - four for business 
* Created     :     15-05-2003 
* Modified    :     26-05-2003 

/** 
* Check if a category is child 
* of another category 
* 
* @return boolean true/false 
* @author Jan Lengowski <Jan.Lengowski@4fb.de> 
* @copyright four for business AG 2003 
*/ 
function catIsChildOf($id, $idparent) { 

    global $cfg, $client, $lang; 

    $db = new DB_Contenido; 

    $parent = $id; 

    while ( $parent != 0 ) { 

        $sql = "SELECT 
                    a.parentid 
                FROM 
                    ".$cfg["tab"]["cat"]." AS a, 
                    ".$cfg["tab"]["cat_lang"]." AS b 
                WHERE 
                    a.idclient  = '".$client."' AND 
                    b.idlang    = '".$lang."' AND 
                    a.idcat     = b.idcat AND 
                    a.idcat   = '".$parent."'"; 

        $db->query($sql); 
        $db->next_record(); 

        $parent = $db->f("parentid"); 

        if ($parent == $idparent) { 
            return true; 
        } 

    } 

    return false; 

} 

if ( catIsChildOf($idcat, CMS_VALUE[0]) ) { 
    $sel_idcat = $idcat; 
} else { 
    $sel_idcat = CMS_VALUE[0]; 
} 

// template klasse includen 
include_once($cfg["path"]["contenido"] . 'classes/class.template.php'); 

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


// template instanz 
$tpl = new Template; 

function nav($idcat) { 

        global $navitems, $client, $lang, $db, $cfg; 

        $sql = "SELECT parentid FROM ".$cfg["tab"]["cat"]." WHERE idcat='$idcat'"; 

        $db->query($sql); 
        $db->next_record(); 

        $parentid = $db->f("parentid"); 

        if ( $parentid == 0 ) { 
           if ( $idcat != CMS_VALUE[0] ){ 

              $navitems=array(); 
              $sql = "SELECT A.idcat, C.name 
                      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='CMS_VALUE[0]' ORDER BY A.idtree"; 

                      $db->query($sql); 

                      while ($db->next_record()) { 

                             $tmp_article = new Article($db->f("idcat"), $client, $lang);
                             $navitems[$db->f("idcat")] = array("idcat"=>$db->f("idcat"), 
                                                                "name"=>$db->f("name"),
                                                                "idart"=>$tmp_article->get("idart") ); 
                      } 

           } 
           return true; 
        } 

        $sql = "SELECT A.idcat, C.name 
        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='$parentid' ORDER BY A.idtree"; 

        $db->query($sql); 

        while ($db->next_record()) { 

               $tmp_article = new Article($db->f("idcat"), $client, $lang);
               $tmp_nav[$db->f("idcat")] = array("idcat"=>$db->f("idcat"), 
                                                 "name"=>$db->f("name"),
                                                 "idart"=>$tmp_article->get("idart") ); 
        } 

        $tmp_nav[$idcat]["sub"] = $navitems; 
        $navitems = $tmp_nav; 

        nav($parentid); 

} 



$sql = "SELECT A.idcat, C.name 
        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() ) { 

       $tmp_article = new Article($db->f("idcat"), $client, $lang);
       $navitems[$db->f("idcat")] = array("idcat"=>$db->f("idcat"), 
                                          "name"=>$db->f("name"),
                                          "idart"=>$tmp_article->get("idart") );
} 

nav($sel_idcat); 

/** 
* array $navitems enthält alle daten 
* die für das aufbauen der navigation 
* notwendig sind. 
*/ 
echo '<table cellspacing="0" cellpadding="0" border="0">'; 

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

    // 1. navi ebene 
    $tpl->reset(); 
    $tpl->set('d', 'NAME',  $data['name']); 
    $tpl->set('d', 'HREF',  $sess->url('front_content.php?client='.$client.'&lang='.$lang.'&idcat='.$data['idcat'])); 
    $tpl->next(); 

    if ($idcat == $data['idcat']) { 
        $tpl->generate('templates/navfirst_on.html'); 
    } else { 
        $tpl->generate('templates/navfirst_off.html'); 
    } 

    if (is_array($data['sub'])) { 

        foreach ($data['sub'] as $key => $data) { 

            // 2. navi ebene 
            // 1. navi ebene 
            $tpl->reset(); 
            $tpl->set('d', 'NAME',  $data['name']); 
            $tpl->set('d', 'HREF',  $sess->url('front_content.php?client='.$client.'&lang='.$lang.'&idcat='.$data['idcat'].'&idart='.$data['idart'])); 
            $tpl->next(); 

            if ($idcat == $data['idcat']) { 
                $tpl->generate('templates/navsecond_on.html'); 
            } else { 
                $tpl->generate('templates/navsecond_off.html'); 
            } 

            if (is_array($data['sub'])) { 

                foreach ($data['sub'] as $key => $data) { 

                    // 3. navi ebene 
                    // 1. navi ebene 
                    $tpl->reset(); 
                    $tpl->set('d', 'NAME',  $data['name']); 
                    $tpl->set('d', 'HREF', $sess->url('front_content.php?client='.$client.'&lang='.$lang.'&idcat='.$data['idcat'].'&idart='.$data['idart'])); 
                    $tpl->next(); 

                    if ($idcat == $data['idcat']) { 
                        $tpl->generate('templates/navthird_on.html'); 
                    } else { 
                        $tpl->generate('templates/navthird_off.html'); 
                    } 

                } // end foreach 

            } // end if 

        } // end foreach 

    } // end if 

} // end foreach 

echo '</table>'; 

?>
*** make your own tools (wishlist :: thx)
spengel
Beiträge: 25
Registriert: Do 29. Apr 2004, 12:52
Kontaktdaten:

Beitrag von spengel »

schonmal herzlichen Dank, ich werde mir das gleich mal näher ansehen ;)

Benötigt wird die idart für diese Erweiterung: http://contenido.org/forum/viewtopic.php?t=6713 um dann den Artikeltitel als *.html zu ermöglichen.

bisher z.B. das etwas unschöne:
http://www.domain.de/Gewaesserschutz/(index.html)

und das soll dabei herauskommen:
http://www.domain.de/Gewaesserschutz/Ge ... igung.html
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

ändere mal folgendes

anstelle von

Code: Alles auswählen

$tmp_article = new Article($db->f("idcat"), $client, $lang);
folgendes

Code: Alles auswählen

$tmp_article = new ArticleCollection(array("idcat"=>$db->f("idcat"), "client"=>$client, "lang"=>$lang));
$tmp_article = $tmp_article->startArticle();
*** make your own tools (wishlist :: thx)
spengel
Beiträge: 25
Registriert: Do 29. Apr 2004, 12:52
Kontaktdaten:

Beitrag von spengel »

Das funktioniert jetzt absolut perfekt, die Umwandlung geht einwandfrei! Nochmal herzlichen Dank für Deine Mühe!
Elke Nowak
Beiträge: 1
Registriert: Mi 14. Sep 2005, 21:12
Wohnort: Berlin
Kontaktdaten:

Beitrag von Elke Nowak »

Tag zusammen! Nach mehreren vergeblichen Versuchen mit Mambo bin ich schließlich bei Contenido gelandet. Bisher bin ich wirklich begeistert, fast alles funktionierte auf Anhieb sehr gut. Nun bin ich dummerweise auch auf diese MODRewrite-Erweiterung gestoßen und mußte dabei feststellen, das idarts wohl generell ganz nach belieben verteilt werden. Gibt es keine einheitliche Lösung um die Module kompatibel zumachen? Mich ärgert es das nicht selbst zu können aber dieses Parameter-durcheinander in den Modulen macht es einem auch nicht gerade leicht.

zB die Sitemap, die hier im Forum weit verbreitet ist hat auch keine idarts im Link, Artikellisten und Suchskripte dagegen schon. Somit habe ich schonmal mindestens 2 Links auf ein und denselben Inhalt (Stichwort: "double content"). Dazu kommen dann noch Module wo die Parameter (client/lang/idcat) umgestellt sind, im Moment habe ich wohl 5-6 verschiedene Links für ein und dieselbe Seite.

Emergence (und natürlich andere), wenn es Deine/Eure Zeit erlaubt, könntest Du/Ihr in diesem Thread vielleicht einige wichtige Module "anpassen"? Das scheinen ja für einen Profi wirklich nur geringe Änderungen zu sein, mir wäre damit aber sehr geholfen. Gibt es eventuell ein Paypal-Spendenkonto bei dem man sich für so eine Anpassung bedanken könnte ?

Meine Anliegen wären: Sitemap

Code: Alles auswählen

<?php 
  /*********************************************** 
  * CONTENIDO MODUL - OUTPUT 
  * 
  *  Modulname   :     Sitemap 
  * Author(s)      :    Nik Wyss 
  * Copyright   :     None 
  * Created     :     14-01-2003 
  * Modified    :     14-01-2003 
  * Modified    :     29-12-2003 by Sascha Benkart. 
  *                   - Adapt to Contenido V4.4 
  *                   - Output only shows visible items 
  ************************************************/ 
  

  $amountLevel = "CMS_VALUE[1]"; 
  $newcat = "CMS_VALUE[0]"; 
  $color = array("#9E9D9D", "#BEBDBD","#CCCCCC","#DAD9D9"); 
  $startLevel = "1"; 
  
  function sitemap($newcat=0) 
  { 
    global $lang, $client, $amountLevel, $color, $startLevel, $cfg; 
    $db  = new DB_Contenido; 
    $sql  = "SELECT * 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 ". 
              "C.idlang='$lang' AND B.idclient='$client' AND ". 
              "B.parentid =$newcat AND level <= $amountLevel AND C.visible=1 AND C.public=1 ". 
              "ORDER by A.idtree"; 
    $db->query($sql); 
    $result = "<table border=0 cellspacing=1 cellpadding=3 border=0>"; 
    while ($db->next_record()) 
    { 

  
      $lvl = $db->f("level"); 




      if ($lvl == '1') 
      { 
        $result.="<tr><td></td></tr>"; 
      } 



      $colorID=$lvl-$startLevel; 
      if ($colorID > count($color)-1) 
      { 
        $colorID=count($color)-1; 
      } 

      
      $result.= "<tr><td width='120px' bgcolor='".$color[$colorID]. 
                  "' valign=top><a href='front_content.php?idcat=".$db->f("idcat"). 
                  "&lang=$lang&client=$client' class='menu'>". 
                  $db->f("name")."</a></td><td>".sitemap($db->f("idcat")). 
                  "</td></tr>"; 
    } 



    $result.= "</table>"; 
    return($result); 
  } 
  
  $sql = "SELECT level FROM $cfgTab_cat_tree WHERE idcat=$newcat"; 
  $db->query($sql); 
  $db->next_record(); 
  $startLevel = $db->f("level"); 
  $amountLevel +=  $startLevel; 
  if ($newcat==0){$amountLevel--;} 
  echo sitemap($newcat); 
?>
und Location String:

Code: Alles auswählen

<php 

/*********************************************** 
* 
* MODUL: Location-String (ohne Startikel) 
* 
* Author    :     Martin Horwath 
* Created   :     10.09.2003 
* Modified  :     05.02.2005 (by matze) 
* 
************************************************/ 


$nav_tp = $idcat; 

// AUSGABE Location-String (nur Kategorien) 
while($nav_tp > 0) { 
  $sql = "SELECT 
              parentid, A.idcat, A.level, name 
          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 
              C.idlang='$lang' AND 
              B.idclient='$client' AND 
              B.idcat ='$nav_tp'"; 

  $db->query($sql); 
  $db->next_record(); 
  $nav_tree[$db->f("level")][idcat] = $nav_tp; 
  $nav_tree[$db->f("level")][parent] = $db->f("parentid"); 
  $nav_tree[$db->f("level")][name] = $db->f("name"); 
  $nav_tree[$db->f("level")][link] = $sess->url("front_content.php?idcat=".$db->f("idcat")."&client=".$client."&lang=".$lang.""); 
  $nav_tp = $db->f("parentid"); 
} 

for($i=0;$i<count($nav_tree);$i++) { 
  echo "<a href=\"".$nav_tree[$i][link]."\">".$nav_tree[$i][name]."</a>"; 
  if($nav_tree[$i][idcat] != $idcat) { 
    echo " > "; // seperator 
  } 
} 



// AUSGABE vom aktuellen Artikeltitel 
$i=$i-1; 
$new_idart=$idart; 

$sql = "SELECT 
             idart, is_start 
        FROM 
              ".$cfg["tab"]["cat_art"]." 
        WHERE 
              idart='$new_idart' AND is_start='0'"; 

$db->query($sql); 

if($db->next_record()) { 

  $sql = "SELECT 
             idartlang, title 
          FROM 
              ".$cfg["tab"]["art_lang"]." 
          WHERE 
              idartlang='$new_idart'"; 

  $db->query($sql); 
  $db->next_record(); 
  $art_titel=$db->f("title"); 

echo " > <a href=\"".$nav_tree[$i][link]."&idart=$new_idart\">".$art_titel."</a>"; 

} 
?>
auf bald
Elke
Gesperrt