使用 nid 参数在 Drupal 视图中为每个节点加载 Ajax
Posted
技术标签:
【中文标题】使用 nid 参数在 Drupal 视图中为每个节点加载 Ajax【英文标题】:Loading Ajax for each node in Drupal view with nid argument 【发布时间】:2012-04-18 16:10:30 【问题描述】:我对 Drupal 中的预告片有所了解。每个预告片都有一个 click() 处理程序,该处理程序应该将其节点 ID 作为参数发送以通过 ajax 加载视图。我尝试了 2 种不同的 jquery 方法,但没有运气。
第一个示例仅发送视图中最后一个节点的 nid。这样无论我点击什么预告片,都只会发送最后一个预告片的 nid。
Drupal.behaviors.ajaxview = function(context)
$(".ajaxclick").click(function()
$(".container").load(Drupal.settings.basePath + "myajax/" + <?php echo $node->nid;?>;);
);
在第二种方法中,单击“ajaxview”类的按钮将发送正确的nid,但不是仅将单击的按钮发送到其相应的div,而是为每个按钮发送一个带有类的nid将“ajaxview”放入带有“容器”类的每个 div 中。所以我最终得到了从每个预告片生成的每个视图的内容到每个 div 中。太多了!
$(document).ready(function()
$(".ajaxclick").click(function()
$(".container").load(Drupal.settings.basePath + "myajax/" + <?php echo $node->nid; ?>);
);
);
这是按钮;
<button class="ajaxclick">click</button>
还有 div:
<div class="container"></div>
知道如何让每次点击都将点击的预告片的 nid 作为参数发送并仅加载该视图吗?
【问题讨论】:
【参考方案1】:您的代码是 javascript。 你不能使用:
<?php echo $node->nid; ?>
你必须使用 jQuery 方法来获得你想要的 nid。 例如,如果您在隐藏文件中有 nid,例如:
<input type="hidden" id="ID" value="100" />
你可以使用下面的jQuery来获取nid:
var nid = $("#ID").val();
【讨论】:
奇怪的是,这与<?php echo $node->nid; ?>
的作用相同,即仅发送最后一个 nid 作为参数。【参考方案2】:
事实证明,我能够使用 Ionut.A 建议的修订版使其正常工作;
Drupal.behaviors.ajaxview = function(context)
$(".ajaxclick").click(function()
var nid = $(".mynid").eq($('.ajaxclick').index( $(this) )).val();
$('.container').eq($('.ajaxclick').index( $(this) )).load(Drupal.settings.basePath + 'myajax/' + nid);
return false;
);
对于html;
<input type="hidden" class="mynid" value=<?php echo $node->nid;?> />
我必须使用 class 而不是 id,因为 id 只会从第一个节点返回 id。
【讨论】:
以上是关于使用 nid 参数在 Drupal 视图中为每个节点加载 Ajax的主要内容,如果未能解决你的问题,请参考以下文章
链接到 Drupal 视图中分组字段中的节点始终显示 /node/nid
Drupal 视图 - 使用第一个参数来计算第二个上下文过滤器参数