我在drupal.org上做了很多有关该主题的文章,但不幸的是,背景不正确。
我认为这不是问题,所以我尝试使用另一种方法,也许这可能是解决方案。加载整个PHP页面并使用ajax提取某个div并不正确。所以我想,我可以让drupal仅加载内容并将其与ajax一起注入div。我用hook_preprocess_page和hook_preprocess_node进行了查询,该查询在请求的URL中查找“ ajax = 1”,然后只给出内容而不显示整个页面。现在在理论上,借助于某些tpl.php文件,我可以将drupal的输出限制为仅$ content。这就是问题所在。即使我以原始方式保留tpl.php文件,但从node-ajax.tpl.php中删除“ $ content”时,我的方法仍然有效。“以正确的方式工作”是指drupal不会重新加载整个页面,但当然不是内容。但是我无法向我自己解释,因为$ content变量中的原因,所以我认为,这只是生成内容的html。所以我的问题是,我如何将drupal的输出限制为仅包含内容,或者我是否执行了错误的步骤以使其正常工作。这是我正在使用的模块和js文件:my_ajax.module:
<?php
function my_ajax_init()
{
drupal_add_js(drupal_get_path('module', 'my_ajax') . '/my_ajax.js');
}
function my_ajax_preprocess_page(&$vars, $hook)
{
if (isset($_GET['ajax']) && $_GET['ajax'] == 1)
{
$vars['template_file'] = 'page-ajax';
}
}
function my_ajax_preprocess_node(&$vars, $hook)
{
if (isset($_GET['ajax']) && $_GET['ajax'] == 1)
{
$vars['template_file'] = 'node-ajax';
}
}
my_ajax.js:
Drupal.behaviors.my_ajax = function (context) {
$('#content-group-inner .node a').live('click', function (e) {
var url = $(this).attr('href');
//$('#content-region-inner').slideUp('slow');
$('#content-region-inner').empty().html('<img src="ajax-loader.gif" style="margin-left:50%;"/>');
xhr = $.ajax({
data: 'ajax=1',
type: 'GET',
url: url,
success: function (data) {
$('#content-region-inner').html(data);
Drupal.attachBehaviors(context);
}
});
return false;
});
};
请帮我解决一下这个。每个建议都表示赞赏。
2
只是一个小注释D7在路径中使用/ nojs和/ ajax来区分ajax链接和标准链接。以后可能会为您节省一些麻烦。
—
杰里米·法兰西