Ich habe gerade die geteilte Hauptnavigation 4.6.2 BETA von OSI, siehe http://contenido.org/forum/viewtopic.ph ... navigation an die aktuelle Version der Hauptnavigation aus der 4.6.23 angepasst.
Das Modul habe ich eben getestet, bei mir läuft es.
Wenn OSI nicht herumschimpft, dann werde ich mein bestes geben und zu diesem Modul soweit ich kann Support leisten.
Vorteile:
- Schnelle Umsetzung
- Funktioniert mit ModRewrite
- Leichte Anpassungsmöglichkeit mit CSS
- Verwendung der bestehenden Templates
Features:
- 1. Ebene immer normal anzeigen
- 2. - 5. Ebene an anderer Stelle in anderen Container
Wichtig:
Es muss auch in dieser Version der Aufruf der Module beachtet werden; Wenn Modul "B" vor Modul "A" aufgerufen wird, gibt's Fehlermeldungen...
Diese Navigation besteht aus zwei Modulen:
Module:
Hauptnavigation Cat 1
INPUT
Code: Alles auswählen
?><?php
/***********************************************
* CONTENIDO MODUL - INPUT
*
* Modulname : Hauptnavigation
* Author(s) : Jan Lengowski, Andreas Lindner, 4fb
* Copyright : Contenido - four for business, Andreas Lindner
* Created : 12.08.2005
************************************************/
#Select tree
?>
<table cellspacing="0" cellpadding="0" cellpadding="4">
<tr>
<td class="text"><?php echo mi18n("Baum wählen"); ?>:</td>
<td>
<select name="CMS_VAR[0]">
<option value="0">-- <?php echo mi18n("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
Code: Alles auswählen
<?php
/************************************************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Hauptnavigation
* Author(s) : Jan Lengowski, Andreas Lindner, 4fb
* Copyright : Contenido - four for business, Andreas Lindner
* Created : 12.08.2005
* Modified : 12.11.2007 - Maron Chatzifrantzis, angepasst auf
* Basis von OSI's "geteilte Navigation 4.6.2 BETA"
************************************************************************/
#System properties in use:
#Type: navigation, Name: idcat_homepage
#Contains idcat of tree to be displayed in main navigation
#Includes
cInclude("frontend", "includes/functions.navigation.php");
#If no tree is selected, use client setting
$start_cat = "CMS_VALUE[0]";
if ($start_cat=='') {
$cApiClient = new cApiClient($client);
$start_cat = $cApiClient->getProperty('navigation','idcat_homepage');
}
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
*/
if (!function_exists("catIsChildOf")) {
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, $start_cat) ) {
$sel_idcat = $idcat;
} else {
$sel_idcat = $start_cat;
}
/* 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, $start_cat;
$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 != $start_cat ){
$navitems = array();
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang
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 = '".$start_cat."'
ORDER
BY A.idtree";
$db->query($sql);
while ($db->next_record()) {
/* Check for external redirects... */
$sql = "SELECT
a.external_redirect AS ext,
a.idartlang AS idartlang
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
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
$flag = false;
while ($db2->next_record()&&!$flag) {
if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
{
$flag = true;
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"target" => $target,
"public" => $db->f("public"),
"idcatlang" => $db->f("idcatlang"));
}
}
}
}
return true;
}
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang
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,
a.idartlang AS idartlang
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
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
$flag = false;
while ($db2->next_record() && !$flag) {
if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
{
$flag = true;
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$tmp_nav[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"public" => $db->f("public"),
"idcatlang" => $db->f("idcatlang"),
"target" => $target);
}
}
}
$tmp_nav[$idcat]["sub"] = $navitems;
$navitems = $tmp_nav;
/* Function call */
nav($parentid);
} // end function
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang
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,
a.idartlang AS idartlang
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
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
#$db2->next_record();
$flag = false;
while ($db2->next_record()&&!$flag) {
if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
{
$flag = true;
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"public" => $db->f("public"),
"idcatlang" => $db->f("idcatlang"),
"target" => $target);
}
}
}
/* Create Navigation Array */
if (($sel_idcat == '') || ($sel_idcat == '0')) {
$cApiClient = new cApiClient($client);
$sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage');
}
nav($sel_idcat);
/* Start Output buffer */
ob_start();
foreach( $navitems as $key => $data ) {
/* 1. Navigation level */
if( checkCatPermission($data['idcatlang'],$data['public']) ) {
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'UL_STAGE', '2');
$tpl->set('d', 'LI_STAGE', '1');
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if( $idcat == $data['idcat'] && empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on.html', 0, 0);
} elseif( $idcat == $data['idcat'] && !empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on_open.html', 0, 0);
} elseif( $idcat != $data['idcat'] && !empty($data['sub']) && catIsChildOf($sel_idcat, $data['idcat']) ) {
$tpl->generate('templates/mnavi_off_open.html', 0, 0);
} else {
$tpl->generate('templates/mnavi_off.html', 0, 0);
$second_subdata = $data['sub'];
}
} // end if
} // end foreach
/* Read out buffer */
$html = ob_get_contents();
/* Clean buffer */
ob_end_clean();
/* Output buffer-contents */
echo " <div id=\"mnavi\">
<ul class=\"e1\">
".$html."
</ul>
</div>\n";
?>
INPUT
Code: Alles auswählen
Steht nix drinnen... ;)
Code: Alles auswählen
<?php
/* 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;
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang
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,
a.idartlang AS idartlang
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
c.idclient = '".$client."' AND
c.idcat = b.idcat AND
a.idart = b.idart AND
a.idlang = '".$lang."'";
$db2->query($sql);
#$db2->next_record();
$flag = false;
while ($db2->next_record()&&!$flag) {
if (isStartArticle($db2->f("idartlang"), $db->f("idcat"), $lang))
{
$flag = true;
$target = ( $db2->f("ext") == 0 ) ? '_self' : '_blank';
$navitems[$db->f("idcat")] = array("idcat" => $db->f("idcat"),
"name" => $db->f("name"),
"public" => $db->f("public"),
"idcatlang" => $db->f("idcatlang"),
"target" => $target);
}
}
}
/* Create Navigation Array */
if(($sel_idcat=='')||($sel_idcat=='0')){
$cApiClient = new cApiClient($client);
$sel_idcat = $cApiClient->getProperty('navigation', 'idcat_homepage');
}
nav($sel_idcat);
/* Start Output buffer */
ob_start();
foreach ($navitems as $key => $data) {
if (checkCatPermission($data['idcatlang'],$data['public'])) {
/* 2. Navigation level */
if( is_array($data['sub']) ) {
foreach( $data['sub'] as $key => $data ) {
if( checkCatPermission($data['idcatlang'],$data['public']) ) {
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'UL_STAGE', '3');
$tpl->set('d', 'LI_STAGE', '2');
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if( $idcat == $data['idcat'] && empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on.html', 0, 0); # AKTIVER PUNKT HAT KEINE SUBCATS
} elseif( $idcat == $data['idcat'] && !empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on_open.html', 0, 0); # AKTIVER PUNKT HAT SUBCATS
} elseif( $idcat != $data['idcat'] && is_array($data['sub']) && catIsChildOf($sel_idcat, $data['idcat']) ) {
$tpl->generate('templates/mnavi_off_open.html', 0, 0); # PASSIVER PUNKT HAT SUBCATS
} else {
$tpl->generate('templates/mnavi_off.html', 0, 0); # PASSIVER PUNKT HAT KEINE SUBCATS
}
if( is_array( $second_subdata ) ) {
$last_cat = end( $second_subdata );
if( $data['idcat'] == $last_cat['idcat'] ) {
$tpl->generate('templates/mnavi_end.html', 0, 0);
} // end if
} // end if
$third_subdata = $data['sub'];
/* 3. Navigation level */
if( is_array($data['sub']) ) {
foreach( $data['sub'] as $key => $data ) {
if( checkCatPermission($data['idcatlang'],$data['public']) ) {
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'UL_STAGE', '4');
$tpl->set('d', 'LI_STAGE', '3');
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if( $idcat == $data['idcat'] && empty($data['sub'])) {
$tpl->generate('templates/mnavi_on.html', 0, 0);
} elseif( $idcat == $data['idcat'] && !empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on_open.html', 0, 0);
} elseif( $idcat != $data['idcat'] && is_array($data['sub']) && catIsChildOf($sel_idcat, $data['idcat']) ) {
$tpl->generate('templates/mnavi_off_open.html', 0, 0);
} else {
$tpl->generate('templates/mnavi_off.html', 0, 0);
}
if( is_array($third_subdata) ) {
$last_cat = end( $third_subdata );
if( $data['idcat'] == $last_cat['idcat'] ) {
$tpl->generate('templates/mnavi_end.html', 0, 0);
} // end if
} // end if
$forth_subdata = $data['sub'];
/* 4. Navigation level */
if( is_array($data['sub']) ) {
foreach( $data['sub'] as $key => $data) {
if( checkCatPermission($data['idcatlang'],$data['public']) ) {
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'UL_STAGE', '5');
$tpl->set('d', 'LI_STAGE', '4');
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if( $idcat == $data['idcat'] && empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on.html', 0, 0);
} elseif( $idcat == $data['idcat'] && !empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on_open.html', 0, 0);
} elseif( $idcat != $data['idcat'] && is_array($data['sub']) && catIsChildOf($sel_idcat, $data['idcat']) ) {
$tpl->generate('templates/mnavi_off_open.html', 0, 0);
} else {
$tpl->generate('templates/mnavi_off.html', 0, 0);
}
if( is_array($forth_subdata) ) {
$last_cat = end( $forth_subdata );
if( $data['idcat'] == $last_cat['idcat'] ) {
$tpl->generate('templates/mnavi_end.html', 0, 0);
} // end if
} // end if
$fith_subdata = $data['sub'];
/* 5. Navigation level */
if( is_array($data['sub']) ) {
foreach( $data['sub'] as $key => $data ) {
if( checkCatPermission($data['idcatlang'],$data['public']) ) {
$tpl->reset();
$tpl->set('d', 'NAME', $data['name']);
$tpl->set('d', 'UL_STAGE', '6');
$tpl->set('d', 'LI_STAGE', '5');
$tpl->set('d', 'TARGET', $data['target']);
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
$tpl->next();
if( $idcat == $data['idcat'] && empty($data['sub']) ) {
$tpl->generate('templates/mnavi_on.html', 0, 0);
} else {
$tpl->generate('templates/mnavi_off.html', 0, 0);
}
if( is_array($fith_subdata) ) {
$last_cat = end($fith_subdata);
if( $data['idcat'] == $last_cat['idcat'] ) {
$tpl->generate('templates/mnavi_end.html', 0, 0);
} // end if
} // end if
} // end if
} // end foreach
} // end if
} // end if
} // end foreach
} // end if
} // end if
} // end foreach
} // end if
} // end if
} // end foreach
} // end if
} // end if
} // end foreach
/* Read out buffer */
$html = ob_get_contents();
/* Clean buffer */
ob_end_clean();
/* Output buffer-contents */
echo " <div id=\"mnavi\">
<ul class=\"e1\">
".$html."
</ul>
</div>\n";
?>