如何在顶级链接中添加课程?

时间:2012-05-26 18:28:35

标签: magento

我尝试使用<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/>

2 个答案:

答案 0 :(得分:14)

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

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

但正如李指出的那样,你需要保留这些子元素的顺序。

如果您想将课程放在列表中的<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的组合。

答案 1 :(得分: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没有使用反射将action元素子元素映射到方法的命名参数,而是取决于位置。

另外一个注释,liParams和aParams可以是字符串或一系列表示键/值对的子元素。