使用自定义模块-Magento将自定义选项卡添加到产品视图页面


Add a Custom Tab to Product View Page using Custom Module - Magento

我正在创建一个自定义模块,该模块在产品视图页面中添加一个自定义选项卡,该选项卡有一个表单供用户输入某些信息。我使用的是默认/现代主题,所以我在产品视图页面上已经有了选项卡,我希望我的自定义选项卡显示在它们旁边。

用户输入的这些信息也应该是可编辑的,并且可以在后端以网格或其他形式查看。

现在我已经开始创建我自己的模块,但我对一些事情感到困惑。Stack Overflow对增加我的Magento知识非常有帮助,所以我认为最好在继续之前询问专家。

1) 为了让我的选项卡显示在产品视图页面上,我的布局文件应该是什么样子的?

2) 如何在catalog.xml文件中传递选项卡的信息?

3) 如果我希望此部分显示在"管理"的"目录"部分下,那么我需要更改哪些文件?我需要扩展任何核心文件吗?

这是我到目前为止的文件结构

Companyname
 Modulename
  etc >> config.xml
  Helper >> Data.php
  sql >> module_setup >> mysql4-install-0.1.0.php
  Model >> Module.php
   Mysql4 >> Module.php
    Module >> Collection.php
  Block
  design
   default
     modern
      layout >> module.xml
      template >> module >> module.phtml

我正在遵循一个教程,我所有的文件都有类似于这个链接的内容,直到添加前端模板的部分。我还没有开始为Admin部分编写代码,并考虑在此之前澄清我的概念。

任何建议/意见都将不胜感激。谢谢

编辑:这是我模块的设计布局文件。app/design/frontend/default/modern/layout/cm_askquestion.xml

  <?xml version="1.0"?>
  <layout version="0.1.0">
    <catalog_product_view>
      <reference name="product.info.tabs">          
            <block type="cm_askquestion/list" name="catalog.ask.question" template="cm_askquestion/list.phtml" >
    <block type="core/template" name="question.form" as="questionForm" template="cm_askquestion/form.phtml" />
      </reference>
     </catalog_product_view>    
   </layout>

这是我的应用程序/设计/前端/默认/现代/布局/目录.xml文件

    <catalog_product_view translate="label">
    <label>Catalog Product View (Any)</label>
      <reference name="content">
        <block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml" >
               <action method="addTab" translate="title" module="catalog">
                  <alias>description</alias>
                  <title>Product Description</title>
                  <block>catalog/product_view_description</block>
                  <template>catalog/product/view/description.phtml</template>
               </action>        
       <action method="addTab" translate="title" module="catalog">
          <alias>askaquestion</alias>
          <title>Ask a Question</title>
          <block>cm_askquestion/list</block>
          <template>cm_askquestion/list.phtml</template>
           </action>
         </block>

My list.phtml包含一个名为"Ask a Question"的链接,用于打开表单

       <p><strong><a href="#question-form" id="add-question"><?php echo $this->__('Ask a question'); ?></strong></a></p>
       <!-- code to display answered questions-->
       <?php echo $this->getChildHtml('questionForm'); ?>

我的form.phtml是这样开始的,

       <a name="question-form"></a>
       <form action="<?php echo Mage::getUrl('askquestion/index/addQuestion'); ?>" id="questionForm" method="post" style="display: none;">
       <!-- code to display product question form -->
       <script type="text/javascript">
        //<![CDATA[
        $('add-question').observe('click', function(event){
        $('questionForm').toggle(); 
       });
       var contactForm = new VarienForm('questionForm', true);
       //]]>
       </script>

请指出我做错了什么,以及如何在单击链接的同一选项卡中打开表格。

尝试以下链接:

  • 通过布局在产品视图页面中添加选项卡
  • Magento管理模块

--编辑--

<?php echo $this->getChildHtml('questionForm'); ?>
// should be ( not child element, block alias as described in tutorial )
<?php echo $this->getChildHtml('info_tabs'); ?>

我的解决方案:

<catalog_product_view>
   <reference name="product.info">
         <!-- Add tabs -->
         <block type="catalog/product_view_tabs" name="product.info.tabs" as="info_tabs" template="catalog/product/view/tabs.phtml">
             <action method="addTab" translate="title"><alias>comparative</alias><title>Comparative</title><block>core/template</block><template>catalog/product/view/comparative.phtml</template></action>
          </block>
     </reference>
</catalog_product_view>

模板文件(例如.phtml)必须存在。