视图不显示

我想修改Magento网站产品视图页面上显示的内容,并且我想创建自己的自定义块以供在页面上使用。

我做了什么

为产品视图句柄创建布局更新

要更新产品视图页上显示的内容,我在我的local.xml文件中放置了以下布局更新:

<catalog_product_view>
    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
    </reference>
    <reference name="content">
        <remove name="product.tierprices" />
        <remove name="product.info.upsell" />
        <remove name="product.clone_prices" />
        <remove name="product.description" />
        <remove name="product.tag.list" />
        <remove name="product.info.addto" />
        <remove name="product.info.addtocart" />
        <remove name="product.info.downloadcontent" />
        <remove name="product.info.extrahint" />
        <remove name="product.info.options.wrapper.bottom" />
        <remove name="product.info.container1" />
        <remove name="product.info.container2" />
        <remove name="alert.urls" />
        <remove name="catalog.compare.sidebar" />
        <remove name="cart_sidebar" />
        <remove name="right.permanent.callout" />
        <remove name="paypal.partner.right.logo" />
        <remove name="right.poll" />
        <remove name="bundle.tierprices" />
        <remove name="product.attributes" />

        <!-- This should override the original product.info block -->
        <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
            <!-- Custom MyNamespace_Videos_Block_Player block -->
            <block type="videos/player" name="videoPlayer" as="videoPlayer" template="video/player.phtml"/>
        </block>

    </reference>
</catalog_product_view>

在这一点上,我确认了删除节点的工作。 很明显,因为此刻我还没有创建videos/player块类,所以没有任何结果。

自定义模块

我通过在app/code/local下创建了以下文件夹结构创建了一个自定义模块:

  • myNameSpace对象
  • myNameSpace对象/视频
  • myNameSpace对象/影片/座
  • myNameSpace对象/影片/等等
  • 我在MyNameSpace/Videos/etc/config.xml为该模块创建了配置文件,并将以下xml节点放置在:

    <?xml version="1.0"?>
    <config>
        <modules>
            <mynamespace_videos>
                <version>0.0.1</version>
            </mynamespace_videos>
        </modules>
        <global>
            <blocks>
                <videos>
                    <class>MyNamespace_Videos_Block</class>
                </videos>
            </blocks>
        </global>
    </config>
    

    然后我启用了该模块并验证了它的工作。

    自定义块类

    我在MyNameSpace/Videos/Block/Player.phtml创建了一个自定义块,其中包含以下内容:

    class MyNamespace_Videos_Block_Player extends Mage_Core_Block_Template {
        public function _toHtml() {
            echo "Block's _toHtml() method called!";
            parent::_toHtml();
        }
    }
    

    自定义模板文件

    然后,我在design/frontend/mythemepackage/default/template/video/player.phtml了包含以下内容的自定义模板文件:

    <!--Check to see if Magento sees this!-->
    <?php Mage::log(get_class($this)); ?>
    

    修改目录/产品/ view.phtml

    为了让我的videos/player块在catalog/product/view.phtml ,我将app/design/frontend/base/default/template/catalog/product/view.phtmlapp/design/frontend/mythemepackage/default/template/catalog/product/view.phtml

    然后,我将以下行添加到新复制的视图模板中:

    <b>This text will show up!</b>
    <i>The following wont: </i>
    <?php echo $this->getChildHtml('videoPlayer'); ?>
    

    结果

    通过上述配置,我无法获取videoPlayer块进行渲染。

    以下是我所知道的:

  • 我可以在我的catalog/product/view.phtml文件中看到正常的html文本。 我看不到从$this->getChildHtml('videoPlayer');
  • MyNamespace_Videos_Block_Player类的_toHtml()方法未被调用,我看不到任何来自我的video/player.phtml模板的输出。
  • 如果我将catalog.xmlapp/design/frontend/base/default/layout/catalog.xml复制到app/design/frontend/mythemepackage/default/layout/catalog.xml ,然后添加我的videos/player块,可以看到“Block的_toHtml()方法调用!” 这已经被videos/player模块所回应。 以下是catalog.xml的添加内容:
  •     <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
            <block type="videos/player" name="videoPlayer" as="videoPlayer" template="video/player.phtml"/>
        </block>
    
  • 即使使用本地版本的catalog.xml调用我的块的_toHtml()方法,也不会输出我的模板。
  • 问题

    我花了很长时间来解决这个问题。 我已经在var/cache cache完全删除了缓存,并验证模块处于活动状态并正在工作。

  • 我错过了什么? 需要发生什么才能让块渲染?
  • 为什么要复制catalog.xml并在那里添加我的块,但是通过local.xml更新却不行?

  • 您好,我认为您可以在模块layout xml添加<catalog_product_view>标签

    <catalog_product_view>
         <reference name="content">
             <reference name="product.info">
                 <block type="catalog/product_view" name="product.info" template="catalog/product/view.phtml">
                     <block type="videos/player" name="videoPlayer" as="videoPlayer" template="video/player.phtml"/>
                 </block> 
             </reference>
        </reference>
    </catalog_product_view> 
    

    这会对你有所帮助

    链接地址: http://www.djcxy.com/p/59477.html

    上一篇: view doesn't show up

    下一篇: What Block Type for Left Column in Magento Theme?