【问题标题】:What does the "update" element do in Magento layout XML?Magento 布局 XML 中的“更新”元素有什么作用?
【发布时间】:2011-12-01 10:40:54
【问题描述】:

现在我正在探索 Magento 管理部分的内部结构,偶然发现了这段 XML:

文件:app/design/adminhtml/default/default/layout/catalog.xml,第 55 行左右

50            <block type="core/template" template="catalog/wysiwyg/js.phtml"/>
51        </reference>
52    </adminhtml_catalog_product_new>
53    
54    <adminhtml_catalog_product_edit>
55        <update handle="editor"/>
56        <reference name="content">
57            <block type="adminhtml/catalog_product_edit" name="product_edit"></block>
58        </reference>

&lt;update /&gt; 标签有什么作用?

【问题讨论】:

    标签: layout magento


    【解决方案1】:

    &lt;update&gt; 基本上是在拉另一个句柄。

    假设你有这个:

    <layout>
       <foo>
          <reference name="header">
              <block type="cms/block" name="some_block" as="someBlock">
                  <action method="setBlockId"><block_id>some_block</block_id></action>
              </block>
          </reference>
          <reference name="left">
              <block type="cms/block" name="some_totally_different_block" as="someTotallyDifferentBlock">
                  <action method="setBlockId"><block_id>some_totally_different_block</block_id></action>
              </block>
          </reference>
       </foo>
       <bar>
          <update handle="foo" /> 
          <reference name="header">
              <block type="cms/block" name="some_other_block" as="someOtherBlock">
                  <action method="setBlockId"><block_id>some_other_block</block_id></action>
              </block>
          </reference>
       </bar>
    </layout>
    

    bar 的生成 XML 将是:

    <layout>
       <bar>
          <reference name="header">
              <!-- Start of part pulled in from foo -->
              <block type="cms/block" name="some_block" as="someBlock">
                  <action method="setBlockId"><block_id>some_block</block_id></action>
              </block>
              <!-- End of part pulled in from foo -->
              <block type="cms/block" name="some_other_block" as="someOtherBlock">
                  <action method="setBlockId"><block_id>some_other_block</block_id></action>
              </block>
          </reference>
          <!-- Start of part pulled in from foo -->
          <reference name="left">
              <block type="cms/block" name="some_totally_different_block" as="someTotallyDifferentBlock">
                  <action method="setBlockId"><block_id>some_totally_different_block</block_id></action>
              </block>
          </reference>
          <!-- End of part pulled in from foo -->
       </bar>
    </layout>
    

    tl;dr:update 句柄基本上是“将此布局与我当前的布局合并”。

    【讨论】:

      【解决方案2】:

      此句柄用于将现有布局句柄合并到当前布局。 在您的示例中,&lt;update handle="editor"/&gt; 将添加到 &lt;adminhtml_catalog_product_edit&gt; 以下内容:

      <editor>
          <reference name="head">
              <action method="setCanLoadExtJs"><flag>1</flag></action>
              <action method="addJs"><script>mage/adminhtml/variables.js</script></action>
              <action method="addJs"><script>mage/adminhtml/wysiwyg/widget.js</script></action>
              <action method="addJs"><script>lib/flex.js</script></action>
              <action method="addJs"><script>lib/FABridge.js</script></action>
              <action method="addJs"><script>mage/adminhtml/flexuploader.js</script></action>
              <action method="addJs"><script>mage/adminhtml/browser.js</script></action>
              <action method="addJs"><script>prototype/window.js</script></action>
              <action method="addItem"><type>js_css</type><name>prototype/windows/themes/default.css</name></action>
              <action method="addItem"><type>js_css</type><name>prototype/windows/themes/magento.css</name></action>
          </reference>
      </editor>
      

      (“编辑器”句柄定义在app/design/adminhtml/default/default/layout/main.xml)

      【讨论】:

      • Magento 如何知道 句柄在 main.xml 中?如果另一个自定义 xml 文件包含 句柄怎么办?还会合并吗?
      • 我认为 Magento 会合并这两个句柄。
      • 嗯,这是否意味着 Magento 将搜索布局文件夹中的所有 xml 文件以查找 句柄?对不起,但不太明白。
      • @HashidHameed XML 文件此时已全部加载和解析。
      • @rahmanisback 怎么可能在执行更新处理程序时解析所有 XML 文件,因为它本身就是一个尚未解析的 xml 元素?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多