ich habe den Code von Contenido ein wenig verändert um Suchmaschinenfreundliche URL zu erzeugen.
Hier meine Änderungen:
Code: Alles auswählen
--- con_test/contenido/includes/functions.con.php 2006-07-24 01:15:00.000000000 +0200
+++ con_tbs/contenido/includes/functions.con.php 2007-02-15 17:57:59.000000000 +0100
@@ -13,6 +13,7 @@
* Modified : 23.07.2003
*
* © four for business AG
+* Modified : 02-15-2007, Juergen Nantke
******************************************/
/* Compatibility: Include new functions.con2.php */
@@ -1175,7 +1176,7 @@
*
* @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)
+function conCreateLocationString($idcat, $seperator, &$cat_str, $makeLink = false, $linkClass = "", $firstTreeElementToUse = 0, $uselang = 0, $final = true, $usecache = false,$url=array())
{
global $cfg, $client, $cfgClient, $lang, $sess, $_locationStringCache;
@@ -1218,7 +1219,9 @@
a.name AS name,
a.idcat AS idcat,
b.parentid AS parentid,
- c.level as level
+ c.level as level,
+ a.urlname
+
FROM
".$cfg["tab"]["cat_lang"]." AS a,
".$cfg["tab"]["cat"]." AS b,
@@ -1242,20 +1245,33 @@
//create link
if ($makeLink == true)
{
- $linkUrl = $sess->url("front_content.php?idcat=$idcat");
- $name = '<a href="'.$linkUrl.'" class="'.$linkClass.'">'.$name.'</a>';
+ if ($db->f("urlname")!=''){
+ $linkUrl = $sess->url($db->f("urlname")."/");
+ }else{
+ $linkUrl = $sess->url("front_content.php?idcat=$idcat");
+ }
+
}
- $tmp_cat_str = $name . $seperator . $cat_str;
- $cat_str = $tmp_cat_str;
+ $url[]=array('name'=>$name,'link'=>$linkUrl);
+
}
if ( $parentid != 0 ) {
- conCreateLocationString($parentid, $seperator, $cat_str, $makeLink, $linkClass, $firstTreeElementToUse ,$uselang, false);
+ conCreateLocationString($parentid, $seperator, $cat_str, $makeLink, $linkClass, $firstTreeElementToUse ,$uselang, false,$usecache,$url);
} else {
- $sep_length = strlen($seperator);
+
+ for ($n=count($url)-1;$n>=0;$n--){
+ if ($makeLink){
+ if ($n!=count($url)-1) $url[$n]['link']=$url[$n+1]['link'].$url[$n]['link'];
+ $url[$n]['name']= '<a href="'.$url[$n]['link'].'" class="'.$linkClass.'">'.$url[$n]['name'].'</a>';
+ }
+ $cat_str .= $url[$n]['name'].htmlentities($seperator);
+
+ }
+ $sep_length = strlen(htmlentities($seperator));
$str_length = strlen($cat_str);
$tmp_length = $str_length - $sep_length;
$cat_str = substr($cat_str, 0, $tmp_length);
Code: Alles auswählen
--- con_test/cms/includes/functions.navigation.php 2006-09-30 02:40:00.000000000 +0200
+++ con_tbs/cms/includes/functions.navigation.php 2007-02-15 17:00:29.000000000 +0100
@@ -1,4 +1,5 @@
<?php
+//Modified : 02-15-2007, Juergen Nantke (jn@efilio.de)
// create Navigation array for one level
function createNavigationArray($start_id, $db)
{
@@ -14,7 +15,8 @@
A.idcat,
C.name,
C.public,
- C.idcatlang
+ C.idcatlang,
+ C.urlname
FROM
".$cfg["tab"]["cat_tree"]." AS A,
".$cfg["tab"]["cat"]." AS B,
@@ -58,7 +60,9 @@
$navigation[$cat_id] = array("idcat" => $cat_id,
"name" => $db->f("name"),
"target" => '_self', # you can not call getTarget($cat_id, &$db) at this point with the same db instance!
- "public" => $db->f("public"));
+ "public" => $db->f("public"),
+ "urlname" => $db->f("urlname")
+ );
}
} // end while
Code: Alles auswählen
--- con_test/contenido/includes/include.upl_artlist.php 2005-11-01 18:55:00.000000000 +0100
+++ con_tbs/contenido/includes/include.upl_artlist.php 2007-02-20 14:06:23.000000000 +0100
@@ -86,6 +86,10 @@
$martlink = "";
$idart = $obj->get("idart");
+
+ conCreateLocationString($idcat, "/", &$martlink,false, "", 1, $lang);
+ $martlink="/".$martlink;
+ /*
$_cecIterator = $_cecRegistry->getIterator("Contenido.Content.CreateArticleLink");
if ($_cecIterator->count() > 0)
{
@@ -99,12 +103,14 @@
}
}
}
+
if ($martlink == "")
{
$martlink = "front_content.php?idart=$idart";
}
+ */
$jslink = 'parent.parent.frames[\'left\'].frames[\'left_top\'].document.getElementById(\'selectedfile\').value= \''.$martlink.'\'; window.returnValue=\''.$martlink.'\'; window.close();';
foreach ($fields as $field)
Code: Alles auswählen
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-l
RewriteRule .* front_content.php?path=%{REQUEST_URI}&%{QUERY_STRING} [L]
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<module><name>BottomNavigation</name>
<description>Zusatznavigation am Ende der Seite
Author: Andreas Lindner
Version: 1.0</description>
<type>Navigation</type>
<input/>
<output><?php
/***********************************************
* Bottom Navigation Output
*
* Author : Willi Man
* Copyright : four for business AG
* Version : 1.0
* Created : 17-03-2005
* Modified : 05-08-2005, Andreas Lindner
* Modified : 02-15-2007, Juergen Nantke (jn@efilio.de)
************************************************/
#System properties in use:
#Type: navigation, Name: idcat_bottomnavi
#Contains idcat of tree to be displayed in bottom navigation
#Includes
cInclude("frontend", "includes/functions.navigation.php");
cInclude('classes', 'class.template.php');
#Get settings
$cApiClient = new cApiClient($client);
$catStart = $cApiClient->getProperty('navigation', 'idcat_bottomnavi');
if (!is_object($oClient)) {
$oClient = new cApiClient($client);
}
#Get sub categories
$navigation = array ();
$navigation = createNavigationArray($catStart, $db);
#Output sub categories
$output = '';
if (count($navigation) > 0) {
foreach ($navigation as $key => $data) {
if ($data['urlname']!=''){
$output .= '<a href="'.$sess->url($data['urlname']).'" class="bottomnavi" title="'.$data['name'].'">'.$data['name'].'</a> | ';
}else{
$output .= '<a href="'.$sess->url("front_content.php?idcat=".$data['idcat']).'" class="bottomnavi" title="'.$data['name'].'">'.$data['name'].'</a> | ';
}
}
}
if (strlen($output) > 0) {
$output = substr($output, 0, strlen($output) - 3);
}
echo $output;
?>
</output>
</module>
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<module><name>Hauptnavigation</name>
<description>Hauptnavigation aufbauen
Author: Jan lengowski, Andreas Lindner
Version: 1.0</description>
<type>Navigation</type>
<input>?><?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
</input>
<output><?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 : 02-15-2007, Juergen Nantke (jn@efilio.de)
************************************************/
#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
*/
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,
C.urlname
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"),
"urlname" => $db->f("urlname")
);
}
}
}
}
return true;
}
$sql = "SELECT
A.idcat,
C.name,
C.public,
C.idcatlang,
C.urlname
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"),
"urlname" => $db->f("urlname"),
"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,
C.urlname
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"),
"urlname" => $db->f("urlname"),
"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', 'TARGET', $data['target']);
if ($data['urlname']!=''){
$tpl->set('d', 'HREF', $sess->url($data['urlname']));
$lvlone=$data['urlname'];
}else{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
$tpl->next();
if ($idcat == $data['idcat']) {
$tpl->generate('templates/navfirst_on.html');
}elseif(is_array($data['sub'])){
$tpl->generate('templates/navfirst_open.html');
} else {
$tpl->generate('templates/navfirst_off.html');
}
/* 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', 'TARGET', $data['target']);
if ($data['urlname']!=''){
$tpl->set('d', 'HREF', $sess->url($lvlone."/".$data['urlname']));
$lvltwo=$data['urlname'];
}else{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
$tpl->next();
if ($idcat == $data['idcat']) {
$tpl->generate('templates/navsecond_on.html');
}elseif(is_array($data['sub'])){
$tpl->generate('templates/navsecond_open.html');
} else {
$tpl->generate('templates/navsecond_off.html');
}
/* 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', 'TARGET', $data['target']);
if ($data['urlname']!=''){
$tpl->set('d', 'HREF', $sess->url($lvlone."/".$lvltwo."/".$data['urlname']));
$lvlthree=$data['urlname'];
}else{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
$tpl->next();
if ($idcat == $data['idcat']) {
$tpl->generate('templates/navthird_on.html');
}elseif(is_array($data['sub'])){
$tpl->generate('templates/navthird_open.html');
} else {
$tpl->generate('templates/navthird_off.html');
}
/* 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', 'TARGET', $data['target']);
if ($data['urlname']!=''){
$tpl->set('d', 'HREF', $sess->url($lvlone."/".$lvltwo."/".$lvlthree."/".$data['urlname']));
$lvlfour=$data['urlname'];
}else{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
$tpl->next();
if ($idcat == $data['idcat']) {
$tpl->generate('templates/navfourth_on.html');
}elseif(is_array($data['sub'])){
$tpl->generate('templates/navfourth_open.html');
} else {
$tpl->generate('templates/navfourth_off.html');
}
/* 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', 'TARGET', $data['target']);
if ($data['urlname']!=''){
$tpl->set('d', 'HREF', $sess->url($lvlone."/".$lvltwo."/".$lvlthree."/".$lvlfour."/".$data['urlname']));
}else{
$tpl->set('d', 'HREF', $sess->url('front_content.php?idcat='.$data['idcat']));
}
$tpl->next();
if ($idcat == $data['idcat']) {
$tpl->generate('templates/navfifth_on.html');
} else {
$tpl->generate('templates/navfifth_off.html');
}
} // 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 $html;
?></output>
</module>
Code: Alles auswählen
<?xml version="1.0" encoding="ISO-8859-1"?>
<module><name>Navigationspfad</name>
<description>Brotkrumen über dem Content
Autor:
Version</description>
<type>Navigation</type>
<input/>
<output><?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname : Navigationpath
* Author(s) : Andreas Lindner
* Copyright : Contenido - four for business, Andreas Lindner
* Created : 05-08-2005
* Modified : 02-15-2007, Juergen Nantke (jn@efilio.de)
************************************************/
#Settings
$separator = '>';
$max_length = 65;
#Get path to root
$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, "navipath", 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 "Sie sind hier: ".$retval;
echo mi18n("Sie sind hier: ").$retval;
?>
</output>
</module>
Ich freue mich auf euer Feedback.
Apropos, damit auch wirklich freundliche URL herauskommen muss für jede Kategorie ein eindeutiger Alias gesetzt sein.
Ich stelle die geänderten Dateiien gleich auch nochmal unter http://www.efilio.de/conpatch.zip zum Download bereit.