Ajax callback liefert nicht den ganzen Node zurück (Colorbox Code fehlt)
am 10.12.2014 - 09:05 Uhr in
Hallo!
ich habe ein Modul geschrieben welches mir einen Node zurück liefert wenn es vom Ajax aus aufgerufen wird. Ich verwende das um den ganzen Artikel eines News-Beitrags auf der selben Seite wie die Teaser darzustellen. Im views erstelle ich einen Link mit dem Format: /customNews/nojs/[nid]. Das funktioniert prima!
Nun ist die Anforderung, dass beim laden der Seite der Inhalt des neusten Artikels gleich angezeigt werden muss.
Dazu habe ich das Modul erweitert. In der Seite wird beim laden ein script aufgerufen welches den neusten Artikel sucht und zurück gibt.
Das funktioniert auch. NUR: im Aufruf beim Seitenladen wird alles zurückgeben, ausser dem Code für das Colorbox-Plugin !!!
Hier die Code-Kette:
In der Seite habe ich:
<div id="ajaxWrapper"><p> </p><p> </p><p>News links auswählen</p></div>
<?php
drupal_add_js(drupal_get_path('module', 'customNews') .'/cn.js');
?>
Das script ist:
(function($){
jQuery(document).ready(function (){
$.ajax({
url: "/drupal/customNews/newestNews",
dataType: "json",
success: function(data) {
$("#ajaxWrapper").html(data);
},
error: function(data) {
alert("no json");
}
})});
})( jQuery );
Und das Modul ist:
<?php
function customNews_menu() {
$items['customNews/%/%node'] = array(
'access arguments' => array('access content'),
'page callback' => 'customNews_ajax_callback',
'page arguments' => array(1,2),
'type' => MENU_CALLBACK,
);
$items['customNews/newestNews'] = array(
'access arguments' => array('access content'),
'page callback' => 'customNews_loadNewestNews',
'type' => MENU_CALLBACK,
);
return $items;
}
function customNews_ajax_callback($js, $node) {
if ($js == 'nojs') {
drupal_goto('node/' . $node->nid);
}
$build = node_view($node);
$html = render($build);
$commands = array();
$commands[] = ajax_command_html('#ajaxWrapper', $html);
print ajax_render($commands);
exit;
}
function customNews_loadNewestNews(){
$qry = "SELECT nid FROM `node` WHERE type = 'news' order by nid desc limit 0,1";
$res = db_query($qry);
$nodeID = $res->fetchField(0);
$node = node_load($nodeID);
$build = node_view($node);
$html = drupal_render($build);
$commands = array();
$commands[] = ajax_command_html('#ajaxWrapper', $html);
print ajax_render($html);
exit;
}
?>
Ich kann nicht verstehen, warum das Colorbox gedrösel (Klassen bei den Bilder und versteckte div's) nicht zurück gegeben werden.
Was ist denn der Unterschied zwischen den beiden Aufruf-Methoden?
Vielen Dank für eure Hife!
Gruss
Rolf
- Anmelden oder Registrieren um Kommentare zu schreiben
hi rolf schau mal
am 17.12.2014 - 17:57 Uhr
hi rolf
schau mal hier
https://www.drupal.org/node/2046693
was dir noch fehlt ist drupal_render();
vg
stef