Hero

Separar por código los comentarios de los nodos en un bloque

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:

  1. 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;
}
  1. 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.

Recibe consejos y oportunidades de trabajo 100% remotas y en dólares de weKnow Inc.