2010-10-18 19 views
0

因此,我使用Drupal作为CMS的网站上有一打网页。想知道如何设置/附加任何页面上的所有href链接与动态属性?jQuery/Drupal将字符串附加到网站上的所有HREF(任何页面)

所以这里是一个例子网址:

http://www.site.com/?q=node/4 

,我想追加到URL,像这样:

http://www.site.com/?q=node/4&attr=1234 

现在我网站上的导航栏,当我将鼠标悬停在链接我看到的URL,但我需要追加& attr = 1234字符串到它的末尾。该字符串是动态的,因此它可能会不时变化。

我在想,jQuery将是一个很好的选择,但Drupal是否也有其他功能?

现在我已经看过一些帖子对堆栈:

问题是我学习我周围的Drupal方式,并与jQuery的,但最小的经验两者都变得更好。我看到jQuery可以替换HREF,但看起来像硬编码HREF,jQuery可以找到页面上的所有HREF并将字符串附加到它上面吗? Drupal也有这个功能,最好的方法是什么?

也需要这个工作的干净或标准的URL格式,所以我认为Apache会处理这个,我只是想确保。

感谢所有帮助

编辑:

貌似普遍的共识是Drupal的应处理这种类型的请求。只是寻找最佳实施。简单的函数调用将是最好的,但我希望它动态地将其添加到所有现有的href的,因为我希望这是动态的,而不是硬编码任何url/href调用。所以我可以随时添加/删除页面,而无需重新配置/重新编码任何内容。

感谢尽管

编辑#2大窍门:

好吧,也许我要问的问题,拧。这是我需要的,为什么它还不适合我。

我需要在url中传递一个值,以改变站点的一些外观和感觉。我需要将它传递给页面上的每个href标签,但不会在用户注销或管理页面上传递。

我在我的模板代码中看到导航链接生成的位置,所以我虽然可以将属性数组中的代码作为第二个参数传递给函数,但这是设置标记属性而不是URL属性。

现在我看到底部的导航链接使用这个Drupal函数:menu.config中的menu_navigation_links(),但顶级导航使用自定义函数。

该模板中的函数。PHP脚本看起来是一个创建链接

function lplus($text, $path, $options = array()) { 
    global $language; 

    // Merge in defaults. 
    $options += array(
     'attributes' => array(), 
     'html' => FALSE, 
    ); 

    // Append active class. 
    if (($path == $_GET['q'] || ($path == '<front>' && drupal_is_front_page())) && 
     (empty($options['language']) || $options['language']->language == $language->language)) { 
    if (isset($options['attributes']['class'])) { 
     $options['attributes']['class'] .= ' active'; 
    } 
    else { 
     $options['attributes']['class'] = 'active'; 
    } 
    } 

    // Remove all HTML and PHP tags from a tooltip. For best performance, we act only 
    // if a quick strpos() pre-check gave a suspicion (because strip_tags() is expensive). 
    if (isset($options['attributes']['title']) && strpos($options['attributes']['title'], '<') !== FALSE) { 
    $options['attributes']['title'] = strip_tags($options['attributes']['title']); 
    } 

    return '<a href="'. check_url(url($path, $options)) .'"'. drupal_attributes($options['attributes']) .'><b>'. ($options['html'] ? $text : check_plain($text)) .'</b></a>'; 
} 

不知道如何将我需要的东西纳入此功能。

因此,在主页上的?q = node /缺少,如果我追加&符号会引发错误。

http://www.site.com/&attr=1234 // throws error 

但如果我是国防部为正确的格式,它工作正常

http://www.site.com/?attr=1234 
+1

请参阅http://stackoverflow.com/questions/3929356/php-query-string-manipulation函数来操纵URL的查询字符串参数 – Petah 2010-10-18 19:32:01

回答

2

假设您指的是网页,您的意思是网页的内容类型(只适用于任何其他内容类型,只要它确实是内容而不是块或视图中的内容)。

通过运行str_replace或正则表达式,您可以轻松地替换即将查看的任何节点的内容。例如,使用str_replace:

function module_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
    switch($op) { 
    case "view": 
     $node->body = str_replace($expected_link, $desired_link); 
     break; 
    } 
} 

其中您在其他地方定义所需的链接。不是最佳的解决方案,但如果您尝试使用Javascript更改它,则无法使用非Javascript浏览器(是的,它们仍然存在!)无法绕过强制的期望URL。

+0

正常工作。谢谢,但这仍然看起来像我需要传入href链接,但我期望在Drupal已经生成它们时动态执行此操作。 – 2010-10-18 18:15:20

1

我想在Drupal/PHP这样做会更干净。退房Pathauto模块:http://drupal.org/node/17345

+0

感谢您的链接,但它看起来像这是用于别名,不知道我是否理解如何实现这个以追加href链接。你能再解释一下吗? – 2010-10-18 18:13:27

1

有一个相关主题在这里商量好了: http://drupal.org/node/249864

这不会使用jquery(而不是你会使用PHP覆盖功能),但你可能会得到同样的结果。但是,这是假定您正在使用菜单链接。

+0

这看起来像我可以使用的东西,但它看起来像你需要传递链接和值的函数。 Drupal已经生成了所有的链接,那么我将如何追加到这些链接? – 2010-10-18 18:12:26

+0

它自动通过链接。这里是drupal文档:http://api.drupal。org/api/function/theme_menu_item_link/6 – Ted 2010-10-18 18:18:12

1

我认为你应该考虑探索PURL(http://drupal.org/project/purl)和它的一些工作模块,例如,空间和上下文。

+0

这看起来好像会起作用,但我只看到它用于干净的URL。它是否也适用于标准网址? – 2010-10-18 18:17:42

+0

我这么认为。干净的URL只是在美观上有所不同。 PURL应该使用非干净的标准网址 – 2010-10-18 18:37:26

1

我不建议你使用jQuery来做到这一点。在PHP(Drupal)中做这个服务器端是一个更好的做法。 您可以动态地将链接覆盖到您的预处理页面函数中。

在您的template.php文件:

function *yourtheme*_preprocess_page(&$vars, $hook){ 
    //You can do it for the region that you need 
    $vars['content'] = preg_replace('/<a href="(.*?)"/i', '<a href="$1&attr=1234"', $vars['content']); 
} 

注:

  • 我没有尝试它,它只是一个提示。
  • 它也会将您的参数添加到外部链接。
+0

谢谢,我发现template.php中的函数被添加并与您的代码一起玩,但没有结果。任何其他提示? – 2010-10-18 19:02:27

+0

我刚刚编辑了我的答案,告诉我现在是否可以使用。 – FR6 2010-10-18 19:14:14

+0

sry它仍然不起作用,但我看到你想要做什么,我认为这可能适用于我 – 2010-10-18 19:21:17

相关问题