Seite 1 von 1

Hauptnavigation: CSS-Problem Farben

Verfasst: Do 3. Mär 2005, 12:18
von Cyclist
Ich nutze die zweigeteilte Navigation und habe jeder Kategorie ein eigenes Farbschema zugewiesen. Das funktioniert auch ohne Probleme.

Mein problem ist nun, dass dieses Farbschema erst nach Aufruf einer Katgeorie sichtbar ist.

Ich hätte es aber gerne, dass beireits in der Menüleiste der Hauptnavigation die Farbzuordnungen angezeigt werden. D.h. ich müsste jedem Hauptmenüpunkt eine ander Klasse oder ID zuweisen und dann mittels css die Formatierungen vornehmen.

Über das Navigationstemplate geht das nicht. Da bekommen alle Hauptmenuüunkte ein identisches Design.


Hier der Code der Hauptnavigation:

Code: Alles auswählen

/****************************************************************** 
* 
* CONTENIDO MODUL 
* 
* Hauptnavigation - als unabhängiges Modul zur Unternavigation 
* 
* Zwei Module werden benötigt und hier beschrieben 
* 
* Mit Hilfe dieser zwei Module kann man zum Beispiel 
* eine Horizontale Hauptnavigation in einem Container 
* und eine vertikale Unternavigation in einem anderen Container 
* oder umgekehrt realisieren (oben Haupt- und links oder rechts Unternavigation. 
* 
* Um die Haupnnavigation oder Unternavigation horizontal einzustellen 
* kopiert die nav["" | "second" | "third"]_["off" | [on].html 
* nach nav["" | "second" | "third"]_h_["off" | [on].html 
* (z.B. cp navsecond_off.html navsecond_h_off.html 
* - liegen im Pfad .../contenido/cms/templates/) und 
* schmeisst dort die Tabellen-Tags raus (die stehen jetzt schon im Modul) 
* 
* Orginal 
* Modulname : Navigation 1.1 
* Author : Jan Lengowski 
* Copyright : Contenido - four for business 
* Created : 15-05-2003 
* Modified :26-05-2003 
* Modified : by herby 
* Modified : by yodatortenboxer 
* 
******************************************************************* 

/****************************************************************** 
*Hauptnavigation Eingabe: 
******************************************************************/ 

/** 
 * Navigation 
 * 
 * INPUT 
 * 
 * @autor Jan Lengowski <Jan.Lengowski@4fb.de> 
 * @copyright four for business AG 2003 
 */ 

?> 
<table cellspacing="0" cellpadding="0" cellpadding="4"> 

    <tr> 
        <td class="text">Baum wählen:</td> 
        <td> 
            <select name="CMS_VAR[0]"> 
            <option value="0">-- kein --</option> 
            <?php 

                $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 
                            C.idlang    = '".$lang."' AND 
                            B.idclient  = '".$client."' AND 
                            C.visible   = 1 AND 
                            A.level     = '0' 
                        ORDER BY 
                            A.idtree"; 

                $db->query($sql); 

                while ( $db->next_record() ) { 

                    if ( "CMS_VALUE[0]" == $db->f("idcat") ) { 
                        echo '<option selected="selected" value="'.$db->f("idcat").'">'.$db->f("name").'</option>'; 

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

                    } 
                } 

            ?> 
            </select> 
        </td> 
    </tr> 

</table> 

<?php 

/****************************************************************** 
*Hauptnavigation Ausgabe: 
******************************************************************/ 

<?php 
// Hauptnav 
/*********************************************** 
* CONTENIDO MODUL - OUTPUT 
* 
* Modulname : Navigation 1.1 
* Author : Jan Lengowski 
* Copyright : Contenido - four for business 
* Created : 15-05-2003 
* Modified : 26-05-2003 
************************************************/ 

if ( !is_object($db2) ) { 
$db2 = new DB_Contenido; 
} 

/** 
* 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]; 
} 

/* Include Template Class */ 
include_once($cfg["path"]["contenido"] . 'classes/class.template.php'); 

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


/* Template Instance */ 
$tpl = new Template; 

/** 
* Recursive function for creating 
* the navigation array 
* @param Int $idcat Category id 
*/ 
function nav($idcat) { 

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

$db = new DB_Contenido; 
$db2 = new DB_Contenido; 

$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()) { 

/* Check for external redirects... */ 
$sql = "SELECT 
a.external_redirect AS ext 
FROM 
".$cfg["tab"]["art_lang"]." AS a, 
".$cfg["tab"]["cat_art"]." AS b, 
".$cfg["tab"]["cat"]." AS c 
WHERE 
b.idcat = '".$db->f("idcat")."' AND 
b.is_start = '1' AND 
c.idclient = '".$client."' AND 
c.idcat = b.idcat AND 
a.idart = b.idart AND 
a.idlang = '".$lang."'"; 

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

$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 

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

} 

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()) { 

/* Check for external redirects... */ 
$sql = "SELECT 
a.external_redirect AS ext 
FROM 
".$cfg["tab"]["art_lang"]." AS a, 
".$cfg["tab"]["cat_art"]." AS b, 
".$cfg["tab"]["cat"]." AS c 
WHERE 
b.idcat = '".$db->f("idcat")."' AND 
b.is_start = '1' AND 
c.idclient = '".$client."' AND 
c.idcat = b.idcat AND 
a.idart = b.idart AND 
a.idlang = '".$lang."'"; 

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

$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 

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

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

/* Function call */ 
nav($parentid); 

} // end function 

