Meine Lösung
Modul:
Code: Alles auswählen
<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Navigationpath
* Author(s) : Andreas Lindner
* Copyright : Contenido - four for business, Andreas Lindner
* Created : 05-08-2005
************************************************/
#Settings
$separator = '>';
$max_length = 65;
#Get path to root
$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, 1);
if ($retval=='') {
$retval=' ';
} else {
$pattern = "'>.*?<'";
preg_match_all($pattern, $retval, $matches);
$matches = $matches[0];
#Get effective text length
$length = 0;
foreach ($matches as $value) {
$length += strlen($value) - 2;
}
#Get shorten factor
if ($length > $max_length * 4) {
$shorten = 5;
}
elseif ($length > $max_length * 3) {
$shorten = 4;
}
elseif ($length > $max_length * 2) {
$shorten = 3;
}
elseif ($length > $max_length) {
$shorten = 2;
} else {
$shorten = 1;
}
#Shorten items
if ($length > $max_length) {
foreach ($matches as $value) {
if (strpos($value, $separator) === FALSE) {
$text = substr($value, 1, strlen($value) - 2);
$len = strlen($text);
if (strpos($text, ' ') === FALSE) {
$text_new = $text;
} else {
$text_new = capiStrTrimAfterWord($text, intval($len / $shorten));
}
if (strlen($text) != strlen($text_new)) {
$text_new .= '...';
}
$text_new = '>'.$text_new.'<';
$retval = str_replace('>'.$text.'<', $text_new, $retval);
}
}
}
$retval = str_replace('"/index.html"', '"Home/index.html"', $retval);
}
echo '<ul><li>Sie sind hier: <a href="index.php">chatzifrantzis.com</a> > ', $retval, '</li></ul>';
?>
contenido/includes/functions.con.php
Code: Alles auswählen
/**
* Recursive function to create an location string
*
* @param int $idcat ID of the starting category
* @param string $seperator Seperation string
* @param string $cat_str Category location string (by reference)
* @param boolean $makeLink create location string with links
* @param string $linkClass stylesheet class for the links
* @param integer first navigation level location string should be printed out (first level = 0!!)
*
* @return string location string
*
* @author Jan Lengowski <jan.lengowski@4fb.de>
* @author Marco Jahn <marco.jahn@4fb.de>
*
* @copyright four for business AG <www.4fb.de>
*/
function conCreateLocationString($idcat, $seperator, &$cat_str, $makeLink = false,/* $linkClass = "",*/ $firstTreeElementToUse = 0, $uselang = 0, $final = true, $usecache = false)
{
global $cfg, $client, $cfgClient, $lang, $sess, $_locationStringCache;
if ($idcat == 0)
{
$cat_str = "Lost and Found";
return;
}
if ($uselang == 0)
{
$uselang = $lang;
}
if ($final == true && $usecache == true)
{
if (!is_array($_locationStringCache))
{
if (file_exists($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt"))
{
$_locationStringCache = unserialize(file_get_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt"));
} else {
$_locationStringCache = array();
}
}
if (array_key_exists($idcat, $_locationStringCache))
{
if ($_locationStringCache[$idcat]["expires"] > time())
{
$cat_str = $_locationStringCache[$idcat]["name"];
return;
}
}
}
$db = new DB_Contenido;
$sql = "SELECT
a.name AS name,
a.idcat AS idcat,
b.parentid AS parentid,
c.level as level
FROM
".$cfg["tab"]["cat_lang"]." AS a,
".$cfg["tab"]["cat"]." AS b,
".$cfg["tab"]["cat_tree"]." AS c
WHERE
a.idlang = '".$uselang."' AND
b.idclient = '".$client."' AND
b.idcat = '".$idcat."' AND
a.idcat = b.idcat AND
c.idcat = b.idcat";
$db->query($sql);
$db->next_record();
if ($db->f("level") >= $firstTreeElementToUse)
{
$name = $db->f("name");
$parentid = $db->f("parentid");
//create link
if ($makeLink == true)
{
$linkUrl = $sess->url("front_content.php?idcat=$idcat");
$name = '<a href="'.$linkUrl.'" class="'.$linkClass.'">'.$name.'</a>';
}
$tmp_cat_str = $name . $seperator . $cat_str;
$cat_str = $tmp_cat_str;
}
if ( $parentid != 0 ) {
conCreateLocationString($parentid, $seperator, $cat_str, $makeLink, $linkClass, $firstTreeElementToUse ,$uselang, false);
} else {
$sep_length = strlen($seperator);
$str_length = strlen($cat_str);
$tmp_length = $str_length - $sep_length;
$cat_str = substr($cat_str, 0, $tmp_length);
}
if ($final == true && $usecache == true)
{
$_locationStringCache[$idcat]["name"] = $cat_str;
$_locationStringCache[$idcat]["expires"] = time() + 3600;
if (is_writable($cfgClient[$client]["path"]["frontend"]."cache/"))
{
file_put_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt", serialize($_locationStringCache));
}
}
}
gegen
Code: Alles auswählen
/**
* Recursive function to create an location string
*
* @param int $idcat ID of the starting category
* @param string $seperator Seperation string
* @param string $cat_str Category location string (by reference)
* @param boolean $makeLink create location string with links
* @param string $linkClass stylesheet class for the links
* @param integer first navigation level location string should be printed out (first level = 0!!)
*
* @return string location string
*
* @author Jan Lengowski <jan.lengowski@4fb.de>
* @author Marco Jahn <marco.jahn@4fb.de>
*
* @copyright four for business AG <www.4fb.de>
*/
function conCreateLocationString($idcat, $seperator, &$cat_str, $makeLink = false, $firstTreeElementToUse = 0, $uselang = 0, $final = true, $usecache = false)
{
global $cfg, $client, $cfgClient, $lang, $sess, $_locationStringCache;
if ($idcat == 0)
{
$cat_str = "Lost and Found";
return;
}
if ($uselang == 0)
{
$uselang = $lang;
}
if ($final == true && $usecache == true)
{
if (!is_array($_locationStringCache))
{
if (file_exists($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt"))
{
$_locationStringCache = unserialize(file_get_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt"));
} else {
$_locationStringCache = array();
}
}
if (array_key_exists($idcat, $_locationStringCache))
{
if ($_locationStringCache[$idcat]["expires"] > time())
{
$cat_str = $_locationStringCache[$idcat]["name"];
return;
}
}
}
$db = new DB_Contenido;
$sql = "SELECT
a.name AS name,
a.idcat AS idcat,
b.parentid AS parentid,
c.level as level
FROM
".$cfg["tab"]["cat_lang"]." AS a,
".$cfg["tab"]["cat"]." AS b,
".$cfg["tab"]["cat_tree"]." AS c
WHERE
a.idlang = '".$uselang."' AND
b.idclient = '".$client."' AND
b.idcat = '".$idcat."' AND
a.idcat = b.idcat AND
c.idcat = b.idcat";
$db->query($sql);
$db->next_record();
if ($db->f("level") >= $firstTreeElementToUse)
{
$name = $db->f("name");
$parentid = $db->f("parentid");
//create link
if ($makeLink == true)
{
$linkUrl = $sess->url("front_content.php?idcat=$idcat");
$name = '<a href="'.$linkUrl.'">'.$name.'</a>';
}
$tmp_cat_str = $name . $seperator . $cat_str;
$cat_str = $tmp_cat_str;
}
if ( $parentid != 0 ) {
conCreateLocationString($parentid, $seperator, $cat_str, $makeLink, $firstTreeElementToUse ,$uselang, false);
} else {
$sep_length = strlen($seperator);
$str_length = strlen($cat_str);
$tmp_length = $str_length - $sep_length;
$cat_str = substr($cat_str, 0, $tmp_length);
}
if ($final == true && $usecache == true)
{
$_locationStringCache[$idcat]["name"] = $cat_str;
$_locationStringCache[$idcat]["expires"] = time() + 3600;
if (is_writable($cfgClient[$client]["path"]["frontend"]."cache/"))
{
file_put_contents($cfgClient[$client]["path"]["frontend"]."cache/locationstring-cache-$uselang.txt", serialize($_locationStringCache));
}
}
}
tauschen, dann klappt's auch mit dem Nachbarn... Danke Dodger77
Ειμαστε στη μεση απο κατι...