我正在尝试为magento cms开发一个小部件,但遇到了一些问题。
我对马根托很陌生,所以请对我放松。
因此,小部件由一个图像、一些文本和一个超链接组成。
- 我在/app/etc/modules中创建了一个名为MP_All.xml的文件/
- 在/app/code/local/MP中创建了小部件文件夹结构-为小部件创建了MP文件夹
- MP文件夹中有一个BP_Widget文件夹,其中包含Block、Helper、Model等目录
- /etc/etc目录中有一个config.xml和widget.xml
- Block中是Banners.php文件,Helper目录中是data.php文件
- 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