it-swarm-es.com

Modificación de enlaces de $ de comentario de nodo

Estoy tratando de modificar los enlaces de "respuesta" agregados a los comentarios de Nodecomment cuando los nodos se enumeran debajo del tema. El problema que tengo es que quiero que los usuarios estén restringidos al formulario de envío en línea, pero Nodecomment está agregando enlaces a la página de respuesta independiente.

Mientras intentaba anular los enlaces usando hook_link_alter (), encontré un problema con los comentarios de Nodecomment que se tratan de manera muy similar a los comentarios regulares en el sentido de que hook_link_alter () no parece ejecutarse en ellos. Aquí hay un ejemplo:

/**
* Alter module links. 
*
*/
function mymodule_link_alter(&$links, $node) {

    // This is an example of altering links that works as expected
    if (isset($links['comment_add']) && node_access('create', $node)) {
      $links['comment_reply'] = array(
        'title' => t('reply'),
        'title' => t('Link altered'),
        'href' => 'http://example.com',
      );
    }

    // This is an example of altering nodecomment links failing.
    // When rendering a list of topic replies, the comment_reply link
    // will not be altered.
    if (isset($links['comment_reply']) && node_access('create', $node)) {
      $links['comment_reply'] = array(
        'title' => t('reply'),
        'title' => t('Link altered'),
        'href' => 'http://example.com',
      );
    }
}

Estoy buscando soluciones que puedan (idealmente) empaquetarse en el módulo personalizado del sitio en lugar de en el tema.

3
Codeblind

Leyendo la documentación para hook_link_alter () encuentro la siguiente oración.

Realice modificaciones antes de que se representen los enlaces de un nodo o comentario.

A la implementación del gancho que está utilizando le falta el último argumento: la definición del gancho dada por la documentación es hook_link_alter(&$links, $node, $comment = NULL).

Mirando el código de comment_render () , que es la función que procesa todos los comentarios de un nodo, puede notar que hook_link_alter() se invoca justo después de que se cargan los datos desde el database (y después de hook_link(), por supuesto).

if ($comment = db_fetch_object($result)) {
  $comment->name = $comment->uid ? $comment->registered_name : $comment->name;
  $links = module_invoke_all('link', 'comment', $comment, 1);
  drupal_alter('link', $links, $node, $comment);

  $output .= theme('comment_view', $comment, $node, $links);
} 

hook_comment Se invoca desde theme_comment_view () .

if ($visible) {
  $comment->comment = check_markup($comment->comment, $comment->format, FALSE);

  // Comment API hook
  comment_invoke_comment($comment, 'view');

  $output .= theme('comment', $comment, $node, $links);
}
else {
  $output .= theme('comment_folded', $comment);
}

hook_comment(), que se invoca con una llamada a comment_invoke_comment(), no se invoca para comentarios que no son visibles.

La implementación de hook_link_alter() que creó debería al menos verificar qué comentarios está alterando, si se supone que debe alterar solo comentarios específicos. Al menos, debe verificar que el último parámetro ($comment) No sea NULL; si eso sucede, el gancho se invoca para alterar los enlaces de nodo, que no es lo que desea, ya que necesita modificar los enlaces de comentarios.

2
kiamlaluno

Si se representan como Drupal comentarios, ¿por qué no usas hook_comment () ?

Aquí hay un comienzo:

function mymodule_comment(&$a1, $op) {
  if ($op === 'view') {
    // $a1 is the comment object
  }
}
0
Alex Weber