Magento-小工具开发


Magento - Widget Development

我正在尝试为magento cms开发一个小部件,但遇到了一些问题。

我对马根托很陌生,所以请对我放松。

因此,小部件由一个图像、一些文本和一个超链接组成。

  1. 我在/app/etc/modules中创建了一个名为MP_All.xml的文件/
  2. 在/app/code/local/MP中创建了小部件文件夹结构-为小部件创建了MP文件夹
  3. MP文件夹中有一个BP_Widget文件夹,其中包含Block、Helper、Model等目录
  4. /etc/etc目录中有一个config.xml和widget.xml
  5. Block中是Banners.php文件,Helper目录中是data.php文件
  6. Model目录中是一个Options.php文件

这是创建的文件的代码。

/app/etc/modules/MP_All.xml

<?xml version="1.0"?>
<config>
  <modules>
    <MP_BP_Widget>
        <active>true</active>
        <codePool>local</codePool>
    </MP_BP_Widget>
  </modules>
</config>

/app/code/local/MP/BP_Widget/etc/config.xml

<?xml version="1.0"?>
<config>
  <modules>
    <MP_BP_Widget>
        <version>0.1.0</version>
    </MP_BP_Widget>
  </modules>
  <global>
    <blocks>
        <bp_widget>
            <class>MP_BP_Widget_Block</class>
        </bp_widget>
    </blocks>
    <helpers>
        <bp_widget>
            <class>MP_BP_Widget_Helper</class>
        </bp_widget>
    </helpers>
    <models>
        <bp_widget>
            <class>MP_BP_Widget_Model</class>
        </bp_widget>
    </models>
  </global>
</config>

/app/code/local/MP/etc/widget.xml

<?xml version="1.0"?>
<widgets>
  <bp_widget_banners type="bp_widget/banners" translate="name description" module="bp_widget">
    <name>Product Banners</name>
    <description>Create product banners with hyperlink to specific page/product/URL</description>
    <parameters>
        <link_options>
            <label>Link</label>
            <visible>1</visible>
            <type>text</type>
        </link_options>
    </parameters>
  </bp_widget_banners>
</widgets>

/app/code/local/MP/BP_Widget/Block/Banners.php

class MP_BP_Widget_Block_Banners extends Mage_Core_Block_Template implements Mage_Core_Block_Interface {
    protected function _toHtml () {
    }
 }

/app/code/local/MP/BP_Widget/Helper/data.php

class MP_BP_Widget_Helper_Data extends Mage_Core_Helper_Abstract {
}

/app/code/local/MP/BP_Widget/Model/Options.php

class MP_BP_Widget_Model_Options {
    public function toOptionArray () {
        return array(
            array( 'value' => 'test_option', 'label' => 'Test Option' ),
            array( 'value' => 'inquiry', 'label' => 'Inquiry' )
        );
    }
}

我现在遵循的教程说,小部件应该是活动的,并且"随时可以使用"。但它仍然没有显示在下拉列表中,并带有可用的小部件。我在这里错过了什么?

有没有关于Magento的XML模式和小部件开发规则的参考?

正如我之前所说的,我对马根托很陌生。提前谢谢。快乐的编程!

问题似乎出在模块的名称Directory BP_Widget上。

在Magento中,当自动加载器尝试加载类时,类名中的"_"字符将替换为"/"目录分隔符,请参阅:lib/Varien/Autoload.php::autoload()

因此,您需要将模块目录重命名为BPWidget,并进行以下更改

/app/etc/modules/MP_BPWidget.xml

<?xml version="1.0"?>
  <config>
    <modules>
      <MP_BPWidget>
        <active>true</active>
        <codePool>local</codePool>
      </MP_BPWidget>
    </modules>
  </config>

/app/code/local/MP/BPWidget/etc/config.xml

<?xml version="1.0"?>
  <config>
    <modules>
      <MP_BPWidget>
        <version>0.1.0</version>
      </MP_BPWidget>
    </modules>
    <global>
       <blocks>
         <bp_widget>
            <class>MP_BPWidget_Block</class>
         </bp_widget>
       </blocks>
       <helpers>
         <bp_widget>
          <class>MP_BPWidget_Helper</class>
         </bp_widget>
       </helpers>
       <models>
         <bp_widget>
           <class>MP_BPWidget_Model</class>
         </bp_widget>
       </models>
     </global>
  </config>

/app/code/local/MP/BPWidget/etc/widget.xml

<?xml version="1.0"?>
<widgets>
  <bp_widget_banners type="bp_widget/banners" translate="name description" module="bp_widget">
     <name>Product Banners</name>
     <description>Create product banners with hyperlink to specific page/product/URL</description>
     <parameters>
        <link_options>
           <label>Link</label>
           <visible>1</visible>
           <type>text</type><!-- select for dropdown type -->
           <!-- In case you need your source model for this option uncomment source_model node -->
           <!--<source_model>bp_widget/options</source_model>-->
        </link_options>
     </parameters>
  </bp_widget_banners>
</widgets>

/app/code/local/MP/BPWidget/Block/Banners.php

class MP_BPWidget_Block_Banners extends Mage_Core_Block_Template implements Mage_Core_Block_Interface {
     protected function _toHtml () {
            // You need to return your widget html as string here
    }
}

/app/code/local/MP/BPWidget/Helper/Data.php

class MP_BPWidget_Helper_Data extends Mage_Core_Helper_Abstract {
}

/app/code/local/MP/BPWidget/Model/Options.php

class MP_BPWidget_Model_Options {
    public function toOptionArray () {
        return array(
            array( 'value' => 'test_option', 'label' => 'Test Option' ),
            array( 'value' => 'inquiry', 'label' => 'Inquiry' )
        );
    }
}

一个很好的参考可以是这个链接创建自定义小部件

希望它能有所帮助:)并欢迎来到Magento Development