5

我尝试使用<aParams>class="class-name"</aParams>
例如将类添加到顶部链接:

<reference name="top.links">
    <action method="addLink" translate="label title" module="customer"><label>My Account</label><url helper="customer/getAccountUrl"/><title>My Account</title><prepare/><aParams>class="top-link-myaccount"</aParams><position>10</position></action>
</reference>

至少对于 1.7.0.0 版本,上述技巧对我不起作用。
任何想法?

编辑:
我想我使用以下方法修复了它<li/><a>class="top-links-register"</a>

<reference name="top.links">
        <action method="addLink" translate="label title" module="customer"><label>My Account</label><url helper="customer/getAccountUrl"/><title>My Account</title><prepare/><aParams/><position>10</position><li/><a>class="top-link-myaccount"</a></action>
    </reference>

请注意,您必须在前面<li/>

4

2 回答 2

14

要通过示例完成 Lee 的回答,要将类添加到顶部链接(<li>元素本身),您可以通过下面的新节点(或字符串)来完成,<liParams>如下所示:

<action method="addLink">
    <label/>
    <url/>
    <title/>
    <prepare/>
    <urlParams/>
    <position/>
    <liParams>
        <class>myclassname</class>
    </liParams>
    <aParams/>
    <beforeText/>
    <afterText/>
</action>

但正如 Lee 所指出的,您需要保留这些子元素的顺序。

如果要将类放在<a> 列表中,则语法类似,只需针对节点:

<action method="addLink">
    <label/>
    <url/>
    <title/>
    <prepare/>
    <urlParams/>
    <position/>
    <liParams/>
    <aParams>
        <class>myclassname</class>
    </aParams>
    <beforeText/>
    <afterText/>
</action>

如果您需要对链接文本和格式设置更大的灵活性,另一种方法是在块中生成链接,然后添加该块,而不是使用“addLink”节点。

这就是添加购物车和结帐链接的方式,而不是在 XML 中添加指向顶部链接的链接,他们直接从块中调用 addLink 方法,这样他们就可以计算适当的文本以显示给每个客户。

有关此示例,请参阅Mage_Checkout_Block_Links结合使用的类。base\default\layout\checkout.xml

于 2013-05-22T00:49:39.363 回答
12

正如您所发现的,addLink 的方法签名是:

public function addLink($label, $url='', $title='', $prepare=false, $urlParams=array(), $position=null, $liParams=null, $aParams=null, $beforeText='', $afterText='')

因此,使用所有参数的布局中的正确调用将是:

<action method="addLink">
    <label/>
    <url/>
    <title/>
    <prepare/>
    <urlParams/>
    <position/>
    <liParams/>
    <aParams/>
    <beforeText/>
    <afterText/>
</action>

不幸的是,Magento 没有使用反射将动作元素子元素映射到方法的命名参数,而是依赖于位置。

还有一点需要注意,liParams 和 aParams 可以是字符串,也可以是一系列表示键/值对的子元素。

于 2012-05-27T18:03:08.873 回答