【问题标题】:Magento: How to create an instance of a block class?Magento:如何创建块类的实例?
【发布时间】:2012-08-31 09:08:21
【问题描述】:

例如,在 Magento 的核心中有 app\code\core\Mage\Catalog\Block\Product\View\Options.php 类。

我将如何创建一个实例?我试过了

Mage::getModel('Mage_Catalog_Block_Product_View_Options');

它确实有效,但由于这不是一个模型类,而是一个块类,因此以这种方式创建它似乎是错误的。有什么替代方案?

谢谢! :)

【问题讨论】:

    标签: block magento-1.4


    【解决方案1】:

    使用createBlock方法:

    $block = $this->getLayout()->createBlock('catalog/product_view_options')
    

    【讨论】:

    • 虽然此方法有效,但最好在 xml 文件中创建块并使用 getChildHtml() 方法将它们显示在模板文件中。这种方式更灵活 - 允许在需要时替换块或在其他 xml 文件中完全删除它们。
    【解决方案2】:

    您需要在 Layout 上使用 createBlock,但 block 并不都有 getLayout 方法。

    Mage::app()->getLayout()->createBlock('adminhtml/sales_order_grid');
    

    这是一种更好的“new My_Module_Block_Name”技术,因为它允许在配置中重写块。

    正如@Bartosz Górski 建议的那样,在 XML 中定义块是可取的,尽管不可能直接定义不同的动态内容。 Magento 在 Cart 的物品渲染系统中有一个很好的解决方案 - 它动态创建块,但在渲染之前从 XML 加载它们的配置。

    【讨论】:

      【解决方案3】:

      只需使用 new 运算符

      $block = new Mage_Catalog_Block_Product_View_Options();
      

      因为这些类将在您请求它们时自动加载!

      【讨论】:

      • 不要那样做。如果我想重写那个块怎么办?!请参阅@PhilB 的回复。 这就是你应该怎么做。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      • 1970-01-01
      • 2012-12-19
      • 2018-02-24
      • 2021-12-27
      • 1970-01-01
      相关资源
      最近更新 更多