使用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 加载的内容在 Drupal 中引用了错误的节点 ID
drupal7 - 使用 ajax(jquery) 加载节点