Service Navi zwei mal benutzen

Gesperrt
soyyo
Beiträge: 9
Registriert: Di 2. Nov 2004, 15:23
Wohnort: Köln
Kontaktdaten:

Service Navi zwei mal benutzen

Beitrag von soyyo »

Hallo,

ich will die Service Navi, die standardmäßig bei der Installation dabei ist zweimal benutzen, einmal verändert:

Die Service Navi soll in der Fusszeile nochmal auftauchen, dahinter die Menupunkte von der Hauptnavi.

Ich hab das Modul kopiert und unter einen anderen Namen abgespeichert. Dann habe ich den Eingabebereich 2 mal hintereinander kopiert und den Ausgabebereich auch. Alle Variablen habe ich mit 1 und 2 gekennzeichnet, damit keine überschrieben wird.

Bekomme jetzt aber eine Fehlermeldung:
Fatal error: Call to a member function on a non-object in d:\inetpub\resultgruppe\cms\front_content.php(567) : eval()'d code on line 805

Hier der Input:

Code: Alles auswählen


// selected category 1
$selected1 = "CMS_VALUE[10]";

$db1 = new DB_Contenido;

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td class=\"text_medium\">Kategorie w?hlen:</td>
          <td>
            <select name=\"CMS_VAR[10]\">";
            if($selected1!="0" && $selected1!=""){
             echo"<option value=\"0\">--- kein ---</option>";

            }else{
            echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
            }

            // fetch all categorys
            $query = "SELECT A.idcat, A.level, 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 C.idlang='$lang' AND B.idclient='$client' ".
                     "AND C.visible=1 ORDER BY A.idtree";
            // execute query
            $db1->query($query);

            // loop result and build the options
            while ($db1->next_record()) {

              // indent spacer
              $spaces = "|";

              // how many levels
              $levels = $db1->f("level");

              for ($i = 0; $i < $levels; $i ++) {
                // add 2 spaces for every level
                $spaces = $spaces . "--";

              } // end for
              
              $spaces .= ">";


              if ($selected1 == $db1->f("idcat")) {
                // selected category
                echo "<option selected=\"selected\" value=\"". $db1->f("idcat") ."\">". $spaces . $db1->f("name") ."</option>";

              } else {
                // category
                echo "<option value=\"". $db1->f("idcat") ."\">". $spaces . $db1->f("name") ."</option>";

              } // end if

            } // end while

echo "      </select>";

echo "    </td>
        </tr>
      </table>";


// selected category 2
$selected2 = "CMS_VALUE[20]";

$db2 = new DB_Contenido;

echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td class=\"text_medium\">Kategorie w?hlen:</td>
          <td>
            <select name=\"CMS_VAR[20]\">";
            if($selected2!="0" && $selected2!=""){
             echo"<option value=\"0\">--- kein ---</option>";

            }else{
            echo"<option selected=\"selected\" value=\"0\">--- kein ---</option>";
            }

            // fetch all categorys
            $query = "SELECT A.idcat, A.level, 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 C.idlang='$lang' AND B.idclient='$client' ".
                     "AND C.visible=1 ORDER BY A.idtree";
            // execute query
            $db2->query($query);

            // loop result and build the options
            while ($db2->next_record()) {

              // indent spacer
              $spaces = "|";

              // how many levels
              $levels2 = $db2->f("level");

              for ($i = 0; $i < $levels2; $i ++) {
                // add 2 spaces for every level
                $spaces = $spaces . "--";

              } // end for
              
              $spaces .= ">";


              if ($selected2 == $db2->f("idcat")) {
                // selected category
                echo "<option selected=\"selected\" value=\"". $db2->f("idcat") ."\">". $spaces . $db2->f("name") ."</option>";

              } else {
                // category
                echo "<option value=\"". $db2->f("idcat") ."\">". $spaces . $db2->f("name") ."</option>";

              } // end if

            } // end while

echo "      </select>";

echo "    </td>
        </tr>
      </table>";

Hier der Output:

Code: Alles auswählen


<?php

