【问题标题】:Magento - Widget DevelopmentMagento - 小部件开发
【发布时间】:2023-04-09 08:26:01
【问题描述】:

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

我是 Magento 的新手,所以请放轻松。

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

  1. 我在 /app/etc/modules/ 中创建了一个文件 MP_All.xml
  2. 在 /app/code/local/MP 中创建了小部件文件夹结构 - 为小部件创建了 MP 文件夹。
  3. 在 MP 文件夹内是一个 BP_Widget 文件夹,其中包含 Block、Helper、Model 等目录。
  4. /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' )
        );
    }
}

我现在遵循的教程说该小部件应该处于活动状态并且“可以使用”。但它仍然没有显示在可用小部件的下拉列表中。我在这里错过了什么?

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

正如我之前所说,我对 Magento 很陌生。提前致谢。编程愉快!

【问题讨论】:

    标签: php magento


    【解决方案1】:

    看来问题出在您的模块目录 BP_Widget 的名称上。

    在 Magento 中,当 Autoloader 尝试加载类时,类名中的“_”字符被替换为“/”目录分隔符,请参见: 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' )
            );
        }
    }
    

    一个很好的参考可能是这个链接create custom widget

    希望对您有所帮助 :) 欢迎来到 Magento Development

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 2011-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多