Seite 1 von 1

Standard-Templateübernahme in Kategorien defekt?

Verfasst: Mi 7. Mär 2007, 11:10
von Marvel
Hallo liebe Community,
ich möchte hier gerne ein Problem schildern das uns und unseren Kunden viele Nerven kostet:

Es handelt sich um ein Web auf dem durch den Kunden täglich neue Kategorien und Artikel eingepflegt werden. Leider ist es aber so, das bei jeder neu angelegten Kategorie (und damit auch bei jedem angelegten Artikel der Kategorie) die Navigation fehlt (dort steht dann an stelle der Navigation nur ein Link namens "Hauptnavigation"). Erst wenn die Kategorieeigenschaften editiert und dann neu abgespeichert werden, erscheint die Hauptnavigation wie sie soll.

Die Frage ist nun, warum es zu diesem Problem kommt. In der Vorkonfiguration des Templates ist die Navigation natürlich korrekt eingetragen... aber sie scheint irgendwie nicht richtig übernommen zu werden. Das führt dann dazu das der Kunde bei JEDER neuen Kategorie immer die Kategorieeigenschaften editieren muss, was natürlich zum einen nervt und zum anderen - zum Ärger der Besucher der Webseite - auch teilweise vergessen wird.

Ich wäre für schnelle Hilfestellungen mehr als dankbar.

Verfasst: Mi 7. Mär 2007, 11:30
von Dodger77
Wenn es sich um die Hauptnavigation des Beispielmandanten (zumindest in der aktuellen 4.6.15) handelt, lässt sich die idcat mittlerweile auch per Mandanteneinstellung (navigation/idcat_homepage/DEINE_IDCAT) einstellen und muss dann nicht mehr jeweils über die Konfiguration gemacht werden.

Ansonsten ist es halt so, dass die Einstellungen aus der Vorkonfiguration erst durch die Zuordnung eines Templates auf die Kategorie bzw. den Artikel übertragen werden.

Verfasst: Mi 7. Mär 2007, 12:03
von Marvel
Du sprichst von "DEINE_IDCAT" - aktuell ist an der Stelle eine "1" eingetragen... welchen Wert müsste ich dort denn hinterlegen bzw. wie finde ich heraus welcher Wert es sein muss?
"Ansonsten ist es halt so, dass die Einstellungen aus der Vorkonfiguration erst durch die Zuordnung eines Templates auf die Kategorie bzw. den Artikel übertragen werden."


Kann ich das irgendwie ändern/fixen/umprogrammieren?

Verfasst: Mi 7. Mär 2007, 12:15
von Dodger77
Marvel hat geschrieben:Du sprichst von "DEINE_IDCAT" - aktuell ist an der Stelle eine "1" eingetragen... welchen Wert müsste ich dort denn hinterlegen bzw. wie finde ich heraus welcher Wert es sein muss?
Die "idcat" deiner Hauptkategorie.
Marvel hat geschrieben:
"Ansonsten ist es halt so, dass die Einstellungen aus der Vorkonfiguration erst durch die Zuordnung eines Templates auf die Kategorie bzw. den Artikel übertragen werden."


Kann ich das irgendwie ändern/fixen/umprogrammieren?
Warum? Das Verhalten ist doch richtig so. Wenn man eine neue Kategorie anlegt, muss man dieser ein Template zuweisen. Dabei erhält diese die Werte aus der Vorkonfiguration.

Verfasst: Mi 7. Mär 2007, 12:21
von Marvel
Die "idcat" deiner Hauptkategorie.
Das Web hat aber doch verschiedene Hauptkategorien. Also beispielsweise "Unternehmen", "Produkte", etc. ^^
Warum? Das Verhalten ist doch richtig so. Wenn man eine neue Kategorie anlegt, muss man dieser ein Template zuweisen. Dabei erhält diese die Werte aus der Vorkonfiguration.
Inwiefern ist das Verhalten korrekt? Wenn ich eine neue Kategorie hinzufüge ist ja das Standardtemplate (also das Template das ich auf Standard gestellt habe) eingetragen bzw. schon zugewiesen. Wie kann es richtig sein das ich dann trotzdem nochmal auf "Kategorie konfigurieren" klicken - und es ohne was zu ändern abspeichern - muss. Das KANN doch so nicht richtig sein - dann wäre ja die Vorkonfiguration des Templates überflüssig! ^^

Es handelt sich dabei definitiv um einen Bug - ich weiß nur nicht wie es dazu kommt und wie man es wieder beheben kann. In einigen unserer Webs funktioniert es korrekt - in anderen wiederum nicht :(

Verfasst: Mi 7. Mär 2007, 12:28
von Dodger77
Marvel hat geschrieben:Das Web hat aber doch verschiedene Hauptkategorien. Also beispielsweise "Unternehmen", "Produkte", etc. ^^
Die "idcat" der Kategorie, die du auch per Konfiguration auswählst.
Marvel hat geschrieben:Inwiefern ist das Verhalten korrekt?
Das Problem bestand in älteren Contenido-Versionen durchaus:

http://www.contenido.org/forum/viewtopi ... rdtemplate

Wenn du also eine Version < 4.6.15 einsetzt, solltest du updaten.

Verfasst: Mi 7. Mär 2007, 13:17
von Marvel
Das Problem bestand in älteren Contenido-Versionen durchaus:
Ich habe aber eine 4.6.15 :( Und das Problem existiert dennoch!


Hmm... moment. Ich benutze hier statt dem normalen Modul "Hauptnavigation" ein angepasstes Modul:

EINGABE:
?>
<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
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>';
$counter = 0;
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']));

if ($counter == 0)
{
$background1 = 'background-color: #009C77';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 1)
{
$background1 = 'background-color: #587FAA';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 2)
{
$background1 = 'background-color: #D82F42';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 3)
{
$background1 = 'background-color: #5EAB21';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 4)
{
$background1 = 'background-color: #F27F02';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 5)
{
$background1 = 'background-color: #A216B7';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 6)
{
$background1 = 'background-color: #ff0000';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 7)
{
$background1 = 'background-color: #18A8CB';
$tpl->set('d', 'BACK', $background1);
}

if ($counter == 8)
{
$background1 = 'background-color: #137195';
$tpl->set('d', 'BACK', $background1);
}

$tpl->next();



if ($idcat == $data['idcat'] || is_array($data['sub'])) {
$tpl->generate('templates/navfirst_on.html');
} else {
$tpl->generate('templates/navfirst_off.html');


}
if (is_array($data['sub'])) {
$tmp_data = array();
$tmp_data = $data;
} // end if

$counter = $counter + 1;
} // end foreach
echo '</tr></table>';

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

/* Clean buffer */
ob_end_clean();

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

?>

Damit hängt es wohl zusammen, oder? Kann mir jemand einen Tipp geben ob ich das Problem direkt in dem Modul fixen kann?

Verfasst: Mi 7. Mär 2007, 13:59
von Dodger77
@Marvel: Nimm doch die Hauptnavigation aus dem aktuellen Beispielmandanten (z.B. hier) und füge den Part mit der Hintergrundfarbe dort ein. Das Modul kann z.B. auch mit geschützten Kategorien umgehen usw.

Verfasst: Mi 7. Mär 2007, 14:09
von Marvel
Okay, Danke. Ich werde das gleich mal ausprobieren :)