$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() ) { 

/* Check for external redirects... */ 
$sql = "SELECT 
a.external_redirect AS ext 
FROM 
".$cfg["tab"]["art_lang"]." AS a, 
".$cfg["tab"]["cat_art"]." AS b, 
".$cfg["tab"]["cat"]." AS c 
WHERE 
b.idcat = '".$db->f("idcat")."' AND 
b.is_start = '1' AND 
c.idclient = '".$client."' AND 
c.idcat = b.idcat AND 
a.idart = b.idart AND 
a.idlang = '".$lang."'"; 

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

$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank'; 

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

/* Create Navigation Array */ 
nav($sel_idcat); 

/* Start Output buffer */ 
ob_start(); 

echo '<table cellspacing="0" cellpadding="0" border="0"><tr><td>'; 

foreach ($navitems as $key => $data) { 
/* 1. Navigations Ebene */ 
$tpl->reset(); 
$tpl->set('d', 'NAME', $data['name']); 
$tpl->set('d', 'TARGET', $data['target']); 
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat'])); 
$tpl->next(); 

if ($idcat == $data['idcat'] || is_array($data['sub'])) { 
$tpl->generate('templates/navfirst_h_on.html'); 
} else { 
$tpl->generate('templates/navfirst_h_off.html'); 
} 
if (is_array($data['sub'])) { 
$tmp_data = array(); 
$tmp_data = $data; 
} // end if 
} // end foreach 
echo '</td></tr></table>'; 

/* Read out buffer */ 
$html = ob_get_contents(); 

/* Clean buffer */ 
ob_end_clean(); 

/* Output buffer-contents */ 
echo $html; 

?> 
Theoretisch müsste ich wahrscheinlich dem Menülink eine Klasse zuweisen, deren Name sich aus einem festen bestandteil (z.B.mainnav) und der idcat der Kategorie zusammensetzt. Daraus würde dann z.B. mainav1, mainav2 etc. Aber wie geht das? Kann mir da vielleicht jemand weiterhelfen?

Als PHP-Laie würde ich vermuten, dass eine Änderung in dem Bereich

Code: Alles auswählen

echo '<table cellspacing="0" cellpadding="0" border="0"><tr><td>'; 

foreach ($navitems as $key => $data) { 
/* 1. Navigations Ebene */ 
$tpl->reset(); 
$tpl->set('d', 'NAME', $data['name']); 
$tpl->set('d', 'TARGET', $data['target']); 
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat'])); 
$tpl->next(); 

if ($idcat == $data['idcat'] || is_array($data['sub'])) { 
$tpl->generate('templates/navfirst_h_on.html'); 
} else { 
$tpl->generate('templates/navfirst_h_off.html'); 
} 
if (is_array($data['sub'])) { 
$tmp_data = array(); 
$tmp_data = $data; 
} // end if 
} // end foreach 
echo '</td></tr></table>'; 
erforderlich ist.

Weiss jemand was man genau ändern muss? Das wäre super.

Verfasst: Do 3. Mär 2005, 15:27
von emergence
ne eigene klasse setzen ist ne möglichkeit...
zb
$tpl->set('d', 'CLASS', "mainclass");

im template wird dann wenn ein {CLASS} gefunden wird -> durch mainclass ersetzt...

hättest du also etwas wie

Code: Alles auswählen

<div class="{CLASS}">was auch immer</div>
im template definiert...
bekämst du als ausgabe

Code: Alles auswählen

<div class="mainclass">was auch immer</div>
weitere details zur template klasse -> http://www.contenido.org/forum/viewtopi ... 7051#17051

Verfasst: Do 3. Mär 2005, 20:01
von Cyclist
Danke, emergence, das war der entscheidende Hinweis, aber ne kleine Ergänzung war noch nötig.

So wie von dir gepostet, bekommt jeder Menüpunkt der Hauptnavigation die identische Klasse zugewiesen bekommen, ich wollte aber dass jeder Menüpunkt eine andere Klasse bekommt, damit ich die Farben individuell anpassen kann.

Was ich jetzt gemacht habe ist folgendes:

Klasse setzen mittels
$tpl->set('d', 'CLASS', "mainclass".$data['idcat']);

und dann wie von dir vorgeschlagen, die Klasse ins Template eingefügt.

Dadurch wird der Klassenname durch die idcat ergänzt und somit kann jeder Link individuell per CSS angepasst werden.
ich habe also für
idcat 23 die Klasse mainclass23
idcat 24 die Klasse mainclass24
idcat 25 die Klasse mainclass25
usw.

Da ich aber keine PHP-Leute bin (ich kann zwar den Code einigermaßen nachvollziehen, aber nicht selbst schreiben), würde ich gerne wissen, ob das so in Ordnung ist oder ob diese Klassenzuweisung Probleme verursachen kann und ob es eine bessere Alternative gibt.

Verfasst: Fr 4. Mär 2005, 10:50
von emergence
Cyclist hat geschrieben:Da ich aber keine PHP-Leute bin (ich kann zwar den Code einigermaßen nachvollziehen, aber nicht selbst schreiben), würde ich gerne wissen, ob das so in Ordnung ist oder ob diese Klassenzuweisung Probleme verursachen kann und ob es eine bessere Alternative gibt.
probleme wirds keine verursachen...
es gibt natürlich bessere möglichkeiten, aber dafür müsstest du php beherrschen... ich würd den kategorien eigenschaften zuweisen -> http://contenido.org/forum/viewtopic.php?t=5252 (geht aber erst ab con4.5.x)

Verfasst: Fr 4. Mär 2005, 11:05
von Cyclist
Das sind ja schon mal gute Aussichten, aber mit meinen quasi nicht vorhandenen PHP-Kenntissen werde ich sicher nicht auf die 4.5 Alpha-Version umsteigen, sondern warten bis die dann irgendwann mal Stable ist. Aber zumindest kann man das dann ja verwenden. Bis dahin werde ich mir mit der catid behelfen.