OXID Modul - "capture" erweitern

Hallo zusammen,

ich entwickle ein eigenens Modul. Dieses soll u.a. den Smarty-Tag “capture” “oxidBlock_content” erweitern.

Bisher habe ich Smarty über Module kaum erweitert. Meine einzige Idee ist die Syntax für Blocks zu verwenden (Auszug aus der metadata.php):
‘blocks’ => array(
array(‘template’ => ‘page/checkout/basket.tpl’, ‘block’ => ‘oxidBlock_content’, ‘file’ => ‘basket.tpl’),
),

Die entsprechende Datei “oxidBlock_content.tpl” liegt mit folgendem Inhalt unter “/modules/meinmodul/out/blocks/”.

[{capture append=“oxidBlock_content”}]
[{foreach from=$Errors.basket item=oEr key=key}]
[{if $oEr->getErrorClassType() != ‘oxVoucherException’}]
[{include file=“message/error.tpl” statusMessage=$oEr->getOxMessage()}]
[{/if}]
[{/foreach}]
[{/capture}]

Das funktioniert leider nicht - was nicht verwunderlich, da es sich um Blocks und nicht Captures handelt.

Im Dateianhang gibt es noch einen Screenshot von dem Datenbankeintrag.

Gibt es eine Möglichkeit in einem Modul Captures zu erweitern?

Danke für Hilfe und Gruß
Alex

Ich habe es jetzt anders gelöst.

In der Datei basket.tpl habe ich einen leeren Block hinzugefügt und diesen in meinem Modul erweitert.

Du kannst prinzipiell auch einen bestehenden Block erweitern. “Capture” ist ein Array. Mit

[{capture append=“oxidBlock_content”}]

werden diesem Array Elemente hinzugefügt. Du kannst also an jeder Stelle etwas zu “oxidBlock_content” hinzufügen. Am Ende werden die gesammelten Elemente nacheinander ausgegeben.

Danke für deine Antwort :slight_smile:

Mir fällt gerade auf das ich die OXID Version nicht genannt habe… Die eShop-Version in dem das Modul eingebaut wird ist 4.7.4.

Mein Problem liegt darin das ich es über ein Modul erweitern möchte ohne Änderungen an den Templates von Azure oder vom eigenen Theme zu machen. Ja, es ist das eigene Theme, aber es ist schöner wenn das Modul unabhängig vom Theme mit den Smarty- und OXID-Core-Funktionen arbeitet.

Ist das möglich? Wenn ja, wie?

Gruß
Alex

An welcher Stelle willst du deinen Code einbinden?

[QUOTE=leofonic;177833]An welcher Stelle willst du deinen Code einbinden?[/QUOTE]

Ich möchte auf der Warenkorbseite in der Datei basket.tpl unter den Schritten Fehlermeldungen anzeigen lassen.

Unter den Schritten fängt direkt ein Block an:

[{capture append="oxidBlock_content"}]

    [{* ordering steps *}]
    [{include file="page/checkout/inc/steps.tpl" active=1 }]

    [{block name="checkout_basket_main"}]

Du kannst also den Block “checkout_basket_main” verwenden, das Template welches diesen Block ersetzt:


//dein Code
[{foreach from=$Errors.basket item=oEr key=key}]
[{if $oEr->getErrorClassType() != 'oxVoucherException'}]
[{include file="message/error.tpl" statusMessage=$oEr->getOxMessage()}]
[{/if}]
[{/foreach}]

//ursprünglicher Blockinhalt
[{$smarty.block.parent}]

Stimmt, danke :slight_smile: