Я делал много постов на drupal.org на эту тему, но, к сожалению, не в том контексте.
- Ajaxed контент не прикрепляет необходимые JS и CSS (форум)
- Ajaxed-контент не присоединяет необходимые JS и CSS (проблема)
Я думаю, что это не проблема, поэтому я пробую это с другим подходом, и, возможно, это может быть решением. Загрузка всей страницы PHP и извлечение определенного div с помощью ajax не работает должным образом. Поэтому я подумал, что могу позволить drupal загружать только содержимое и вставлять его с помощью ajax в div. Я сделал запрос с hook_preprocess_page и hook_preprocess_node, который ищет «ajax = 1» в запрошенном URL, а затем только выдает контент без всей страницы. И теперь с помощью некоторых файлов tpl.php теоретически я могу ограничить вывод drupal только $ content. И здесь проблема. Мой подход работает, даже когда я оставляю файлы tpl.php оригинальным способом, но удаляя «$ content» из node-ajax.tpl.php. Под «правильной работой» я имею в виду, что 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;
});
};
Пожалуйста, помогите мне с этим. Каждое предложение приветствуется.
источник
Ответы:
Я понял. Это работает правильно:
Спасибо за твою помощь.
источник
context
(как отметил Джош Кениг) - это большое нет-нет. Ваш обработчик событий будет повторно присоединен ко всем элементам на странице. При использованииcontext
этот код необходимо будет изменить, так как онcontext
содержитdocument
первую привязку события и сам элемент, когда содержимое будет заменено, поэтому простой$('#content-group-inner a',context)
способ работать не будет.Я думаю, что ваши проблемы в том, что ваша функция успеха не будет иметь переменный контекст в области видимости, поэтому поведение присоединения будет работать с неопределенным.
Я предполагаю, что вы могли бы сделать
источник
context
(которая является старым контекстом, а не новой разметкой) в области видимости: это неправильно?