1

我在我的 Magento 商店中创建了一个自定义属性,以便通过将视频 ID 添加到文本字段来显示 youtube 视频。

我已将此代码放在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 回答