使用ajax将drupal视图加载到右边距

Posted

技术标签:

【中文标题】使用ajax将drupal视图加载到右边距【英文标题】:Load drupal view into right margin with ajax 【发布时间】:2012-03-26 22:47:12 【问题描述】:

我正在使用 Drupal 6,并在 layout.css 中创建了 2 个相等的列 在左栏中,我有一个包含节点列表的视图。 每个节点都有一个附加视图及其子节点列表(使用视图附加和节点引用参数)。

我希望能够单击每个左列节点上的链接,并使用 ajax 在右列中显示它的子视图。

我尝试将 jquery/javascript 放在 node-xxx.tpl.php 的头部,通过名为 ajaxview.php 的外部页面调用 viewsattach,即:

<script type="text/javascript">
Drupal.behaviors.ajaxview = function(context) 
$("#ajaxclick").click(function()
        $("#container").load("http://path/to/ajaxview.php 
        );

</script>

<a id="ajaxclick" href= "#">Click me</a>
<div id="container"></div>

在 ajaxview.php 中:

<div id="rightcolumn"><?php print $node->content[Comments_node_content_1]['#value'];?></div>

我只得到一个空白页...

当单击左列中的节点时,如何使子视图显示在右列中?

有没有更好的办法?

【问题讨论】:

【参考方案1】:

您的 ajaxview.php 文件与您在 node-xxx.tpl.php 中的代码不在同一上下文中,这意味着它无权访问 $node 变量。你的 ajaxview.php 文件作为一个新脚本执行,如果你真的将它命名为 ajaxview.php,它可能在 Drupal 之外。

您应该考虑在您的菜单挂钩中创建一个路径,并在您的 node-xxx.tpl.php 中使用 ajax 调用该路径。

<?php

function test_menu() 
  $items = array();

  $items['myajax'] = array(
    'title' => 'My Ajax',
    'page callback' => 'test_myajax',
    'description' => 'Test',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );

  return $items;



function test_myajax($nid) 
  $node = node_load($nid);
  print '<div id="rightcolumn">';
  print $node->content['Comments_node_content_1']['#value'];
  print '</div>';
  exit();

此代码将创建一个新路径“myajax”(您应该将其重命名为对您更有意义的名称),应该使用如下节点 id 调用它:

http://yoursite/myajax/999

其中 999 是节点 ID。

这意味着在调用 ajax 的代码中,您应该传递正在查看的当前节点的 nid。有不同的方法可以做到这一点,具体取决于您的上下文。

这是一个适用于上述代码的示例 javascript(我在本地测试过)。

<script type="text/javascript">
Drupal.behaviors.ajaxview = function(context) 
    $("#ajaxclick").click(function()
        $("#container-test").load(Drupal.settings.basePath + "myajax/" + 999); 
    );

</script>

<a id="ajaxclick" href= "#">Click me</a>
<div id="container-test"></div>

【讨论】:

感谢 Roychri,这是非常接近工作!但不知何故,参数没有被传递给 print $node->content['Comments_node_content_1']['#value'];所以我尝试嵌入默认视图,即; 和模块/功能部分将 999 更改为节点 ID? 对格式缺失表示歉意。我是新来的,只是想了解这 5 分钟的编辑评论限制.. 我得到了 javascript 工作的 nodeid : var sStr = nid ?>; $("#newcontent").load(Drupal.settings.basePath + "myajax/" + sStr);现在我只需要弄清楚如何将 nodeid 传递给函数。 得到传递给函数的节点ID。 $myArgs = $nid;希望我能弄清楚如何在***上获得换行符!留 2 个空格对我不起作用... 唉,我成功地将参数传递给函数中的嵌入式视图是短暂的。在仅查看节点时单击链接有效,当节点是视图的一部分时单击链接无效。回到绘图板...

以上是关于使用ajax将drupal视图加载到右边距的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 flexbox 均匀地显示内容卡,包括边距边 [重复]

ajax 页面加载视图页面的 ajax 寻呼机由 ajax

Ajax 加载的内容在 Drupal 中引用了错误的节点 ID

drupal7 - 使用 ajax(jquery) 加载节点

如何将约束添加到相对于父视图边距的按钮,使其显示为距上边距 30 和距右边距 30

使用ajax将参数发送到drupal视图