Mit Modul Template überschreiben - Oxid 4.7

Hallo,

ich bin schon seit Tagen auf der Suche nach Beiträgen, die erklären, wie man Template Dateien mit einem Modul überschreibt. Habe bis heute nichts gefunden…

Und zwar möchte ich die Newsletter.tpl Datei mit einem Modul überschreiben. Eigentlich müsste es möglich sein, denn das Modul DelTemp von Wendnet überschreibt auch eine Template Datei - allerdings im Backend.

Hoffe ihr könnt mir helfen.

Lg,
Cabber

Du willst es überschreiben um was genau zu erreichen?

Damit ich nicht das Theme ändern muss

Hi,

für Templates gibt’s ein Override-System:

Ein Modul brauchst Du nur für funktionale Änderungen.

Gruß

Templates selbst kann man nicht überschreiben, höchstens template blocks oder man kann der PHP Klasse sagen, dass sie ein anderen Template laden soll.

Wenn du ein komplett anderes Template laden willst, siehe hier ein Beispiel: https://github.com/vanilla-thunder/demo_ato

ach so - dafür brauchts kein Modul

Du musst Dir einfach ein Child-Theme anlegen. Da kommen dann alle veränderten Templatedateien rein, also zum Beispiel die Datei “newsletter.tpl”.
Der Shop verwendet nun bevorzugt die vorhandenen Dateien im Child-Ordner, alles was dort nicht gefunden wird, wird aus dem Parent-Theme geladen.
Das Parent-THeme als solches bleibt somit unverändert und damit updatesicher.

Info:

außer man schreibt ein Modul, das die Newsletter-Geschichten erweitern und man traut dem Benutzer nicht zu ein Child Template zu erstellen oder sein eigenes anzupassen :slight_smile:

Das man im Backend das Template mit $sRet überschreiben kann wusste ich, aber wie kann man das Frontend überschreiben? Wenn ich mir im Frontend $sRet ausgeben lasse, erhalte ich ‘page/info/newsletter.tpl’. Allerdings komme ich da mit ‘…/…/…/…/modules/…’ nicht raus :S
Mein Ziel ist es mit dem Modul das zu überschreiben, nicht mit einem Theme, welches die Parent Funktion nutzt :wink:

Das Problem ist auch, dass sich in der newsletter.tpl Templatedatei kein block befindet, den man ersetzen kann… :S

wenn es um die page/info/newsletter.tpl geht, dann schau doch mal nach, wie dieses Template aufgerufen wird.

hab ich schon :S in der newsletter.php Datei. Das bringt mir nur leider auch nichts ^^ Gibt es denn keine Möglichkeit?

nix mit PHP huh? :slight_smile:
Das Template ist in einer Variable gespeichert, diese Variable kannst du mit einem Modul für die Klasse überschreiben.

klar, aber ich glaube du verstehst nicht was ich meine :wink:
Beispiel:

<?php

class xl_newsletter extends xl_newsletter_parent
{
	

public function render()
    {
        $sRet = parent::render();
        
        // oxRegistry::get("oxUtilsView")->addErrorToDisplay($sRet);
        

        if ( $sRet == 'page/info/newsletter.tpl' ) 
	    return 'sn_newsletter.tpl';
            
            else return $sRet;
    }

   }
?>

so etwas funktioniert z.b. nicht… nur im backend, weil bei der Erstellung der Ansicht vor der render Funktion das Template kommt. D.h. ‘application/views/abc/tpl/’ -> getTemplateDirs()

steht in der oxutilsview.php

<?php
....

public function getTemplateDirs()
    {
        $myConfig = oxRegistry::getConfig();

        //T2010-01-13
        //#1531
        $this->setTemplateDir( $myConfig->getTemplateDir( $this->isAdmin() ) );

        if ( !$this->isAdmin() ) {
            $this->setTemplateDir( $myConfig->getOutDir( true ) . $myConfig->getConfigParam( 'sTheme' ) . "/tpl/" );
        }

        return $this->_aTemplateDir;
    }
.....
?>

für Quelltext gibts extra

, 
```html
 und 
```php
 Tags :)


willst du, dass statt dem page/info/newsletter.tpl ein anderes angezeigt wird?

ja davon rede ich ja die ganze zeit ^^

ich möchte die ‘page/info/newsletter.tpl’ mit meinem modul ersetzen…

dann verstehe ich was du meinst, aber ich verstehe nicht, warum du so kompliziert in die falsche Richtung denkst.
Z.B: wieso prüfst du, ob if ( $sRet == ‘page/info/newsletter.tpl’ ) ?

mach doch einfach return “dein_template”;

wie gesagt… es geht nicht. das template müsste dafür im ‘application/views/meintemplate/tpl/’ liegen aber es liegt bei meinem Modul.

d.h. wenn ich

return 'templt.tpl'; 

nehme, dann versucht oxid die datei ‘application/views/meintemplate/tpl/templt.tpl’ einzubinden

wenn du dein Template im Modul verwenden willst, so musst du es im Modul auch registrieren. Halbe Sachen funktionieren halt nicht :smiley:

Beispiel?

Wie würdest du es in deinem Modul machen, dass du die newsletter.tpl Datei im Azure Theme mit deiner Templatedatei aus deinem Modul ersetzt?

etwa so (siehe Anhang)

habe ich schon heute mittag gebaut, um zu sehen obs klappt :smiley: