ich versuche gerade den Block “Frisch eingetroffen” von der Startseite auf eine separate Seite zu verlagern. Dazu habe ich einen zusätzlichen Menüpunkt in die inc/infobox.tpl eingetragen über den die neue “novelties.tpl” aufgerufen wird - das funktioniert auch. In der novelties.tpl steht der Block:
[{if ($oView->getNewestArticles()|@count)>0 }]
…
[{/if}]
aus der start.tpl.
Dummerweise bekomme ich die Fehlermeldung:
Function ‘getNewestArticles’ does not exist or is not accessible! (Info)
ich wäre Euch dankbar, wenn ich irgendeinen Tipp erhalten könnte und wenn es der ist, das das Thema zu weit geht, hier nicht hingehört oder was ähnliches.
ich habe mir mit “Glossy Accordion Menu” ein eigenes Menü für diverse Contentseiten eingerichtet. Die Seitenaufrufe lege ich im infobox.tpl an. Da steht dann entweder ein Verweis auf eine CMS-Seite aus dem Admin-Bereich (funktioniert hervorragend) oder wie in diesem Fall auf eine separete tpl-Datei, die den entsprechenden Code-Block enthält.
Was funktioniert, ist das Aufrufen der Seite “novelties.tpl”. Was nicht funktioniert ist das korrekte Ausführen des Code-Blocks, der ursprünglich aus der start.tpl stammt.
Ich hoffe, ich habe mich jetzt etwas verständlicher ausgedrückt.
Ich weiß nicht ob du hier an der richtigen Stelle fragst. Du versuchst eine Funktion aufzurufen: $oView->getNewestArticles(), diese ist von der Startseite aus verfügbar, in deinem neuen Template ist diese Funktion aber nicht verfügbar. Darum bekommst du die Fehlermeldung: Function ‘getNewestArticles’ does not exist or is not accessible!
Ich kenn mich weder mit php noch mit den Funktionen genau genug aus um dir helfen zu können. Vielleicht fragst du mal im Entwicklerforum wie du diese Funktion auch in einem anderen Template nutzen kannst. Denn so wie es scheint ist $oView->getNewestArticles() keine globale Funktion die man von überall aufrufen kann.
wie sieht der Link zu den neuen Seite aus? Denn ob und welche Funktionen im Template vorhanden sind hängt damit zusammen welche view Klasse (php) benützt wird. Also poste einfach mal den Link zu deiner “novelities” und ich kann dir sicher weiter helfen.
danke für die Antwort. Du hast das Thema erkannt. Im Prinzip ist mir klar, dass die Funktion nur für die Startseite verfügbar ist (siehe views/start.php). Da auch ich mich mit PHP nicht auskenne (ich versuche langsam hinter die Geheimnisse objektorientierter Programmierung zu kommen), brauche ich auch nur einen kleinen Hinweis, dann wirds schon gehen.
bitte sag mir doch wie dein Link aussieht. Das ist wirklich relevant, denn z.T. abhängig von der View stehen dir Objekte und Methoden im Template zur Verfügung…
genau da liegt das Problem. Mit dem “cl=info” lädst du die View Klasse “info.php” und hast in der Variable “oiew” dann alle Methoden dieser Viewklasse zur Verfügung. Leider ist die Methode “getNewestArticles” in der View Klasse “start.php” definiert. Bei der “start.php” kann man aber leider nicht das Standardtemplate mit “tpl=XYZ” überschreiben. So fällt mir als einfachste Möglichkeit nur ein das du eine eigene Viewklasse anlegst (angeleht an info.php) und dort die “getNewestArticles” definierst.
hat zwar etwas etwas gedauert, bin mir auch nicht sicher, ob das wirklich die feine englische Art war, wie ich das gebaut habe, aber meine erste View-Klasse für die Neuheitenseite funktioniert. Letzte Frage zu dem Thema:
was genau ist mit “Klartext” gemeint? Kannst Du vielleicht kurz erörtern, wie Du die nichtfeinenglische Art eingebaut hast? Geht es vielleicht um sog. “sprechende URLs”?
mit nicht feiner englischer Art meinte ich meine Klasse. Ich habe einfach einen Teil des Codes aus der info.php und start.php in meiner Klasse wiederverwendet, aber nicht die in vorher genannten Dateien enthaltenen Klassen zu erweitern. Dadurch entsteht natürlich doppelter Code -> nicht die feine englische Art.
Caroline,
bestend Dank. Habe den Hinweis umgesetzt. Funktioniert alles so wie gewollt.
wann immer Du eine neue View anlegst wirst ein bisschen doppelten Code haben. So musst du ja die Funktion “render” für jede View definieren. Jedoch spielst du auf die komplette Kopie der Methode “getNewestArticles” an. In diesem Fall musst du eine Kopie nutzen, da diese Methode nur für eine einzelne View gedacht war. Willst eine Methode in allen Templates nutzen schreibe eine Erweiterung der “oxviewconfig”. Deren Methoden sind in allen Views vorhanden.