Je faisais beaucoup de messages sur drupal.org sur ce sujet, mais malheureusement dans le mauvais contexte.
- Le contenu ajaxé ne joint pas les JS et CSS nécessaires (forum)
- Le contenu ajaxé ne joint pas les JS et CSS nécessaires (problème)
Je pense que ce n'est pas le problème, donc je l'essaie avec une approche différente, et cela pourrait peut-être être la solution. Charger toute la page PHP et extraire un certain div avec ajax n'a pas fonctionné correctement. J'ai donc pensé que je pouvais laisser Drupal charger juste le contenu et l'injecter avec ajax dans le div. J'ai fait une requête avec hook_preprocess_page et hook_preprocess_node qui cherche un "ajax = 1" dans l'URL demandée et ne donne ensuite que le contenu sans la page entière. Et maintenant, avec l'aide de certains fichiers tpl.php, en théorie, je pourrais limiter la sortie de drupal à seulement $ content. Et voici le problème. Mon approche fonctionne même lorsque je laisse les fichiers tpl.php de la manière originale, mais en supprimant le "$ content" de node-ajax.tpl.php. Avec "travailler dans le bon sens", je veux dire que drupal ne recharge pas la page entière, mais bien sûr pas le contenu. Mais je ne peux pas m'expliquer cela, car dans la variable $ content, alors j'ai pensé que ce n'est que le html du contenu généré. Donc ma question est, comment puis-je limiter la sortie de drupal, au contenu uniquement, ou suis-je en train de faire les mauvaises étapes pour que cela fonctionne. Voici le module et le fichier js que j'utilise: 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;
});
};
S'il vous plait, j'ai besoin de votre aide avec ceci. Chaque suggestion est appréciée.
la source
Réponses:
J'ai compris. Cela fonctionne dans le bon sens:
Je vous remercie pour votre aide.
la source
context
(comme l'a souligné Josh Koenig) est un gros non. Votre gestionnaire d'événements sera rattaché à tous les éléments de la page. Avec l'utilisationcontext
, ce code devrait être modifié, car lecontext
contientdocument
sur la première liaison d'événement et l'élément lui-même lorsque le contenu sera remplacé, si simple$('#content-group-inner a',context)
ne fonctionnera pas.Je pense que vos problèmes sont que votre fonction de réussite n'aura pas le contexte variable dans la portée, donc les comportements d'attachement fonctionneront sur undefined.
Je suppose que tu pourrais faire
la source
context
(qui est l'ancien contexte plutôt que le nouveau balisage) dans la portée: est-ce faux?