Estaba haciendo muchas publicaciones en drupal.org sobre este tema, pero desafortunadamente en el contexto equivocado.
- El contenido Ajaxed no está adjuntando JS y CSS necesarios (foro)
- El contenido Ajaxed no está adjuntando JS y CSS necesarios (problema)
Creo que ese no es el problema, así que lo intento con un enfoque diferente, y tal vez esta podría ser la solución. Cargar toda la página PHP y extraer un cierto div con ajax no funcionó de la manera correcta. Entonces pensé que podía dejar que drupal cargara solo el contenido e inyectarlo con ajax en el div. Hice una consulta con hook_preprocess_page y hook_preprocess_node que está buscando un "ajax = 1" en la URL solicitada y luego solo muestra el contenido sin toda la página. Y ahora, con la ayuda de ciertos archivos tpl.php, en teoría, podría limitar la salida de drupal a solo $ content. Y aquí esta el problema. Mi enfoque funciona incluso cuando dejo los archivos tpl.php de la manera original, pero eliminando el "$ content" de node-ajax.tpl.php. Con "trabajar de la manera correcta", quiero decir que drupal no vuelve a cargar toda la página, pero por supuesto no el contenido. Pero no puedo explicarme eso a mí mismo, porque en la variable $ content, así que pensé, es solo el html del contenido generado. Entonces mi pregunta es, ¿cómo puedo limitar la salida de drupal, solo al contenido, o estoy haciendo los pasos incorrectos para que esto funcione? Aquí está el módulo y el archivo js que estoy 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, ayúdame con esto. Todas las sugerencias son apreciadas.
fuente
Respuestas:
Lo tengo. Esto funciona de la manera correcta:
Gracias por toda tu ayuda.
fuente
context
(como señaló Josh Koenig) es un gran no-no. Su controlador de eventos se volverá a adjuntar a todos los elementos de la página. Con el usocontext
, este código debería cambiarse, ya quecontext
contienedocument
el enlace del primer evento y el elemento en sí mismo cuando se sustituirá el contenido, por lo que lo simple$('#content-group-inner a',context)
no funcionará.Creo que su problema es que su función de éxito no tendrá el contexto variable en el alcance, por lo que los comportamientos de adjunto funcionarán de forma indefinida.
Supongo que podrías hacer
fuente
context
(que es el contexto anterior en lugar del nuevo marcado) en el alcance: ¿está mal?