Delivery Callback para recuperar html vía ajax con Drupal.

A raíz del post de Capynet en su blog: Drupal 7: Hacer bypass a page.tpl.php programáticamente he recordado que para un proyecto pasado usé la función Delivery Callback para realizar peticiones a la bbdd y recuperar datos en formato html e imprimirlos en la web.

<?php
function mymodule_menu(){
 
$items['node/load/video/ajax/%nid'] = array(
   
'page callback' => '_video_load_get_ajax', //render html
   
'page arguments' => array(4), // arguments for the callback function
   
'type' => MENU_CALLBACK,
   
'access arguments' => array('access content'),
   
'delivery callback' => '_video_load_ajax_callback', //magic goes here 
 
);
  return
$items;
?>



Ahora la función del page callback que solicita el nodo.

<?php

function _video_load_get_ajax($nid) {
 
$node = node_load($nid);
  
$view_mode = variable_get('marinelandtv_views_mode', NULL);
  
watchdog('debug', $view_mode, $variables = array(), WATCHDOG_DEBUG, $link = NULL);
  return
node_view($node, $view_mode);
}
?>


Esta es la función que hace la magia, y devuelve el html a la petición de datos.

<?php
function _video_load_ajax_callback($page_callback_result) {
 
// Only render content
 
print drupal_render($page_callback_result);
 
// Perform end-of-request tasks.
 
drupal_page_footer(); 
}
?>


Y esta es la petición de ajax para solicitar la información. Una vez cargado los datos se pintan en el primer div del elemento con la clase de css view-content:

(function ($) {
  Drupal.behaviors.marineladtv = {
   
    attach: function (context, settings) {
      $('li.video-element a', context).click(function () {
        var rel = $(this).attr("rel");
        jQuery(".ajax-video-target > .view-content div").load("/node/load/video/ajax/"+rel);
      });
    } 
  };
}(jQuery));


Un saludo

Oskar