gpt4 book ai didi

Magento 在小部件中使用自己的句柄不起作用

转载 作者:行者123 更新时间:2023-12-04 23:09:47 24 4
gpt4 key购买 nike

我发现我可以用这个脚本添加自己的布局句柄:

$this->getLayout()->getUpdate()->addHandle('myhandle');

然后我检查了 Alan Storm Layout 查看器: http://alanstorm.com/2005/projects/MagentoLayoutViewer.tar.gz

?showLayout=句柄

Handles For This Request

  1. default
  2. cms_page
  3. STORE_default
  4. THEME_frontend_default_default
  5. cms_index_index
  6. page_two_columns_left
  7. customer_logged_out
  8. myhandle


有我的句柄,但我的自定义布局 xml 没有使用。

这是我的xml:
<?xml version="1.0"?>
<layout version="0.1.0">

<myhandle>
<reference name="head">
<action method="addJs"><script>test/your.js</script></action>
</reference>
</myhandle>
</layout>

这工作正常,因此加载了 xml 文件:
<?xml version="1.0"?>
<layout version="0.1.0">

<default>
<reference name="head">
<action method="addJs"><script>test/your.js</script></action>
</reference>
</default>
</layout>

怎么了?
为什么这个解决方案不起作用?

如果方法不正确,如何为使用小部件的页面添加自定义 css 和 javascript?

更新:
这是可能接近解决方案的东西:

如果在将新句柄添加到页面后添加此代码:
$this->getLayout()->getUpdate()->fetchPackageLayoutUpdates('myhandle');
$this->getLayout()->generateXml();

在此之后,“index.php?showLayout=page”调用在 xml 中写入句柄代码,但页面不使用它。

最佳答案

总而言之,您真的不想以这种方式注入(inject)布局句柄。它变得非常复杂(足够复杂,以至于我无法以足够快的速度一直跟踪它以获得 Stack Overflow 的答案),但是

  • 如果在从 Controller 调用 $this->loadLayout() 之前添加句柄,则为时过早。
  • 如果在调用 $this->loadLayout() 之后添加句柄,则为时已晚。

  • 这里做个实验,尝试修改基础Action Controller中的loadLayout方法
    File: app/code/core/Mage/Core/Controller/Varien/Action.php
    public function loadLayout($handles=null, $generateBlocks=true, $generateXml=true)
    {
    // if handles were specified in arguments load them first
    if (false!==$handles && ''!==$handles) {
    $this->getLayout()->getUpdate()->addHandle($handles ? $handles : 'default');
    }

    //YOUR NEW CALL HERE
    $this->getLayout()->getUpdate()->addHandle('myhandle');

    ...

    这应该可以工作并应用您的布局。现在,在生产中这样做将是一个坏主意,我只提到它是为了向您展示需要在非常特定的时间布局渲染过程中添加句柄。作为一个终端程序员,插入布局句柄并不是你的工作。

    布局系统旨在成为位于设计师和原始 PHP 系统代码之间的层。由于您显然能够编写 PHP 代码,因此我会考虑直接将您的 javascript 注入(inject)到头 block 预渲染中。
        //from a controller, but could be modified to be used elsewhere
    //also pseudo code
    $this->getLayout()->getBlock('header')->append(
    $this->getLayout()
    ->createBlock('core/text', 'some-unique-name')
    ->setText('<script type="text/javascript" src="/foo/baz/bar.js"></script>')
    );

    关于Magento 在小部件中使用自己的句柄不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463030/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com