Seite 1 von 1

Navigationswunder

Verfasst: Mi 12. Apr 2006, 20:08
von jacke
Hallo,
bei mt taucht ein komischer Fehler auf. Wenn ich in eine Kategorie springe, über die Hauptnavi, wird alles richtig angezeigt. Gelange ich auf den Artikel über die Seitennavi, ist das Hauptnavi weg. Dabei ist mir aufgefallen, dass ein unterschiedlicher client im Link angesprungen wird - nur wo ist da der Wurm drin?
Link über Hauptnavi:

http://www.torzurwelt.de/menteroda/fron ... t=8&lang=6

Link über Seitennavi:

http://www.torzurwelt.de/menteroda/fron ... t=1&lang=6

wo kann man das wie´der richten?

schönen Abend noch !!
jacke

Verfasst: Mi 12. Apr 2006, 20:16
von Halchteranerin
Welches Modul benutzt du fuer die "Seitennavi"? Servicenavi? Woher kommt der Client mit der Nr. 1? Der muss wohl auch im System vorhanden sein, sonst wuerde ja nichts angezeigt werden.

Verfasst: Mi 12. Apr 2006, 21:02
von jacke
Hallo,

ich benutze - keine Ahnung wo das her ist-:

Seitennavigation
um eine zusätzliche Navigation über Artikel zu ermöglichen

Code: Alles auswählen


::INPUT::

// selected category
$selected = "CMS_VALUE[0]";
$checked = "CMS_VALUE[4]";



echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
        <tr valign=\"top\">
          <td>Kategorie wählen:</td>
          <td>
            <select name=\"CMS_VAR[0]\">";
            if($selected!="0" && $selected!=""){
             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' ".
                     "ORDER BY A.idtree";
            // execute query
            $db->query($query);

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

              // indent spacer
              $spaces = "|";

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

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

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


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

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

              } // end if

            } // end while

echo "      </select>";

echo "    </td>
        </tr>
        <tr>
          <td>Überschrift anzeigen ?</td>
          <td><input type=\"checkbox\" name=\"CMS_VAR[4]\" value=\"Y\"";
if($checked) echo " checked";
echo "></td>
        </tr>
        <tr>
          <td>Hintergrundfarbe</td>
          <td><input type=\"text\" name=\"CMS_VAR[5]\" value=\"CMS_VALUE[5]\"></td>
        </tr>
        <tr>
          <td>Randfarbe</td>
          <td><input type=\"text\" name=\"CMS_VAR[6]\" value=\"CMS_VALUE[6]\"></td>
        </tr>
      </table>";


::OUTPUT::

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

$first_line = "CMS_VALUE[4]";

$catStart = "CMS_VALUE[0]";

if ($catStart != "") {
  echo '<table cellpadding="0" cellspacing="0" border="0"><tr>';
  if($first_line == "Y") {
    echo '<td> <img src="images/leer.gif"> </td>';
  }
        $sql = "SELECT ART.idart, ARTLANG.title, CATLANG.idlang as lang, CAT.idclient FROM 
               ".$cfg["tab"]["cat_art"]." AS ART, ".$cfg["tab"]["cat_lang"]."
               AS CATLANG, ".$cfg["tab"]["art_lang"]." AS ARTLANG, 
               ".$cfg["tab"]["cat"]." AS CAT
               WHERE ART.idcat =  '".$catStart."' AND ART.idcat = CATLANG.idcat 
               AND ARTLANG.idart = ART.idart AND CATLANG.idlang = ARTLANG.idlang
               AND ARTLANG.online = '1'
               GROUP BY ARTLANG.title ORDER BY ARTLANG.artsort";

        $db->query($sql);


        while ( $db->next_record() ) {
          echo '<td height="21" class=".navigation" style="border: 1px; border-color: CMS_VALUE[6]; border-style: dashed; background-color: CMS_VALUE[5]; padding-left:7px; padding-right:7px;">
          <a class="klein" href="front_content.php?idcat='.$catStart.'&idart='.$db->f("idart").'&client='.$db->f("idclient").'&lang='.$db->f("lang").'">'.$db->f("title").'</a></td>';
        } // end while

  echo '</tr></table>';

}
?>
Ja, den Mandanten 1 gibt es auch - wird aber nicht benutzt.

