【问题标题】:jQuery/Drupal Append string to all HREF on site (Any page)jQuery/Drupal 将字符串附加到站点上的所有 HREF(任何页面)
【发布时间】:2011-04-27 02:11:57
【问题描述】:

所以我有一个网站,上面有十几个页面,使用 Drupal 作为 CMS。想知道如何在具有动态属性的任何页面上设置/附加所有 href 链接?

所以这里是一个示例 URL:

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

我想像这样附加到 URL:

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

现在我在网站上有一个导航栏,当我将鼠标悬停在链接上时,我看到了 url,但我需要将 &attr=1234 字符串附加到它的末尾。该字符串是动态的,因此它可能会不时更改。

我认为 jQuery 会是一个不错的选择,但 Drupal 是否也有任何功能?

现在我在 Stack 上看到了一些帖子:

问题是我正在学习有关 Drupal 的方法,并且对 jQuery 的经验很少,但两者都变得更好。我看到 jQuery 可以替换 HREF,但看起来他们对 HREF 进行了硬编码,jQuery 可以在页面上找到所有 HREF 并将字符串附加到它吗? Drupal 也有这个功能吗?最好的方法是什么?

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

感谢您的帮助

编辑:

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

感谢您的精彩提示

编辑#2:

好吧,也许我在问令人费解的问题。这就是我需要的以及为什么它还不适合我的原因。

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

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

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

template.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

【问题讨论】:

标签: php jquery drupal href


【解决方案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']);
}

注意:

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

【讨论】:

  • 谢谢,我在 template.php 中找到了添加的函数,并使用您的代码进行了操作,但没有结果。还有其他提示吗?
  • sry 它仍然无法正常工作,但我知道您正在尝试做什么,我认为这可能对我有用
【解决方案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。

【讨论】:

  • 谢谢,但这看起来我仍然需要传递 href 链接,但我希望动态执行此操作,因为 Drupal 已经在生成它们。
【解决方案3】:

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

【讨论】:

  • 这看起来确实可行,但我只看到它用于干净的 URL。它也适用于标准 URL 吗?
  • 我想是的。干净的 URL 只是在外观上有所不同。 PURL 应该适用于非干净即标准 URL
【解决方案4】:

这里有一个关于相关主题的很好的讨论: http://drupal.org/node/249864

这不会使用 jquery(而是您将使用 PHP 覆盖一个函数),但您可以获得相同的结果。但是,这假设您正在使用菜单链接。

【讨论】:

  • 这似乎是我可以使用的东西,但看起来您需要将链接和值传递给函数。 Drupal 已经生成了所有链接,那么我将如何附加到这些链接?
  • 它会自动传递链接。这是 drupal 文档:api.drupal.org/api/function/theme_menu_item_link/6
【解决方案5】:

我认为在 Drupal/PHP 中这样做会更干净。查看 Pathauto 模块:http://drupal.org/node/17345

【讨论】:

  • 感谢您的链接,但看起来这是用于别名,不确定我是否了解如何实现它以附加 href 链接。你能再解释一下吗?
猜你喜欢
  • 1970-01-01
  • 2013-07-18
  • 2022-06-24
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 2016-10-07
  • 2021-01-07
  • 2023-03-16
相关资源
最近更新 更多