あなたはとても近いです。ブロックタイプをに設定する代わりにcore/template
、現在の製品をチェックする機能を持つクラスを使用する必要があります。catalog/product_abstract
ブロックにはまさにそれらの機能があります。レイアウトファイルに対してこれを行います。
<reference name="right">
<block type="catalog/product_view" name="catalog.product.video" template="catalog/product/view/video.phtml" />
</reference>
次に、ビデオファイルで:
<p>
<?php $_product = $this->getProduct(); ?>
<?php if($_product->getVideoid()): ?>
<iframe width="330" height="253" src="http://www.youtube.com/embed/<?php echo $_product->getVideoid(); ?>" frameborder="0" allowfullscreen></iframe>
<?php endif; ?>
</p>
編集:
CMSページで使用している場合、それはもう少し難しくなります。ビデオを取得する製品を決定する必要があります。これを行うにはいくつかの方法があります。CMSページでレイアウトの更新を使用している場合は、次のようにすることができます。
<reference name="right">
<block type="catalog/product_view" name="catalog.product.video" template="catalog/product/view/video.phtml">
<action method="setProductSku"><sku>sku-here</sku></action>
</block>
</reference>
そして、あなたのビデオファイルで:
<?php $_product = Mage::getModel('catalog/product')->load($this->getProductSku(), 'sku'); ?>
<?php if ($_product->getId() && $_product->getVideoid()): ?>
<p>
<iframe width="330" height="253" src="http://www.youtube.com/embed/<?php echo $_product->getVideoid(); ?>" frameborder="0" allowfullscreen></iframe>
</p>
<?php endif;?>
独自のモジュールの作成に精通しているようには聞こえないため、この方法をお勧めします。ここで示しているのはベストプラクティスではないため、これを調べることを強くお勧めします。つまり、モデルをブロックテンプレートファイルにロードします。独自のブロッククラスに移動する必要があります(これによりMage_Catalog_Block_Product_Abstract
、メソッドが拡張され、オーバーライドされる可能性がありますgetProduct()
)。
編集#2:
製品IDを使用できます。レイアウトxmlで、
<block type="core/template" name="catalog.product.video" template="catalog/product/view/video.phtml">
<action method="setProductId"><id>id-here</id></action>
</block>
テンプレートコードでは、次の行を使用します。
<?php $_product = Mage::getModel('catalog/product')->load($this->getProductId()); ?>