Danke schon mal

Verfasst: Mi 12. Apr 2006, 21:33
von Halchteranerin
Ich kenne diese Navigation nicht, aber ist die evtl. falsch konfiguriert oder so? Eine andere Erklaerung habe ich leider nicht.

Verfasst: Do 13. Apr 2006, 00:13
von HerrB
Dieses SQL-Statement ist Murx:

Code: Alles auswählen

$sql = "SELECT ART.idart, ARTLANG.title, CATLANG.idlang as lang, CAT.idclient FROM 
               ".$cfg["tab"]["cat_art"]." AS ART, ".$cfg["tab"]["cat_lang"]." 
               AS CATLANG, ".$cfg["tab"]["art_lang"]." AS ARTLANG, 
               ".$cfg["tab"]["cat"]." AS CAT 
               WHERE ART.idcat =  '".$catStart."' AND ART.idcat = CATLANG.idcat 
               AND ARTLANG.idart = ART.idart AND CATLANG.idlang = ARTLANG.idlang 
               AND ARTLANG.online = '1' 
               GROUP BY ARTLANG.title ORDER BY ARTLANG.artsort"; 
Es wird zwar die Tabelle con_cat als CAT eingebunden, jedoch in keinerlei Zusammenhang mit den anderen Tabellen gesetzt (es gibt nirgendwo ein CAT.idcat = <andere Tabelle>.idcat).

Daher erzeugt mySQL aus der Abfrage ein Kreuzprodukt aller möglicher Zeilen aus allen Tabellen.

Empfohlene Lösung: Code anderswo speichern (Backup) und dann ", CAT.idclient" und ", ".$cfg["tab"]["cat"]." AS CAT " aus der Abfrage entfernen:

Code: Alles auswählen

$sql = "SELECT ART.idart, ARTLANG.title, CATLANG.idlang as lang FROM 
               ".$cfg["tab"]["cat_art"]." AS ART, ".$cfg["tab"]["cat_lang"]." 
               AS CATLANG, ".$cfg["tab"]["art_lang"]." AS ARTLANG 
               WHERE ART.idcat =  '".$catStart."' AND ART.idcat = CATLANG.idcat 
               AND ARTLANG.idart = ART.idart AND CATLANG.idlang = ARTLANG.idlang 
               AND ARTLANG.online = '1' 
               GROUP BY ARTLANG.title ORDER BY ARTLANG.artsort"; 
Sofern Du nicht mehrere Mandanten im gleichen Verzeichnis einsetzt, kannst Du dann "&client='.$db->f("idclient").'" aus der Ausgabe weiter unten entfernen.

Wenn Du mehrere Mandanten im gleichen Verzeichnis hast (sehr ungewöhnlich) kannst Du das durch "&client='.$client.'" ersetzen. Generell benötigt man aber die $client-Angabe nicht, da sie sich aus dem Mandanten-Verzeichnis (Beispiel: cms) ergibt.

Gruß
HerrB

Verfasst: Di 18. Apr 2006, 12:03
von jacke
Danke,

als ich den vorgeschlagenen code ausgewechselt hab ging es nicht mehr - Fehlermeldung. Aber das entfernen der clietabfrage hall alles wieder schön gemacht (mit altem code)

nochmal DANKE!

Verfasst: Di 18. Apr 2006, 14:03
von HerrB
Der angegebene Code ist IMHO korrekt, da ist dann wohl was beim Austauschen schief gelaufen... das &client='.$db->f("idclient") muss man natürlich immer entfernen.

Gruß
HerrB