Woher kommen oCat, oView Variablen und Funktionen in Templates?

Hallo liebe OXID Community,

ich bin recht neu im Umgang mit dem OXID Shop aber von seinem Umfang sehr begeistert.
Da ich allerdings bislang keine wirkliche gute Dokumentation finden konnte hoffe ich das Ihr mir ev. weiterhelfen könnt.

Meine Frage ist die woher die Funktionen und Variablen aus den Templates stammen.
Es geht momentan z.B. um das Template /out/basic/inc/category_tree.tpl. Dort sind einige Smarty Objekte wie $oView, $oCat mit denen auf weitere Funktionen und Variablen zugegriffen wird. Ich habe mittlerweile herausgefunden das die $oView Variable eine Instanz der Classe /views/oxView.php sein müsste. Allerdings tappe ich immernoch etwas im dunklen wo diese Sachen geladen werden und wo ich z.B. eine Übersicht bekommen kann auf was für Funktionen und Variablen ich in einen Template zugriff habe.

Desweiteren wäre für mich interessant wie ich z.B. vorhandene OXID Funktionen in ein Template einbinden kann. Könnt ihr mir ev. auch Seiten mit Hilfen, Beispielen und Tutorials zum OXID Shop empfehlen wo ich mich etwas einlesen kann?

Bin für Tipps und Hilfe momemtan sehr dankbar!

Gruß
Binary Trust

www.opensource-community.com

$oView ist immer der aktive View in dem du dich gerade verbindest. Bei der search.tpl ist dies der view search.

Die Variablen werden generell in den View Klassen zugewiesen.

[QUOTE=Binary;15959] Allerdings tappe ich immernoch etwas im dunklen wo diese Sachen geladen werden und wo ich z.B. eine Übersicht bekommen kann auf was für Funktionen und Variablen ich in einen Template zugriff habe.

Desweiteren wäre für mich interessant wie ich z.B. vorhandene OXID Funktionen in ein Template einbinden kann.[/QUOTE]
Eine [{debug}] Anweisung in einem Template schlüsselt Dir sehr detailliert die im Template verfügbaren Objekte und andere Variablen auf.

Da hab ich auch noch eine Frage dazu:

Ich hab eine neue View Klasse angelegt, welche die oxubase erweitert:

class meineneueklasse extends oxUBase

Was muss ich tun, damit ich in meinem neuen Template, das ich in meiner Klasse einbinde, dann oView zu verfügung habe. Möchte z.B. das hier nutzen :

[{assign var=“currency” value=$oView->getActCurrency() }]

1 Like

[QUOTE=deddy;30137]
Was muss ich tun, damit ich in meinem neuen Template, das ich in meiner Klasse einbinde, dann oView zu verfügung habe.[/QUOTE]
Nix! Das geht einfach so.

$oView bezieht sich immer auf die derzeitige view, $oViewConf ist immer ein Instanz von oxViewConfig - außerdem hast du die Komponenten klassen zur Verfügung die meist als $oxcmp_XXX zur Verfügung stehen.

hab ich denn hier die Instanz von oxViewConfig zur Verfügung? Bzw. wie bekomme ich hier die Daten.

Ja du hast die Instanz und kannst Methoden aufrufen, schau dir mal an wie das in den Templates, z.B. _header.tpl verwendet wird, z.B.:

[{ $oViewConf->getResourceUrl() }]

Das mit den Methoden ist mir schon klar. In den anderen Templates funktioniert ja alles und ich verstehe auch wie ich eben die Methoden verwende bzw. auch wie man Module schreibt.

Ich verstehe nur nicht warum ich in meiner neuen Klasse, die nicht eine View-Klasse erweitert, sondern eine neue View-Klasse sein soll, nicht das Währungszeichen bekomme: [{assign var=“currency” value=$oView->getActCurrency() }]

Das klappt nicht. Was mach ich denn falsch?

Assign var allein ist ja noch keine Ausgabe:

[{assign var="currency" value=$oView->getActCurrency() }]
[{ $currency->sign}]

das stimmt, aber [{ $currency->sign}] müsste das Eurozeichen ausspucken.

[QUOTE=deddy;30240]das stimmt, aber [{ $currency->sign}] müsste das Eurozeichen ausspucken.[/QUOTE]
Tut’s doch auch. View Klasse:

<?php
class test extends oxUBase
{
    protected $_sThisTemplate = 'test.tpl';
}
?>

Template:

TEST
[{assign var="currency" value=$oView->getActCurrency() }]
[{ $currency->sign}]

Output von index.php?cl=test:

TEST €

:frowning: Du hast Recht.

Ich weiß nicht was ich falsch mache. Den einzigen Unterschied, den ich gemacht habe ist, dass ich hier noch die render() verwende und dass die Klasse mit einem Ajax reingeladen wird. Ich hab ja sonst auch auf alle anderen Variablen Zugriff, nur eben nicht auf dieses doofe Eurozeichen.

Komponente nicht geladen vielleicht?

[QUOTE=avenger;15968]Eine [{debug}] Anweisung in einem Template schlüsselt Dir sehr detailliert die im Template verfügbaren Objekte und andere Variablen auf.[/QUOTE]

Vielen lieben Dank … so einfach und bringt soviel … man lernt nie aus

sorry das ich den thread wiederbelebe,
aber ich habe gerade das selbe problem, dass getActCurrency() bei einem modul welches views/details.php extended null ist.

Gabs da eine Lösung?

Aus [{debug}] bin ich nicht schlau geworden.

vielleicht was mehr info:
Extended man oxUBase direkt und man hat ein template dazu, ist actCurrency gesetzt.
Bei mir ist es aber auch ein Ajax Call der views/details.php extended.
Hier ist actCurrency null.
Mein Code ist so (geklaut aus editTags):

class ext_details extends ext_details_parent {
...
    protected function loadPreview() {
        $oSmarty = oxUtilsView::getInstance()->getSmarty();
        $oSmarty->assign('oView', $this);
        $oSmarty->assign('oViewConf', $this->getViewConfig());
        oxUtils::getInstance()->setHeader("Content-Type: text/html; charset=" . oxLang::getInstance()->translateString('charset'));
        die($oSmarty->fetch( 'mytemplate.tpl', $this->getViewId() ));
    }
...
}

Muss man da noch irgendwas initieren?

Um es selbst zu beantworten:

oxUtils::getInstance()->setHeader("Content-Type: text/html; charset=" . oxLang::getInstance()->translateString('charset'));
        die($oSmarty->fetch( 'mytemplate.tpl', $this->getViewId() ));

… ist keine gute Idee.

Anscheinend wird auf dem weg zum template noch einiges initialisiert.

Also besser folgendes in der function machen:

$this->_sThisTemplate = 'myajaxtemplate.tpl';

Dann gibt es auch getActCurrency