Eu estava fazendo muitas postagens no drupal.org sobre esse tópico, mas infelizmente no contexto errado.
- O conteúdo Ajaxed não está anexando JS e CSS necessários (fórum)
- O conteúdo Ajaxed não está anexando JS e CSS necessários (problema)
Eu acho que esse não é o problema, então eu tento com uma abordagem diferente, e talvez essa possa ser a solução. Carregar a página PHP inteira e extrair uma determinada div com o ajax não funcionou da maneira certa. Então eu pensei que eu poderia deixar o drupal carregar apenas o conteúdo e injetar com ajax no div. Fiz uma consulta com o hook_preprocess_page e o hook_preprocess_node que está procurando um "ajax = 1" na URL solicitada e depois fornece apenas o conteúdo sem a página inteira. E agora, com a ajuda de certos arquivos tpl.php, em teoria, eu poderia limitar a saída do drupal a apenas $ content. E aqui está o problema. Minha abordagem está funcionando mesmo quando deixo os arquivos tpl.php da maneira original, mas removendo o "$ content" do node-ajax.tpl.php. Com "trabalhando da maneira certa", quero dizer que o drupal não recarrega a página inteira, mas claro que não o conteúdo. Mas não posso explicar isso para mim, porque na variável $ content, pensei, é apenas o html do conteúdo gerado. Então, minha pergunta é: como posso limitar a saída do drupal, apenas para o conteúdo, ou estou fazendo as etapas erradas para que isso funcione. Aqui está o módulo e o arquivo js que estou usando: 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;
});
};
Por favor me ajude com isso. Toda sugestão é apreciada.
fonte
Respostas:
Eu entendi. Isso está funcionando da maneira certa:
Obrigado por toda sua ajuda.
fonte
context
(como Josh Koenig apontou) é um grande não-não. Seu manipulador de eventos será anexado novamente a todos os elementos da página. Com o usocontext
, esse código precisaria ser alterado, pois ocontext
contémdocument
na primeira ligação de evento e o próprio elemento quando o conteúdo será substituído, portanto, simples$('#content-group-inner a',context)
não funcionará.Acho que o seu problema é que sua função de sucesso não terá o contexto variável no escopo, portanto, os comportamentos de anexação estarão trabalhando indefinidamente.
Eu acho que você poderia fazer
fonte
context
(que é o contexto antigo e não a nova marcação) no escopo: isso está errado?