Febrero 12, 2013
estebanvalerioh
Es común verse en la necesidad de separar los comentarios de un nodo en un bloque, de forma que puedan ser utilizados para agregarse en paneles o en cualquier otro lugar, de manera que nos permita tener una mejor organización de la interfaz que estamos creando.
Esto es posible, realizando los siguientes pasos:
- Creamos un bloque
Con el siguiente código le informaremos a Drupal la existencia de un nuevo bloque.
/**
 * Implements hook_block_info().
 */
function custom_module_block_info() {
  $blocks['bloque_comentarios'] = array(
    'info' => t('Comentarios de Nodo'),
    'cache' => DRUPAL_NO_CACHE,
  );
  return $blocks;
}El siguiente código se ejecutará para obtener el contenido del bloque, el cual serian los comentarios del nodo.
/**
 * Implements hook_block_view().
 */
function custom_module_block_view($delta = '') {
  $block = array();
  switch ($delta) {
    case 'bloque_comentarios':
      // Obtiene el objeto cargado.
      $node = menu_get_object();
      if (isset($node)) {
        // Trabajar en un tipo de nodo específico.
        if ($node->type == 'mi_tipo') {
          // Revisar que los comentarios estén activos para el nodo.
          if ($node->comment != COMMENT_NODE_HIDDEN) {
            // Esta funciÛn trae los comentarios y formulario.
            $node_comments = comment_node_page_additions($node);
          }
          // Título del bloque.
          $block['subject'] = '';
          // Declaración del contenido del bloque.
          $block['content'] = '';
          if (isset($node_comments)) {
            $block['content'] .= drupal_render($node_comments);
          }
        }
      }
      break;
  }
  return $block;
}- Agregar preprocess para el nodo
Los preprocess son funciones que se ejecutan antes de cualquier template y pueden estar o no definidas, comunmente son usadas para crear nuevas variables que se desean usar en el un template específico.
Dentro del template.php de nuestro tema, se debe declararar la función THEME_preprocess_node().
/**
 * Implements preprocess_node().
 */
function THEME_preprocess_node(&$vars) {  
  // Para mi tipo de nodo específico, desactivamos los comentarios
  // del template del nodo.
  if ($vars['type'] == 'mi_tipo') {
    $vars['comment'] = 0;
  }
}Luego de haber hecho esto, ya podemos buscar nuestro bloque en la listado de bloques de sistema, y agregarlo donde lo necesitemos.
