guten morgen community
hab mal wieder ein wenig an meinem Modul rumgepfusch und werde es euch nun hier als version
0.5 alpha präsentieren.
Aja, was mir grad so auffält, eigentlich passt das Modul ja nur noch zu 50% in den Thread, da es sich ja nicht mehr um eine reine Horizontale Navigation handelt.
Nun erstmal das ChangeLog und dann der Input/Output code as usual:
SN_NavMod v0.5 alpha - ChangeLog
Code: Alles auswählen
/***********************************************
* CONTENIDO MODUL
*
* Modulname : SN_NavMod
* Modulversion : 0.5 alpha
* Author : Stefan Bürk
* Kontakt : Email: webmaster@skyblader.org
* Copyright : SkyBlader Networxx, Stefan Bürk
* C-Version : 4.4
* Created : 09-03-2004
* Modified : 21-10-2004
*
* Beschreibung :
*
* Navigationsstruktur für Untermenüs mit 1 Navigationsebene,
* Ausgabe ist im Output Modul über Variabeln steuerbar.
*
************************************************/
21.10.2004
==========
IN Entfernen der Defaultwerte, da diese immer eingetragen wurden wenn
Feld leerwar und zur Konfiguration gesprungen wurde
Bei Auswahl von "-- kein --" anderen Wert nehmen, da der Wert "0"
in der DB auch eine Kategorie bezeichnet ---> "0" => "--kein--"
Hinzufügen von Beschriftungsvariabeln, um ein Umstellen auf das
Modul-Sprachsteuerungsfeature von 4.5.x / 4.6 vorzubereiten.
OUT Überprüfungen eingebaut, um bei angabe von "-- kein --" auch wirklich
keine Ausgabe zu generieren.
Mehrfachunterstützung durch anpassungen im Code hergestellt.
21.09.2004
==========
OUT Implementierung von zwei Funktionen, um für den Highlight Teil die
Überprüfung, ob ein Entry hervorgehoben werden darf, auch bei Kinder
ebene innerhalb des Kategoriebaumes sicherzustellen.
Desweiteren wurde die im Inputteil als Konfigurierbar bereitgestellten
Variabeln für die CSS-Klassenauswahl für Link und LinkHervorgehoben
in der Routine nun berücksichtig.
IN Auswahlschalter für HighlightingsÜberprüfung unter Berücksichtigung
von CHILD-Ids implementiert => cfg_check_parequal
IN Konfiguration zur Konfigurierung für die CSS-Klasse für NavLink und
NavLink Hervorgehoben (Aktuelle Category)
20.09.2004
==========
IN Implementierung von weiteren Konfigurationsmöglichkeiten für
- VorLink
- NachLink
- LinkTrennzeichen
- Anfang
- Ende
bei einem Aufbau der Linksammlungen für das dynamische Menü im
folgenden Format:
ANFANG + [ VorLink + {LINK} + NachLink ] + LinkTrennzeichen + [ VorLink + {LINK} + NachLink ] ..... + Ende
OUT Anpassen der Ausgabeerstellungsroutingen, um die neue Konfigurierbarkeit in den
Routinen zu berücksichtigen.
17.09.2004
==========
OUT Erweiterung um weitere Konfigurationsvariablen für die Ausgabensteuerung,
um eine weitere modularisierung zu bewerkstelligen.
Dazu wurden unter anderem auch drei kleine Bugs entfernt, die vorher nicht
aufgefallen sind, und erst durch die modularisierung zum tragen kamen.
30.06.2004
==========
out Manuelle sortierung der CatIds auf Grund der PREID, da dies durch
eine SQL Anweisung nicht zu bewerkstelligen ist.
--> siehe http://www.contenido.de/forum/viewtopic.php?t=4576
in Font und Select auf BackEnd CSS Klassen vom umgestellt.
19.03.2004
==========
out DB-Abfrage 2 ( $sql ) lesbar für Otto-Normal-Verbraucher formatiert
17.03.2004
==========
out Securitychecks implementiert um Injections zu unterbinden
- lokale Modul-Variablen initalizieren um Injects zu unterbinden
- Parametervariabeln gegen SQL-Injection-Versuche untersuchen
SN_NavMod v0.5 alpha - INPUT
Code: Alles auswählen
/***********************************************
* INPUT
************************************************/
// selected category
$selected = "CMS_VALUE[3200]";
$selected_var = "CMS_VAR[3200]";
$selected_desc = "Wähle die Kategorie aus:";
$selected2 = "CMS_VALUE[3201]";
$selected2_var = "CMS_VAR[3201]";
$selected2_desc = "Wähle die Home-Kategorie aus:";
// cfg_prelink
$cfg_prelink = "CMS_VALUE[3202]";
$cfg_prelink_var = "CMS_VAR[3202]";
$cfg_prelink_desc = "Füge vor jedem Link hinzu:";
$cfg_postlink = "CMS_VALUE[3203]";
$cfg_postlink_var = "CMS_VAR[3203]";
$cfg_postlink_desc = "Füge nach jedem Link hinzu:";
$cfg_linkdiv = "CMS_VALUE[3204]";
$cfg_linkdiv_var = "CMS_VAR[3204]";
$cfg_linkdiv_desc = "Verwende als Trennung folgendes:";
$cfg_pre_str = "CMS_VALUE[3205]";
$cfg_pre_str_var = "CMS_VAR[3205]";
$cfg_pre_str_desc = "Füge einmal am Anfang der Navigationsausgabe an:";
$cfg_post_str = "CMS_VALUE[3206]";
$cfg_post_str_var = "CMS_VAR[3206]";
$cfg_post_str_desc = "Füge einmal am Ende der Navigationsausgabe an:";
$cfg_check_parequal = "CMS_VALUE[3207]";
$cfg_check_parequal_var = "CMS_VAR[3207]";
$cfg_check_parequal_desc= "Auf Kategoriehighlight prüfen:";
$cfg_css_link = "CMS_VALUE[3208]";
$cfg_css_link_var = "CMS_VAR[3208]";
$cfg_css_link_desc = "CSS-Klasse für normalen Navigationslink:";
$cfg_css_linkhl = "CMS_VALUE[3209]";
$cfg_css_linkhl_var = "CMS_VAR[3209]";
$cfg_css_linkhl_desc = "CSS-Klasse für hervorgehobenen Navigationslink:";
echo "<table cellspacing=\"0\" cellpadding=\"10\" border=\"0\">
<tr valign=\"top\">
<td class=\"text_medium\">".$selected_desc."</td>
<td class=\"text_medium\">
<select class=\"text_medium\" name=\"".$selected_var."\">";
if($selected!="--kein--" && $selected!=""){
echo"<option value=\"--kein--\">--- kein ---</option>";
}else{
echo"<option selected=\"selected\" value=\"--kein--\">--- 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
$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 valign=\"top\">
<td class=\"text_medium\">".$selected2_desc."</td>
<td class=\"text_medium\">
<select class=\"text_medium\" name=\"".$selected2_var."\">";
if($selected2!="--kein--" && $selected2!=""){
echo"<option value=\"--kein--\">--- kein ---</option>";
}else{
echo"<option selected=\"selected\" value=\"--kein--\">--- 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
$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 ($selected2 == $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>";
// *********************************************************************************************************
// *** cfg_prelink
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_prelink_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" name=\"".$cfg_prelink_var."\" value=\"".$cfg_prelink."\">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_prelink
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_postlink
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_postlink_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" name=\"".$cfg_postlink_var."\" value=\"".$cfg_postlink."\">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_postlink
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_linkdiv
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_linkdiv_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" name=\"".$cfg_linkdiv_var."\" value=\"".$cfg_linkdiv."\">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_linkdiv
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_pre_str
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_pre_str_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" name=\"".$cfg_pre_str_var."\" value=\"".$cfg_pre_str."\">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_pre_str
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_post_str
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_post_str_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" name=\"".$cfg_post_str_var."\" value=\"".$cfg_post_str."\">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_post_str
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_check_parequal
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_check_parequal_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" type=\"checkbox\" name=\"".$cfg_check_parequal_var."\" value=\"0\"";
if ( $cfg_check_parequal == 1 )
{
echo " checked=checked";
}
echo ">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_check_parequal
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_css_link
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_css_link_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" type=\"text\" name=\"".$cfg_css_link_var."\" value=\"".$cfg_css_link."\">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_css_link
// *********************************************************************************************************
// *********************************************************************************************************
// *** cfg_css_linkhl
// *********************************************************************************************************
echo " <tr valign=\"top\">
<td class=\"text_medium\">".$cfg_css_linkhl_desc."</td>
<td class=\"text_medium\">";
echo " <input class=\"text_medium\" type=\"text\" name=\"".$cfg_css_linkhl_var."\" value=\"".$cfg_css_linkhl."\">";
echo " </td>
</tr>";
// *********************************************************************************************************
// *** end cfg_css_linkhl
// *********************************************************************************************************
echo "</table>";
SN_NavMod v0.5 alpha - OUTPUT
Code: Alles auswählen
<?php
/***********************************************
* OUTPUT
************************************************/
include_once($cfg["path"]["contenido"].$cfg["path"]["includes"]."functions.con.php");
// ****************************************************************************************************
// SECURITY-CHECKS
// ****************************************************************************************************
// SQL-Injection Überprüfungen und Work-Arounds
// lokale Variabeln initialisieren um Injections zu unterbinden
$db2 = "";
$catStart = "";
$catPrev = "";
$sTmpStr = "";
$db2_sql = "";
$catIds = "";
$key = "";
$val = "";
$sql = "";
// ****************************************************************************************************
// erstelle eine zweite DB-Klasseninstanz, da wir hier
// mit zwei Abfragen udn Resultsets arbeiten müssen
$db2 = new DB_Contenido;
/*
$eckkla_auf = ':: ';
$eckkla_zu = '';
$eckkla_trenn = '<br>';
$strBEGIN = '';
$strEND = '';
*/
// Hole aus der Artikeldefinition die Ausgewählte Einstellungen
$catStart = "CMS_VALUE[3200]";
$catPrev = "CMS_VALUE[3201]";
$eckkla_auf = "CMS_VALUE[3202]";
$eckkla_zu = "CMS_VALUE[3203]";
$eckkla_trenn = "CMS_VALUE[3204]";
$strBEGIN = "CMS_VALUE[3205]";
$strEND = "CMS_VALUE[3206]";
$cfg_chkchildid = "CMS_VALUE[3207]";
$cfg_css_link = "CMS_VALUE[3208]";
$cfg_css_linkhl = "CMS_VALUE[3209]";
// * get catPrec Category and output CatName as [ BackTo ] nav item
if ($catStart != "" && $catStart != "--kein--" ) {
$sTmpStr = "";
// Datenbankabfrage ( SQL QUERY ) aufbauen
$sql = " SELECT
CAT.idcat AS idcat,
name
FROM
".$cfg["tab"]["cat"]." AS CAT,
".$cfg["tab"]["cat_lang"]." AS CATLANG
WHERE CAT.idcat = ".$catPrev."
AND CAT.idcat = CATLANG.idcat
AND CATLANG.idlang = '$lang'
AND CATLANG.visible = '1'";
// Datenbankabfrage durchführen
$db->query($sql);
// die einzelnen Recordsets der Datenbankabfrage durchgehen
while ( $db->next_record() ) {
// überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist
if ( strlen($sTmpStr) == 0 ) {
// ... Nein, dann die Formatierung für den ersten Eintrag verwenden
// und den Eintrag der Ausgabevariabel hinzufügen
$sTmpStr = $sTmpStr . $strBEGIN . $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
}
else
{
// ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
// den Eintrag der Ausgabevariabel hinzufügen
$sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
} // end if
} // end while
$db2_sql = " SELECT
*
FROM ". $cfg["tab"]["cat"] ." AS A
WHERE
A.parentid = ". $catStart . "
ORDER BY A.preid
";
// Abfrage ausführen
$db2->query($db2_sql);
// Ermittlung aller Kategorie IDs der ausgesuchten
// Navigationsebene und speicherug in einem Array
while ( $db2->next_record() ) {
// $catIds[] = $db2->f("idcat");
$test_1[$db2->f("preid")] = $db2->f("idcat");
}
/*
PREID => IDCAT ( $test_1 )
Array (
[0] => 50
[26] => 27
[27] => 28
[28] => 29
[29] => 30
[30] => 31
[31] => 32
[32] => 33
[33] => 38
[34] => 35
[35] => 36
[36] => 37
[38] => 34
[50] => 26
)
------------------------------------
*/
// ---------------------------------------------
// sort ids
$ar_anz = count($test_1);
$lpre = 0;
$test_3 = "";
$ires = "";
for ( $sli = 1 ; $sli <= $ar_anz ; $sli++ )
{
$ires = $test_1[$lpre];
$test_3[] = $test_1[$lpre];
$lpre = $ires;
}
// print_r($test_3); echo '<br><br>';
$catIds = $test_3;
// ---------------------------------------------
// Überprüfung ob $catIds wirklich ein Array ist
if ( is_array($catIds) ) {
// die einzelnen IDs durchgegen
foreach($catIds as $key=>$val) {
// Datenbankabfrage ( SQL QUERY ) aufbauen
$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'";
// Datenbankabfrage durchführen
$db->query($sql);
// die einzelnen Recordsets der Datenbankabfrage durchgehen
while ( $db->next_record() ) {
if ( $cfg_chkchildid && sn_check_if_child ( $idcat, $catStart ))
{
// überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist
if ( strlen($sTmpStr) == 0 ) {
// ... Nein, dann die Formatierung für den ersten Eintrag verwenden
// und den Eintrag der Ausgabevariabel hinzufügen
$sTmpStr = $sTmpStr . $strBEGIN . $eckkla_auf . '<a class="'.$cfg_css_linkhl.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
}
else
{
// ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
// den Eintrag der Ausgabevariabel hinzufügen
$sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="'.$cfg_css_linkhl.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
} // end if
}
else
{
// überprüfung, ob schon ein Eintrag in der Ausgabevariabel ist
if ( strlen($sTmpStr) == 0 ) {
// ... Nein, dann die Formatierung für den ersten Eintrag verwenden
// und den Eintrag der Ausgabevariabel hinzufügen
$sTmpStr = $sTmpStr . $strBEGIN . $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
}
else
{
// ... Ja, dann die Formatierung für die weiteren Einträge verwenden und
// den Eintrag der Ausgabevariabel hinzufügen
$sTmpStr = $sTmpStr . $eckkla_trenn . $eckkla_auf . '<a class="'.$cfg_css_link.'" href="front_content.php?idcat='.$db->f("idcat").'">'.$db->f("name").'</a>' . $eckkla_zu;
} // end if
}
} // end while
} // end foreach
// END Zeichen $strEND anfügen
$sTmpStr = $sTmpStr . $strEND;
// Ausgabevariabel schreiben, da nun alle Einträge behandelt wurden.
echo $sTmpStr;
} // end if (is_array)
}
if ( $sn_navmod != "multiuse" ) {
$sn_navmod = "multiuse";
function sn_check_if_child ( $l_idcat, $l_paridcat )
{
$bResult = false;
$l_int = $l_idcat;
while ( $l_int != 0 && $l_int != $l_paridcat )
{
$l_int = get_parentid_from_idcat ( $l_int );
if ( $l_int == $l_paridcat )
{
$bResult = true;
} // end if
} // end while
return $bResult;
} // check_if_child
function get_parentid_from_idcat ( $l_idcat )
{
$ldb = new DB_Contenido;
$lsql= "SELECT *
FROM ".$cfg["tab"]["cat"]." AS CAT,
".$cfg["tab"]["cat_lang"]." AS CATLANG
WHERE CAT.idcat = ".$l_idcat."
AND CAT.idcat = CATLANG.idcat
AND CATLANG.idlang = '$lang'
AND CATLANG.visible = '1'";
$ldb->query($lsql);
while ( $ldb->next_record() )
{
$l_parid = $ldb->f("parentid");
}
return $l_parid;
} // end function get_parentid_from_idcat
} // end MULTIUSE Funktions
?>
So, das wärs erstmal.
Im prinzip sind nur 2/3 kleine Schönheitsfehler beseitigt worden.
So, nun noch eine Ankündigung:
Ich werde dieses Modul in der Form nicht weiterentwickeln. Hier im Thread werd ich nur bei Fehler helfen bzw. ggf. Bugfixing zu dieser letzten Version bereitstellen, eine Neue Version wird es nicht mehr geben.
Keine Sorge, hört sich wohl schlimmer an als es ist. Ich habe mich dazu entschlossen, da ich .........
..... was mein Navigationsmodul anbelangt von grundauf neu beginne. Dieses Modul hier entstand im Prinzip ja nur mal so kurz zwischendurch, und war keine geplante Entwicklung, und das gefällt mir nciht so.
Mein neues Modul, sobald es in der ersten Version fertig ist, werde ich hier im Forum in einem eigenen Thread unter dem Namen
"SN_MultiNav" releasen.
Genauere Infos dann im dem Thread. Ich sag nur soviel ... auf Grund der geplanten Features wird ein Neuanfang leider nötig.
Aja .. ob ich davon aber einen 4.4.4 Port mache weiß ich noch nciht, geplant ist zunächst nur eine 4.5.x Version.
So, ich denke das reicht. Viel Spaß beim Einsatz der Navigation und happy bastling
Stefan