#1
| |||
| |||
Unterschiedliche TPLs je Kategorie ladenHi es ist wohl möglich, durch Änderung des PHP-Code dem System "beizubringen", dass je Kategorie jeweils ein anderes Artikel-Template geladen wird. Kann jemand rasch sagen wo, das verkürzt die Zeit beim Suchen Danke ! |
#2
| |||
| |||
Ist das nicht eine Standard-Funktion seit 1.2.5? Also ohne jegliche Änderung des PHP-Codes? __________________ Patrick Gotthardt Patrick Gotthardt on Software |
#3
| |||
| |||
Mich würde das auch mal interessieren, wo das einzustellen ist. Im tpl-Verzeichnis ist doch nur eine article.tpl zu finden. grüße denis |
#4
| |||
| |||
erstelle mal testweise eine datei namens "cat_".$catid.".tpl" ... |
#5
| |||
| |||
und dann? |
#6
| |||
| |||
hm, ja, habe es gesehen. zeigt zwar die seite an, aber die variablen kann er nicht ersetzen ... |
#7
| |||
| |||
er zeigt die seite an? was hast du genau gemacht? mein ansatz wäre, dass man herausfindet wo die templates der kategorien aufgerufen werden. dort könnte man den aufruf der category_head.tpl ersetzen durch category_".$catid."_head.tpl. man müßte dann für jede anders aussehende kategorie ein template anlegen (zb. category_20_head.tpl). falls das template nicht exisitert, dann müßte das "standard-template" benutzt werden (category_header.tpl). was meinst du? vielleicht hat dragonmaster eine idee? grüße denis |
#8
| |||
| |||
ok, habe neue Erkenntnisse und eine Lösung gefunden. Dragonmaster hat recht, das System bietet von Hause aus eine individuelle Kategorieansicht an. Dazu einfach im Templateordner beliebige Files anlegen; Beispiel: cat_4.tpl Dabei wird diese Datei für die Kateogrie 4 geladen. Nachteil beim ersten Test war, dass die Variable {name} nicht mehr interpretiert wurde und die Artikel dieser Kategorie nicht sichtbar waren. Ich habe diesen Ansatz für die category_head.tpl umgesetzt. {name} wird erkannt und Artikel angezeigt. Dazu habe ich in der system.class.php die folgende Änderung gemacht: alt: $return = $GLOBALS['Template']->load('category_head', array('name' => $this->getcatname($id))); neu: if($GLOBALS['Template']->fileexists("category_head_".$id)){ $return = $GLOBALS['Template']->load('category_head_'.$id, array('name' => $this->getcatname($id))); } else { $return = $GLOBALS['Template']->load('category_head', array('name' => $this->getcatname($id))); } Bei dieser Lösung müssen halt Templates der Art category_head_CATID".tpl erzeugt werden. Viel Spass, Denis |
#9
| |||
| |||
Hi Denis, vielen Dank für den Hinweis. funktioniert wunderbar. Ich bin noch etwas verwirrt über den Gebrauch der Vorlagen article.tpl und article_preview.tpl. Als Standard wird ja jede Artikel mit article_preview.tpl angezeigt. Im Artikel gibt es einen Link weiterlesen und ich sehe dann erst den ganzen Artikel. Ich würde nun gerne in Abhängigkeit der Kategorie auch unterschiedliche Artikel-Templates laden. Wo ist dies in der system.class.php einzustellen ? Ist dies der Bereich Startseite laden ? Danke für die Hinweise. pat |
#10
| |||
| |||
Ich habe mal versucht, in der funktion index() in der system.class.php eine Abfrage der Kategorie einzubinden. Es soll bei der Kategorie mit der ID 1 das klassische preview-Template angezeigt werden und bei allen anderen Kategorien das Artikel-Template. Ich habe folgendes eingefügt: <code>$id = isset($_GET['catid']) ? $_GET['catid'] : 0; if($id==1) { $return .= $GLOBALS['Template']->load('article', $result[$x]); } else {$return .= $GLOBALS['Template']->load('article_preview', $result[$x]); } } return $return; } </code> Leider erhalte ich noch nicht das gewünschte Resultat. Es wird immer nur das Preview-Template angezeigt. Habe ich etwas übersehen ?! Ich bin mit dem Zusammenspiel der Funktionen noch nicht so vertraut.. Danke! |
#11
| |||
| |||
das heisst du willst nur in der catid=1 eine artikelkurzübersicht haben. in allen anderen sollen die vollartikel untereinander angezeigt werden. in diesem fall würde ich mal einen blick auf diese zeile der funktion category($id) werfen. aber alles ohne gewähr!! $return .= $GLOBALS['Template']->load('article_preview', $result[$x]); ich würde um diese funktion eine abfrage basteln if($GLOBALS['Template']->fileexists("article_preview_".$id)){ $return .= $GLOBALS['Template']->load('article_preview_'.$id, $result[$x]); } else { $return .= $GLOBALS['Template']->load('article_preview', $result[$x]); } Für dieses Beispiel kannst du für jede kategorie ein anderes template laden. für die catid=1 muss eine vorlage article_preview_1.tpl exisiteren. in dieser musst du dann mit den variablen eines vollartikels arbeiten. wie gesagt, alles ohne gewähr...alles nur theorie. muss du selber testen. grüße denis |
#12
| |||
| |||
ich habe ein ähnliches problem. ich würde gerne 2 artikeln ein anderes template geben. dabei liegen diese artikel in zwei verschiedenen kategorieren, und seit dabei jeweils die startseiten der ruriken (#1) allerdings komme ich mit der cat_id.tpl und den oben geposteten änderungen in der systemclass auf keine zufriedenstellbare lösung. weder {title}{name}{text}{preimg}{img} werden bei mir ausgelesen. hat einer von euch nen tipp, wie ich da weiter vorgehen könnte? |
#13
| |||
| |||
die oben beschriebenen ansätze sind auch für eine kategorieabhängige darstellung. in deinem fall muss zusätzlich eine artikelabfrage erfolgen. artID=.... |
#14
| |||
| |||
das kapiere ich ehrlich gesagt nicht. die artid hat doch bei einem startseitenartikel nichts zu suchen, da die adresse ?page=cat&catid=57 (zum beispiel) ist. d.h. normalerweise müßte ich ja nur an den categorieid-namen. dieses will er mir aber irgendwie nicht machen. bzw. werden die platzhalter {text} nicht geparst, und ich weiß ehrlich gesagt, nicht warum. |
#15
| |||
| |||
Hi Denis, die Funktion ist tatsächlich geeignet um mein Vorhaben umzusetzen. Der Code funktioniert ! Danke! Manko ist leider, dass im Template die Variable {text} scheinbar nicht geparst wird. Ein Artikel wird wohl in voller Länge nur korrekt über die den Link weiter dargestellt. Ich vermute, dass mir in der gewählten Funktion die Variable text noch nicht zur Verfügung steht. Diese wäre dann in der Funktion aufzurufen und zur Verfügung zu stellen. Gruss Pat |
#16
| |||
| |||
{text} wird deshalb nicht geparst, weil der entsprechende array in der function category() nicht definiert wird. du brauchst dazu lediglich in der variable $result der SELECT-liste ",text" hinzufügen und ein paar zeilen weiter unten in der for-schleife folgende zeile einfügen: Code: $result[$x]['text'] = Bbcode::encode($result[$x]['text']); |
#17
| |||
| |||
Danke, ich hatte vergessen mir das SQL Statement näher nazushen. Die Erweiterung von $result hatte ich bereits vorgenommen. So funktioniert es nun. |
Themen-Optionen | |
Thema bewerten | |
Ähnliche Themen | ||||
Thema | Autor | Forum | Antworten | Letzter Beitrag |
Foren einer Kategorie zuweisen | Daniel Richter | Programmierung und Datenbanken | 7 | 06.09.2003 10:47 |