include_once($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");

echo '<hr width="936" size="1"><p align="center">';

$catStart1 = "CMS_VALUE[10]";

if ($catStart1 != "") {
  $catIds1 = conDeeperCategoriesArray($catStart1);


  if ( is_array($catIds1) ) {

    $anzahl1 = count($catIds1);
    $i1=1;


    foreach($catIds1 as $key=>$val) {
      // Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
      // und nicht angezeigt werden soll.
      if ($key != 0) {

        $sql = "SELECT CAT.idcat AS idcat, name FROM ".
               $cfg["tab"]["cat"]." AS CAT, ".
               $cfg["tab"]["cat_lang"]." AS CATLANG 
               WHERE CAT.idcat = ".$val."
               AND CAT.idcat = CATLANG.idcat
               AND CATLANG.idlang = '$lang'
               AND CATLANG.visible = '1'";

        $db1->query($sql);

        $db2 = new DB_Contenido;
        
        while ( $db1->next_record() ) {
        
           $target = "_self";
          
          /* Check for redirect and new window flag */
          $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='". $db1->f("idcat")."' AND is_start = '1'";
          $db2->query($sql);
          if ($db2->next_record())
          {
                $cidart1 = $db2->f("idart");
                $sql = "SELECT external_redirect FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '$cidart1' AND idlang='$lang'";
                $db2->query($sql);
                if ($db2->next_record())
                {
                    $target = ( $db2->f("external_redirect") == 0 ) ? '_self' : '_blank';
                }
          }

       echo '   <a  target="'.$target.'" href="front_content.php?idcat='.$db1->f("idcat").'">'.$db1->f("name").'</a>';

   $i1=$i1+1; 
    if ($i1<$anzahl1) echo ' | ';


        } // end while
      } // if
    }  // end foreach
  } // end if (is_array)

}


$catStart2 = "CMS_VALUE[20]";

if ($catStart2 != "") {
  $catIds2 = conDeeperCategoriesArray($catStart2);


  if ( is_array($catIds2) ) {

    $anzahl2 = count($catIds2);
    $i2=1;


    foreach($catIds2 as $key=>$val) {
      // Ersten Eintrag ueberspringen, weil das der Menupunkt selbst ist
      // und nicht angezeigt werden soll.
      if ($key != 0) {

        $sql = "SELECT CAT.idcat AS idcat, name FROM ".
               $cfg["tab"]["cat"]." AS CAT, ".
               $cfg["tab"]["cat_lang"]." AS CATLANG 
               WHERE CAT.idcat = ".$val."
               AND CAT.idcat = CATLANG.idcat
               AND CATLANG.idlang = '$lang'
               AND CATLANG.visible = '1'";

        $db3->query($sql);

        $db4 = new DB_Contenido;
        
        while ( $db3->next_record() ) {
        
           $target = "_self";
          
          /* Check for redirect and new window flag */
          $sql = "SELECT idart FROM ".$cfg["tab"]["cat_art"]." WHERE idcat='". $db3->f("idcat")."' AND is_start = '1'";
          $db4->query($sql);
          if ($db4->next_record())
          {
                $cidart2 = $db4->f("idart");
                $sql = "SELECT external_redirect FROM ".$cfg["tab"]["art_lang"]." WHERE idart = '$cidart2' AND idlang='$lang'";
                $db4->query($sql);
                if ($db4->next_record())
                {
                    $target = ( $db4->f("external_redirect") == 0 ) ? '_self' : '_blank';
                }
          }

       echo '   <a  target="'.$target.'" href="front_content.php?idcat='.$db3->f("idcat").'">'.$db3->f("name").'</a>';

   $i2=$i2+1; 
    if ($i2<$anzahl2) echo ' | ';


        } // end while
      } // if
    }  // end foreach
  } // end if (is_array)

}

echo '</p>';


?>

Der Eingabebereich funktioniert hervoragend, ich kann also die Servicenavi und die Hauptnavi auswählen.

Aber auf der front_content.php kommt eben die Fehlermeldung.
Hab schon probiert, ob es funktioniert, wenn ich die Service Navi (die auch noch oben rechts in der Ecke zu sehen ist) auch mal ausgeschaltet, geht aber trotzdem nicht.

Vielen Dank schon mal!!

Grüße

Catarina
Hat jemand eine Idee??
soyyo
Beiträge: 9
Registriert: Di 2. Nov 2004, 15:23
Wohnort: Köln
Kontaktdaten:

HABS!!!

Beitrag von soyyo »

Ich hab den Fehler grad selber gefunden,

im Output _Bereich:
db1 und db3 waren nicht definiert.

Es fehlt also am Anfang:

$db1 = new DB_Contenido;
$db3 = new DB_Contenido;

Grüße

Catarina.
soyyo
Beiträge: 9
Registriert: Di 2. Nov 2004, 15:23
Wohnort: Köln
Kontaktdaten:

von Hauptnavi soll nur oberste Ebene dargestellt werden

Beitrag von soyyo »

Jetzt hab ich aber noch ein Problem:

Jetzt hab ich zuerst die Service Navi, dann die Hauptnavi komplett, also mit Unternavi-Punkten in der Fusszeile. Ich möchte aber nur die erste Ebene aufzeigen.
Ich denke ich muss den SQL - Befehl so umbauen, dass er nur die erste Ebene rauszieht.

Bin ich auf dem richtigen Weg?

Vielen Dank,

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

Beitrag von emergence »

öhm nein...
-> conDeeperCategoriesArray liefert den array für alle enthaltenen kategorien(zumindestens sollte sie das)... (functions.con.php)

du müsstest dir ein equivalent bauen, so dass die ebenen begrenzt sind....
*** make your own tools (wishlist :: thx)
soyyo
Beiträge: 9
Registriert: Di 2. Nov 2004, 15:23
Wohnort: Köln
Kontaktdaten:

Hier die Lösung

Beitrag von soyyo »

ich hab die Funktion conDeeperCategoriesArray
umgeschrieben und ins Modul kopiert. Dann die entsprechenden Funktions-Aufrufe ändern. So sieht die geänderte Funktion aus:

Code: Alles auswählen


function conCategoriesArray($idcat_start)
{

    global $db, $client, $cfg;

    $sql = "SELECT
                *
            FROM
                ".$cfg["tab"]["cat_tree"]." AS A,
                ".$cfg["tab"]["cat"]." AS B
            WHERE
                A.idcat  = B.idcat AND
                idclient = '".$client."'
            ORDER BY
                idtree";

    $db->query($sql);

    $found = false;

    while ( $db->next_record() ) {

    if ($db->f("level") <= 1) 
    {
        if ($found && $db->f("level") <= $curLevel) {  // ending part of tree
            $found = false;
        }


        if ($db->f("idcat") == $idcat_start) {         // starting part of tree
            $found = true;
            $curLevel = $db->f("level");
        }

        if ($found) {
            $catstring[] = $db->f("idcat");
        }
    }

   }

    return $catstring;
}
Funktioniert. Ich will nur die oberste Ebene anzeigen.
Grüße

Catarina.
Gesperrt