Frage

Ich habe im Web gesucht und konnte nicht gefunden, wie das geht.

Ich möchte einen statischen Block hinzufügen, den ich zuvor in Administrator zu einer CMS-Seite erstellt habe. Dies funktioniert mit einer dieser Zeilen:

{{block type="cms/block" block_id="my_block_id"}}
{{block type="cms/block" block_id="my_block_id" template="cms/content.phtml"}}

Jetzt möchte ich eine benutzerdefinierte Vorlage verwenden, dh:

{{block type="cms/block" block_id="my_block_id" template="modulename/custom-template.phtml"}}

Wenn ich es so in die CMS-Seite stecke, wird der Block angezeigt, aber die "Vorlage" -Tag wird vollständig ignoriert- cms/content.phtml wird genutzt.

Was ich versucht habe
Ich habe versucht, die Klasse mage_block_cms_block zu erweitern und hinzufügen setTemplate($this->getTemplate()); zu _toHtml()-Funktion. Der Effekt ist der gleiche wie oben - cms/content.phtml wird genutzt.

Ich habe versucht, die Klasse mage_core_block_template zu erweitern. Natürlich kann ich hier eine Vorlage festlegen, aber ich habe Probleme, den statischen Block zu erhalten. Ich kann nicht finden, wie ich den Block mit Block-ID bekomme.

Worum geht es in dieser Frage / nicht
Ich weiß, wie man das mit PHP macht.
Ich weiß, wie man das mit XML-Files macht.
Für diese Frage ist es entscheidend, dass die Blöcke im Backend verwaltet werden können.

Ich leite Magento CE 1.7.0.0.

Vielen Dank für Ihre Zeit!

War es hilfreich?

Lösung

Sie können die Vorlage für einen statischen Block nicht ändern, da der statische Block keine Vorlage hat. Schauen Sie sich die Methode an: Mage_Cms_Block_Block::_toHtml(). Das _toHtml() Die Methode wird verwendet, um ein Blockobjekt zu rendern, und im Fall der CMS -Blöcke rendert es nur den Inhalt des Blocks.

Wenn Sie den Inhalt eines CMS -Blocks in einem Markup einwickeln möchten, können Sie Folgendes versuchen:

{{block type="core/template" template="custom/block.phtml" block_id="some_block_id"}}

Und in der Datei custom/block.phtml mach das:

<?php
$block = Mage::app()->getLayout()->createBlock('cms/block')->setBlockId($this->getBlockId()); //retrieve the cms block with the id set on this layout block
$html = $block->toHtml();//in this var you have the content of the cms block 
?>
<?php if ($html) : //this is needed to avoid additional markup if the cms block is empty?>
<div class="some-class">
    <div class="some-other-class">
        <?php echo $html;//actuall cms block?>
    </div>
</div>
<?php endif;?>

Ich hoffe, das brauchst du.

Andere Tipps

Hast du es versucht mit cms/widget_block? Dieser Block erstreckt sich von Mage_Core_Model_Template, Es kann also möglich sein, das zu tun, was Sie versuchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top