我在Drupal中创建了一个视图,用于检索节点列表。此视图的显示是一个页面,它可以很好地工作。它甚至允许我通过参数过滤其内容。
查看当前的视图配置(点击放大):
我想使用AJAX来使用过滤器(按参数)功能,而无需重新加载页面。我启用了“使用AJAX”选项,但我不确定如何继续。 关于如何做到的任何想法?
顺便说一下,我正在构建自己的主题(如果有任何改变的话)。
更新 基本上,这个视图在浏览section / parameter1,section / parameter2时有效...但是我想用AJAX做同样的事情,而不重新加载页面。我希望现在更清楚
答案 0 :(得分:2)
尽管这可能已经解决了,但是在这个截屏视频中解释了最好的“Drupalistic方式”:
http://seanbuscay.com/ajax-reader-demo
它并不难,可以使用视图或渲染完整节点。
根据截屏视频的作者(我可以确保你没事),这是要记住的步骤:
答案 1 :(得分:1)
//select required div area to refresh
Drupal.behaviors.share_status = {
attach: function (context) {
var initialLoad = false;
// Drupal passes document as context on page load.
if (context == document) {
initialLoad = true;
}
// Make sure we can run context.find().
var ctxt = $(context);
$('.empty-share-status').load( 'form-content',function(context) {
$(".view-share-status").load("share_status/get/ajax"); //call menu action
});
}
}
//get action in module page using MENU_CALLBACK
function share_status_menu() {
$items['share_status/get/ajax'] = array(
'page callback' => 'share_status_get_ajax', // Render HTML
'type' => MENU_CALLBACK,
'access arguments' => array('access content'),
);
return $items;
}
// render HTML content
function share_status_get_ajax() {
$block = module_invoke('views','block_view','share_status-block_1');
print render($block);
}
答案 2 :(得分:1)
这是我最终使用javascript加载带有ajax的视图块的javascript,并从我在页面上创建的链接列表的href值传入上下文过滤器。希望这有助于某人!
function getInfo(args) {
$.ajax({
url: Drupal.settings.basePath + 'views/ajax',
type: 'post',
data: {
view_name: 'agent_lookup',
view_display_id: 'agent_lookup_block', //your display id
view_args: args,
},
dataType: 'json',
success: function (response) {
if (response[1] !== undefined) {
var viewHtml = response[1].data;
$('#ajax-target').html(viewHtml);
//Drupal.attachBehaviors(); //check if you need this.
}
},
error: function(data) {
alert('An error occured!');
}
});
}
$('.ajax_button').once().click(function(e){
e.preventDefault();
var the_id = $(this).attr('href');
noSlashes = the_id.replace(/\//g,'');
getInfo(noSlashes);
});
答案 3 :(得分:0)
我不清楚“使用过滤器(通过参数)”是什么意思。当选择标准在给定页面上更改时,AJAX视图会更新结果。您似乎没有可能更改的选择条件,因此无法使用AJAX进行更新。可能更改的选择条件包括页面(您有分页)和公开的过滤器(您的过滤器未公开)。它不包含参数(您有),因为它们不会在单个页面上更改,而是在页面之间更改。
答案 4 :(得分:0)
好的,我找到了一个快速的解决方案。您可以构建一个呈现视图的php文件,然后使用ajax.load将其打印在div中。
ajax电话:
$('#output_div').load('path/ajax_all_projects.php?type=art');
ajax文件(ajax_all_projects.php):
<?php
include_once './includes/bootstrap.inc';
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
$get_param = $_GET["type"];
$arguments = Array();
if(!empty($get_param)){
array_push($arguments, $get_param);
}
$view = views_get_view('all_projects');
print $view->execute_display('Block', $arguments);
?>
我认为这就是诀窍。我希望它可以帮助别人。 :)