0

当 javascript 不可用时,我希望 Drupal 中的按钮通过将用户定向到完整节点来优雅降级。

我的 Drupal node-type-tpl.php 头部有这个 jquery javascript 代码;

  Drupal.behaviors.infobutton = function(context) {
  $("button").click(function () {
  $('.more').hide();
  $('.more').eq( $('button').index( $(this) ) ).show();
  });
  }

这是我的 node-type-tpl.php 表格中一行中的按钮;

  <button>More</button>

这是表格中的下一行,在我单击按钮之前被 css 隐藏;

 <tr class="more"><td>some php content</td></tr> 

当前,用户在视图中看到一个修剪过的节点。当他们单击按钮时,此节点会打开以显示更多内容。我想拥有它,以便在关闭 javascript 时将用户定向到完整节点。

知道我该怎么做吗?

4

1 回答 1

0

我认为最简单的方法是使用<a>标签而不是<button>标签,然后调用e.preventDefault()您的函数。您可以像这样创建链接:

<php print l('More', 'node/' . $node->nid, array('attributes' => array('class' => array('morelink'))); ?>

请注意,Drupal 6 和 7 中的类格式不同,请参阅 http://api.drupal.org/api/drupal/includes%21common.inc/function/l/7

然后像这样的javascript:

Drupal.behaviors.morelink = function(context) {
  $("a.morelink").click(function (e) {
    e.preventDefault();
    $('.morelink').hide();
    $('.morelink').eq( $('a.morelink').index( $(this) ) ).show();
  });
}

如果你希望它是一个实际的按钮控件,你应该使用一个实际的表单,因为一个<button>元素本身不能在没有 Javascript 的情况下重定向浏览器。可能看起来像

<form action="<?php print url('node/' . $node->nid); ?>">
  <input type="submit" class="more" value="More" />
</form>

你仍然需要e.preventDefault()这里。不过,我并不是很赞成这种做法,链接方法是更常见的优雅降级方法。

Finally, I'd include your Javascript using drupal_add_js() instead of directly in the node template, so you can take advantage of automatic caching and compression.

于 2012-04-14T07:21:49.300 回答