Boardunity Ratgeber Forum

Boardunity Ratgeber Forum (https://boardunity.de/)
-   X-Mentor (Archiv) (https://boardunity.de/x-mentor-archiv-f51.html)
-   -   Unterschiedliche TPLs je Kategorie laden (https://boardunity.de/unterschiedliche-tpls-je-kategorie-laden-t2211.html)

pat 31.07.2004 19:36

Unterschiedliche TPLs je Kategorie laden
 
Hi

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 !

Patrick Gotthardt 31.07.2004 20:39

Ist das nicht eine Standard-Funktion seit 1.2.5?
Also ohne jegliche Änderung des PHP-Codes?

dblum 05.08.2004 11:03

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

solanum 05.08.2004 14:37

erstelle mal testweise eine datei namens "cat_".$catid.".tpl" ...

dblum 05.08.2004 15:59

und dann?

solanum 05.08.2004 23:54

hm, ja, habe es gesehen. zeigt zwar die seite an, aber die variablen kann er nicht ersetzen ...

dblum 06.08.2004 08:59

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

dblum 06.08.2004 12:38

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

pat 30.08.2004 23:13

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

pat 31.08.2004 23:00

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!

dblum 01.09.2004 10:38

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

thorsten 01.09.2004 15:33

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?

dblum 01.09.2004 16:40

die oben beschriebenen ansätze sind auch für eine kategorieabhängige darstellung. in deinem fall muss zusätzlich eine artikelabfrage erfolgen. artID=....

thorsten 02.09.2004 08:53

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.

pat 02.09.2004 21:41

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

lotsch 03.09.2004 15:50

{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']);
und schon sollte es funktionieren!

pat 04.09.2004 14:26

Danke,

ich hatte vergessen mir das SQL Statement näher nazushen. Die Erweiterung von $result hatte ich bereits vorgenommen.

So funktioniert es nun.


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:11 Uhr.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24