it-swarm.dev

Nodecomment $ links 변경

주제 아래에 노드가 나열 될 때 Nodecomment 주석에 추가 된 "회신"링크를 변경하려고합니다. 내가 가진 문제는 사용자가 인라인 제출 양식으로 제한되기를 원하지만 Nodecomment가 독립형 응답 페이지에 대한 링크를 추가하고 있다는 것입니다.

Hook_link_alter ()를 사용하여 링크를 확인하려고 시도하는 동안 Nodecomment 주석이 hook_link_alter ()가 실행되지 않는 것처럼 보이는 일반 주석과 매우 유사하게 취급되는 문제에 직면했습니다. 다음은 예입니다.

/**
* 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',
      );
    }
}

테마가 아닌 사이트의 사용자 정의 모듈에 (이상적으로) 패키징 할 수있는 솔루션을 찾고 있습니다.

3
Codeblind

hook_link_alter () 에 대한 문서를 읽고 다음 문장을 찾습니다.

노드 또는 주석의 링크가 렌더링되기 전에 변경을 수행하십시오.

사용중인 후크 구현에 마지막 인수가 없습니다. 문서에서 제공하는 후크의 정의는 hook_link_alter(&$links, $node, $comment = NULL)입니다.

노드의 모든 주석을 렌더링하는 함수 인 comment_render () 의 코드를 보면 hook_link_alter()이 데이터베이스 (물론 hook_link() 이후).

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_commenttheme_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()에 대한 호출로 호출되는 comment_invoke_comment()은 표시되지 않는 주석에 대해 호출되지 않습니다.

작성한 hook_link_alter()의 구현은 특정 주석 만 변경해야하는 경우 적어도 변경중인 주석을 확인해야합니다. 적어도 마지막 매개 변수 ($comment)가 NULL이 아닌지 확인해야합니다. 그럴 경우, 노드 링크를 변경하기 위해 후크가 호출됩니다. 이는 주석 링크를 변경해야하므로 원하는 것이 아닙니다.

2
kiamlaluno

Drupal 주석처럼 렌더링되는 경우 hook_comment () 를 사용하지 않는 이유는 무엇입니까?

시작은 다음과 같습니다.

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