我正在尝试以编程方式将查询字符串“?device = mobile”添加到所有主链接上。
在我的主题的page.tpl.php文件中,我尝试了以下内容,
<?php if (is_array($primary_links)) : ?>
<?php foreach ($primary_links as $link): ?>
$link['href'] = $link['href'].'?device=mobile';
<?php endforeach; ?>
<?php endif; ?>
然而,这只是将代码打印到页面上。目前我正在尝试使用hook_menu_link_alter,但到目前为止我还没有成功。为了在一个主要链接项上测试我的代码,我尝试了下面的代码:
myModule_menu_link_alter(&$item, $map){
$items['photo_gallery']['href'] = 'photo_gallery?device=mobile';
}
不幸的是,链接没有变化。我也将从我的template.php文件中调查hook_menu_item_link(),但是在这一点上,如果有人能指出我正确的方向,我会喜欢它,让我知道我做错了什么。
感谢。
答案 0 :(得分:2)
你在page.tpl.php中放置的代码有正确的想法,但你遗漏了一些东西:
$link
变量是副本数组中的原始项目,因此$link['href'] = 'stuff'
不会修改原始项目。要修改原始文件,您可以使用参考语法,例如:foreach ($primary_links as &$link)
。 (前缀为变量名称的&符号,请参阅PHP docs on references)。所以,解决这三个问题,我会说你应该修改你的page.tpl.php代码看起来像:
<?php if (is_array($primary_links)) : ?>
<?php foreach ($primary_links as &$link): ?>
<?php $link['query'] = array('device' => 'mobile'); ?>
<?php endforeach; ?>
<?php endif; ?>
或者,如果您不得不在每一行上打开/关闭PHP,那么只需使用正常的块,如:
<?php
if (is_array($primary_links)) {
foreach ($primary_links as &$link) {
$link['query'] = array('device' => 'mobile');
}
}
?>
注意1. &$link
语法(使用引用而不是副本),以及2. $link
数组的查询数组键,这是其中之一“ Drupal将搜索的特殊“数组键,如果找到,则用于构建适当的URL查询以附加到最终链接(请参阅Drupal的url()函数的文档)。
此外,每当您看到“没有任何变化”时,请记得清除缓存,尤其是在处理主题时。