Drupal更改菜单网址

时间:2013-06-23 01:18:26

标签: php drupal drupal-7

使用Drupal 7,我有一个包含多个字段的内容类型。然后我有一个视图页面,它采用这种内容类型并显示其上的所有内容。

所以把它想象成一个博客......然后是一个主要的博客显示页面。

我已将其设置为在适当的位置自动创建菜单项。

我也设置了Pathauto,以便创建一个链接 www.site.com/blog_anchor_node-title

永远不会访问个人内容页面,所以我并不担心这个奇怪的网址,但是,由于pathauto不支持主题标签,我使用 anchor

我需要通过template.php文件用#替换 anchor 的每个实例。

这将允许锚标签自动添加到我的主菜单,页脚,以及它自己的“博客”页面上的跳转菜单。

到目前为止,我最接近的是:

    function bartik_theme_links($variables) {  
    $links = $variables['links'];
    if (!(strpos($links, "_anchor_") === false)) {  
        $links = str_replace("http://", '', $links);
        $links = str_replace("_anchor_","#",$links);
   } }  

这不起作用。

2 个答案:

答案 0 :(得分:0)

首先,您的theme_links implementation不应在其功能名称中包含主题。第二个引用之前链接的文档页面,`$ variables ['links']是......

  

以主题为主题的关联链接数组。每个链接的键用作其CSS类。每个链接本身应该是一个数组,具有以下元素

您的替换无效,因为您在阵列上使用strpos

要完成这项工作,请转到API documentation page,复制代码(是孔代码),然后在开头插入如下内容:

function bartik_links($variables) {
  $links = $variables['links'];
  foreach($links as $key => $l) {
    // do your replacements here.
    // You may want to print out $l here to make sure
    // what you need to replace.
  }
  //...
}

还要确保正确命名该功能。

答案 1 :(得分:0)

为了允许我在URL中使用#符号,对我有用的是将以下内容添加到我的template.php文件中(在您要调用的上述函数之前)。您不必将YOURTHEMENAME之外的任何内容更改为主题名称:

function YOURTHEMENAME_url_outbound_alter(&$path, &$options, $original_path) {
    $alias = drupal_get_path_alias($original_path);
    $url = parse_url($alias);

    if (isset($url['fragment'])){
        //set path without the fragment
        $path = $url['path'];

        //prevent URL from re-aliasing
        $options['alias'] = TRUE;

        //set fragment
        $options['fragment'] = $url['fragment'];
    }
}