Limitar el largo de los comentarios en Drupal 6 con PHP

Por MaxMendez -- 20 de Junio 2011

En ocasiones lo usuarios abusan de la carencia de un límite de caracteres del modulo comment de Drupal, por lo que surge la necesidad de limitar los caracteres de los comentarios ingresados en el sitio.

A continuación explicare poco a poco como crear un módulo que se integrara con las opciones de comentarios de los tipos de contenido donde podrá ser configurado el limite de caracteres y también incluir la validación que bloquearía los comentarios con mayor tamaño. Para lograr una configuración para cada uno de los tipos de contenido se crea una variable de sistema con el prefijo comment_max_length_ para cada uno de los tipos de contenido.

El primer paso consiste en utilizar el hook "hook_form_alter", para modificar el formulario de comentarios y el formulario de configuración de tipo de contenido.

 

function limit_comments_form_alter(&$form, $form_state, $form_id) {
  // comment form
  if ($form_id == 'comment_form') {
    $node = node_load($form['nid']['#value']); // we load node to get content type
    $form['#validate'] = array('limit_comments_validate');
    $form['comment_filter']['comment']['#description'] = t('Comments are limited to a maximum of %num characters.', array('%num' => variable_get('comment_max_length_'.$node->type, 0)));
  }
  // content type form
  elseif ($form_id == 'node_type_form' && isset($form['identity']['type'])) {
    $form['comment']['comment_max_length'] = array(
      '#type' => 'select',
      '#title' => t('Maximum comment length'),
      '#default_value' => variable_get('comment_max_length_'. $form['#node_type']->type, 1000), // we set variable for each content type
      '#options' => drupal_map_assoc(array(300, 500, 700, 1000, 1500, 2000, 2500, 3000, 5000)),
      '#description' => t('Maximum permitted length of a comment (in characters) for non-administrators.'),
      '#weight' => -1,
    );
  }
}

 

Paso final la función que validara el formulario de comentarios:

 

//Código de ejemplo en lenguaje PHP
function limit_comments_validate($node, &$form) {
  $node = node_load($node['nid']['#value']);
  $max = variable_get('comment_max_length_'.$node->type, 1000);
  if (strlen(trim($form['values']['comment'])) > $max) {
    form_set_error('comment', t('Your comment is too long. Comments are limited to a maximum of %num characters.', array('%num' => $max)));
  }
}

 

Se carga el nodo en una variable, seguidamente se obtiene el limite configurado para el tipo de contenido, se valida el largo del comentario y si se supera se genera el mensaje de error.

Fuente: http://drupal.org/node/102787