Neue Seite über Modul erstellen

Hallo zusammen,

ich bin wieder einmal am basteln an meinem Shop und leider stehe ich nun wieder vor einem Problem… ich möchte eine neue Seite erstellen (also keine erweitern) in welcher meine Artikel (überwiegend Bücher) in einer Art Bücherregal angezeigt werden. Das ganze soll dann auch über externe Scripte laufen. Aber das ist erst mal egal, denn das hat mit meinem Problem wenig zu tun.

Problem: Ich schreibe eine neue Klasse welche ich “pbFlippingBook” genannt habe. Die sieht aktuell zu testzwecken erst einmal nur so aus.


<?php
class pbFlippingBook extends oxUBase {
    protected $_sThisTemplate = 'page/list/flippingbooklist.tpl';

    public function init() {
        parent::init();

    }

    public function render()
    {
        parent::render();

        return $this->_sThisTemplate;
    }
}
?>

Diese habe ich auch bei mir in die metadata.php eingefügt


<?php
$sMetadataVersion = '1.1';

$aModule = array(
    'id'	            => 'rj',
    'title'             => 'rj2013',
	'author'			=> 'PM',
    'extend'            => array('oxarticlelist' 	=> 'rj/rj_articlelist',
								 'start' 			=> 'rj/rj_start',
								 'alist' 			=> 'rj/rj_alist',
								 'oxlist'			=> 'rj/rj_list',
								 'oxshopcontrol'	=> 'rj/rj_shopcontrol'),
    'files' 			=> array('pbFlippingBook'	=> 'rj/rj_flippingbook',),
    'templates' 		=> array()
);

?>

Das Template existiert natürlich auch schon, allerdings ist dies noch leer wsa aber nichts zur Sache tun sollte.

Das ganze soll sich dann nachher einfach in die Seite integireren, wobei dies ja denk ich mal in der [B]page.tpl[/B] passieren würde an der Stelle


[{foreach from=$oxidBlock_content item="_block"}]
					[{$_block}]
				[{/foreach}]

Wie ruf ich das ganze denn dann nun auf? Und vor allem… hab ich alles beachtet und richtig gemacht? Ich habe es einfach versucht über den GET-Parameter [B]index.php?cl=pbFlippingBook[/B] aufzurufen, aber dies scheint nicht der richtige weg zu sein.

Kann mir hier evtl. jemand weiter helfen?

[QUOTE=phiLue;128406] aber dies scheint nicht der richtige weg zu sein.[/QUOTE]
Bisschen genauer? Was passiert?

Wenn ich versuche diesem Link dann zufolgen werde ich auf [B]/index.php?cl=start&redirected=1[/B] weitergeleitet.

warum nicht so?

http://myshop/index.php?cl=tpl&tpl=mycustom.tpl

und das template dann in /out/azure/tpl/custom/mycustom.tpl

Habe deine Lösung probiert, allerdings frage ich mich dann wie ich eigene Funktionalitäten dann noch zu diesem Template unterbringen kann. Tut mir leid, aber ich glaub ich steh ein bisschen auf dem Schlauch :smiley:

Was für eine Funktionalität?
In dem Template kannst Du doch tun und lassen was Du willst? Wie in jedem anderen auch.

In dem Template habe ich aber dann ja keine Funktionen welche ich in Model und Controller hinterlegen kann, oder? Das scheint wirklich nur eine reine Template-Anzeige zu sein, oder irre ich mich hier?

Meinen tu ich die ganzen funktionen welche ich dann z.B. über $oView aufrufen kann.

Die Filenamen stimmen aber auch nicht. Diese müssen immer gleich sein wie die entsprechende Klasse.

Vielen Dank! Jetzt wird das ganze scheinbar schon einmal angesprochen :smiley:
Mein Template findet er leider aber immernoch nicht. Habe allerdings meine [B]metadata.php[/B] nun dementsprechend angepasst.


<?php

$sMetadataVersion = '1.1';

$aModule = array(
    'id'	            => 'rj',
    'title'             => 'rj2013',
	'author'			=> 'PM',
    'extend'            => array('oxarticlelist' 	=> 'rj/rj_articlelist',
								 'start' 			=> 'rj/rj_start',
								 'alist' 			=> 'rj/rj_alist',
								 'oxlist'			=> 'rj/rj_list',
								 'oxshopcontrol'	=> 'rj/rj_shopcontrol'),
    'files' 			=> array('rj_flippingbook'	=> 'rj/rj_flippingbook.php',),
    'templates' 		=> array('flippingbooklist.tpl'	=> 'rj/page/list/flippingbooklist.tpl')
);
?>

