s 将是一个棘手的问题, 并且可能更多涉及一个单一的堆叠溢问题。 这里有些背景可以启动您。 您要处理的类/ 对象是一个块类。 块用于生成 HTML 。 正如您已经指出的, 它们是无国籍的 。
块从部件实例模型对象获取数据 。
Mage::getModel( widget/widget_instance );
Mage_Widget_Model_Widget_Instance
这些对象的状态( 您试图更改的数据) 位于表格 < code>widget_ Instance code>
问题是, 块对象对部件实例对象一无所知 。 部件被插入到页面布局布局中, 带有存储在数据库中的特殊的布局控管( 是一个过度简化, 因为您可以写入 < a href=\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
<reference name="content">
<block type="cms/widget_page_link" name="48fc761f38fa9838fcc3a3b498c47f72" template="cms/widget/link/link_block.phtml">
<action method="setData">
<name>anchor_text</name>
<value>asdfasdfsad</value>
</action>
<action method="setData">
<name>title</name>
<value>asdfasdfasdfasd</value>
</action>
<action method="setData">
<name>page_id</name>
<value>2</value>
</action>
</block>
</reference>
中未提及部件实例 ID,这意味着您无法装入实例对象。
在理论上, 您可以尝试根据参数值装入部件实例, 因为这些 < 坚固> 坚固 > 存储在数据库中 。 但是, 它们会重新存储在 < code> widget_ paramater code> 列中, 是一个序列字符串 。 这意味着您不能使用 SQL 或模型文件员来查询它。 您必须先手动装入特定实例类型/ 主题/ 服务器的所有部件实例, 然后手动输入 < code> foreach < / code > 直至您找到正确的对象。 对于少量部件来说, 这可能具有性能, 但对于大量部件来说会很快变得不具有性能。 另外, 这也会被忽略到工作上, 因为( 虽然可能性不大) 您部件参数的值可能已经被其他布局更新代码更改 。
越好, (和更费时) 的方法是重写插入代码的部件, 使其在版式更新 XML 中包含一个页代号。 这将将例 id 传送到部件块代码, 允许您即时编辑一个部件实例对象并保存它。 您也可以在一个自定义类总是保存实例 ID 的部件中添加字段 。
祝你好运!