1

ビデオIDをテキストフィールドに追加してYouTubeビデオを表示するために、Magentoストアにカスタム属性を作成しました。

このコードをvideo.phtmlフォルダcatalog/product/viewに配置しました

<p>
<?php $attStuff= $_product->getData(); ?>
<?php if( !empty( $attStuff['videoid'] ) ): ?>
<iframe width="330" height="253" src="http://www.youtube.com/embed/<?php echo $attStuff['videoid']; ?>" frameborder="0" allowfullscreen></iframe>
<?php endif; ?>
</p>

CMSページの右側のサイドバーにビデオショーを表示したいと思い、以下を参照するレイアウト更新を追加しましたvideo.phtml

 <reference name="right"> 
 <block type="core/template" name="catalog.product.video"   template="catalog/product/view/video.phtml" /> 
  </reference>

次のエラーが発生します。

致命的なエラー:13行目の/Applications/MAMP/htdocs/mysite/app/design/frontend/bootstrapped/default/template/catalog/product/view/video.phtmlの非オブジェクトでメンバー関数getData()を呼び出す

そして私は問題を診断することができません!

ここで何が問題になるのかについてのアイデアはありますか?

4

1 に答える 1

1

あなたはとても近いです。ブロックタイプをに設定する代わりに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()); ?>
于 2012-11-25T00:24:10.770 に答える