Am Ende werde ich aber natürlich nur das bekommen was ich in meinem Template stehen habe (sobald ich es geschafft habe, dass das Template angesprochen wird). Wie bekomme ich es aber nun hin das der Inhalt des Templates in der [B]page.tpl[/B] mit unter [B]$_block[/B] ausgegeben wird? Kenne mich damit leider so garnicht aus und finde dazu auch nicht wirklich ein Tutorial welches mein problem beschreibt. Habe auch hier und da versucht mri in anderen Modulen was abzugucken, bisher aber leider ohne Erfolg.

Ändere…

protected $_sThisTemplate = 'page/list/flippingbooklist.tpl'; 

mal nach…

protected $_sThisTemplate = 'flippingbooklist.tpl'; 

und probier es nochmals.

Hab ich nun gemacht, hat aber leider keine Veränderung mit sich gebracht.
Sehe hier aber auch keinen Unterschied zu anderen Templates, von daher bin ich mir nun nicht mehr sicher wo ich am besten bei der Fehlersuche ansetzen soll. :confused:

Ich hab dir das mal zusammengesetzt und angehängt.
Auch öfter mal ins Exceptionlog schauen.

Vielen Dank für deine Mühe! Ich hab das alles soweit bei mir umgesetzt und ich denke nun steht nur noch das Problem im Weg dass das Template nicht gefunden wird.

Ich habe nun mal ins ErrorLog gesehen (vergess ich immer wieder), allerdings werd ich daraus nicht weiter schlau. Ich sehe nur dass das Template nicht gefunden wurde.

Hier das Log dazu.

oxSystemComponentException-oxException (time: 2013-07-26 15:50:23): [0]: EXCEPTION_SYSTEMCOMPONENT_TEMPLATENOTFOUND 
 Stack Trace: #0 C:\xampp\sites\shop2013\core\oxutilsobject.php(190): oxUtilsObject->_getObject('oxsystemcompone...', 0, Array)
#1 [internal function]: oxUtilsObject->oxNew('oxSystemCompone...')
#2 C:\xampp\sites\shop2013\core\oxfunctions.php(383): call_user_func_array(Array, Array)
#3 C:\xampp\sites\shop2013\core\oxshopcontrol.php(496): oxNew('oxSystemCompone...')
#4 C:\xampp\sites\shop2013\core\oxshopcontrol.php(395): oxShopControl->_render(Object(rj_FlippingBook))
#5 C:\xampp\sites\shop2013\core\oxshopcontrol.php(155): oxShopControl->_process('rj_flippingbook', NULL, NULL, NULL)
#6 C:\xampp\sites\shop2013\core\oxid.php(40): oxShopControl->start()
#7 C:\xampp\sites\shop2013\index.php(27): Oxid::run()
#8 {main}

 Faulty component --> flippingbooklist.tpl
---------------------------------------------

Jetzt funktionierts! Ich musste einfach das Modul deaktivieren, den Cache löschen und dann das Modul wieder aktivieren. Danach funktionierte alles.

Vielen dank an euch für all eure Hilfe. Das hat mir schon mal enorm weiter geholfen! :smiley:

[B]leofonic,

Vielen Dank!!!

Ich habe nach diesen Informationen seit einer Woche gesucht.[/B]

Kann man überhaupt ohne Smarty ein Template aufrufen?

z.B. ich möchte beim Aufruf von cl=rj_flippingbook, dass mein Template aufgerufen wird.
Kann ich im Controller in PHP mein Tamplate einbinden???

Danke!!! :rolleyes:

Öhm, das Template wird doch immer im Controller aufgerufen mittels


protected $_sThisTemplate = 'templatename.tpl';
return $this->_sThisTemplate;

Oder hab ich dein Anliegen jetzt falsch verstanden?

Sorry für die dumme Frage, ich glaube ich verstehe jetzt selbst nicht, was ich damit fragen wollte.

Meine jetzige Frage wäre: wie kann ich PHP Datei im Template einbinden?

Ich habe bis jetzt es so versucht:

[{capture append=“oxidBlock_content”}]
<h1>Hallo Welt!</h1>

[{php}]
include (“meinedatei.php”);
[{/php}]

[{/capture}]

zwischen [{php}] und [{/php}] kann man ja php benutzen. Leider funktioniert das so nicht! :frowning:

[QUOTE=webstore;132345]
Meine jetzige Frage wäre: wie kann ich PHP Datei im Template einbinden?
[/QUOTE]
PHP hat im Template nichts zu suchen. Dafür hat man den Controller, der bereitet die Daten auf so dass sie im Template angezeigt werden können. Wenn du im Template Daten benötigst schreibst du eine Funktion in den Controller und rufst sie im Template auf mit

$oView->deineFunktion()

Den Rückgabewert kannst du dann im Template ausgeben.

werde es morgen so austesten!

Danke für die schnelle und klare Antwort!

Danke! es funktioniert so!!! :cool: