[gelöst] Frage zu Modul "Navigationpath"

Gesperrt
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

[gelöst] Frage zu Modul "Navigationpath"

Beitrag von Contenider »

Bei dem Versuch, die automatisch in der Ausgabe des Links erzeugte HTML Klassenzuweisung "class="navipath"" zu entfernen, stoße ich langsam aber sicher auf das Ende meines Lateins.

Bei "Get Path to root" wird durch $dummy eine Vorlage für die Erstellung des Links gezogen, in der dann die Werte eingesetzt werden, soviel habe ich verstanden, wo jedoch befindet sich die Variable an sich? Ich habe schon verschiedene Dateien unter "contenido/includes" durchsucht, finde aber nichts entsprechendes.

Kann mir jemand Rat geben?

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, "navipath", 1);

if ($retval=='') {
	$retval='&nbsp;';	
} 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 $retval;
?>
Zuletzt geändert von Contenider am Mi 15. Nov 2006, 20:23, insgesamt 1-mal geändert.
Ειμαστε στη μεση απο κατι...
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 »

Schau dir die Funktion "conCreateLocationString" in der Datei "contenido/includes/functions.con.php" mal genau an.

Dann sollte sich

Code: Alles auswählen

$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, "navipath", 1);
ersetzen lassen durch

Code: Alles auswählen

$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, "", 1);
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

Danke für den Hinweis, es besteht natürlich auch die Möglichkeit in dem Modul einfach das "navipath" herauszunehmen. Damit "class="navipath"" aber gar nicht mehr erzeugt wird, habe ich folgendes gemacht:

Variable "$linkClass" entfernt.

So wie es aussieht, gibt es keine Fehler.

Originalcode aus "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)
Modifizierter Code aus "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, $firstTreeElementToUse = 0, $uselang = 0, $final = true, $usecache = false)
Ειμαστε στη μεση απο κατι...
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

Ich stelle aber gerade fest, dass wenn ich anschließend im Modul

Code: Alles auswählen

#Get path to root
$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, "navipath", 1);
gegen

Code: Alles auswählen

#Get path to root
$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, 1);
austausche, dann gibt er gleich die ganze Kategorie aus... ... etwas blöd, ich schraub wohl noch einmal daran...
Ειμαστε στη μεση απο κατι...
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

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='&nbsp;';	
} 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
Zuletzt geändert von Contenider am Mi 15. Nov 2006, 10:08, insgesamt 1-mal geändert.
Ειμαστε στη μεση απο κατι...
Dodger77
Beiträge: 3626
Registriert: Di 12. Okt 2004, 20:00
Wohnort: Voerde (Niederrhein)
Kontaktdaten:

Beitrag von Dodger77 »

Nur als Hinweis: ich würde den Code in der "functions.con.php" lieber nicht ändern, da man sowas beim nächsten Update in einem halben Jahr wieder vergessen hat. Du kannst die abgewandelte Funktion ja auch unter einem eigenen Namen in dein Modul packen.
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

Ja, das ist richtig, danke für den Hinweis!

Ich bin nicht besonders gut im Umgang mit PHP da ich mich noch nicht sehr lange damit beschäftige. Ich werde versuchen, das Modul entsprechend umzubauen, wenn man das so nennen darf.

Code poste ich dann hier:
Ειμαστε στη μεση απο κατι...
Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider »

Ich hab' da Mal ne doofe Frage...

Wenn ich die Funktion "conCreateLocationString" nehme, in das Modul einbaue und umbenenne, siehe code, dann sollte es doch funktionieren?

Jedoch finde ich es fast unsinnig die Funktion zweimal im System zu haben, macht es nicht doch mehr Sinn es direkt in der "functions.con.php" abzuändern? Zumal die Zuweisung der CSS Klasse absolut unnötig ist, wenn man (wie ich) alle Verknüpfungen mit Listen erstellt und darüber mit CSS formatiert.

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
* Modified	:	Um "conModifiedLocationString" erweitert, aus der "functions.con.php", und abgeändert, sodass die erste Ebene der einer Kategorie nicht ausgegeben werden.
************************************************/

#Settings
$separator = '>';
$max_length = 65;

function conModifiedLocationString($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 ) {
        conModifiedLocationString($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));
         }
    }
}

#Get path to root
$dummy = conModifiedLocationString($idcat, ' '.$separator.' ', $retval, true, 1);

if ($retval=='') {
	$retval='&nbsp;';	
} 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">url.tld</a> > ', $retval, '</li></ul>';

?>
EDIT: Funtkionieren tut's, jedoch glaube ich, dass man das Ganze auch irgendwie verkürzen kann. Kann jemand einen Hinweis geben?
Ειμαστε στη μεση απο κατι...
Gesperrt