Как мне тематически комментировать ссылки в Drupal? - PullRequest
0 голосов
/ 24 февраля 2011

Я хочу создать тему для ссылок «Добавить комментарий» и «Комментарии», которые отображаются на узле с включенными комментариями.Я знаю, что есть theme() и theme_links(), которые могут помочь с этим, но я не уверен, как их использовать.Я почти уверен, что хочу theme_links(), так как в этом случае я использую ссылки.Но как мне получить ссылки на комментарии конкретно?Я не хочу, чтобы темы все ссылки, только те, что в комментариях.Если это поможет, моя цель - добавить изображение рядом с каждой из этих ссылок.Кроме того, рядом с «Комментариями» я хочу указать количество опубликованных комментариев.

Чтобы пояснить, я хочу добавить темы, которые появляются на узле Node , а не ссылки наСами комментарии.

Ответы [ 3 ]

3 голосов
/ 28 февраля 2011

Чтобы добавить изображение / значок к ссылке, вы можете использовать простой CSS. Этот CSS добавит значок к ссылке «Добавить комментарий», но то же самое можно сделать и для других ссылок (li.comment_delete, li.comment_edit и т. Д.).

ul.links > li.comment_add > a {
  background: url(PATH TO IMAGE) no-repeat;
  padding-left: 20px;  /* Change to compensate for size of image */
}

Чтобы добавить количество комментариев к узлу, вы можете использовать функцию comment_num_all($node->nid). Например, если вы хотите добавить количество комментариев к ссылке «Добавить комментарий», вы можете добавить скрытый DIV к node.tpl.php (или каждому шаблону типа контента) и jQuery для редактирования текста ссылки:

<div id="num-comments" style="display:none;"><?php print comment_num_all($node->nid); ?></div>

JQuery:

$('ul.links > li.comment_add > a').text('Add new comment (' + $('#num-comments').text() + ')');

Это не самое элегантное решение, но оно работает. Если вы хотите использовать theme_links(), думаю, вам придется создать собственный модуль.

EDIT: Другой вариант - создать собственный модуль. При этом используется не theme_links(), а hook_link_alter(). Это небольшой пример модуля, позволяющий изменить заголовок ссылки «Добавить новый комментарий», добавить значок и указать количество текущих комментариев, прикрепленных к узлу: (Замените каждый экземпляр MYMODULE_NAME на имя, выбранное для модуля)

ШАГ 1. Создайте файл с именем MYMODULE_NAME.info и добавьте:

name = "MYMODULE_NAME"
description = "Change the appearance of links that appear on nodes"
core = 6.x

ШАГ 2. Создайте файл с именем MYMODULE_NAME.module и добавьте:

<?php

  /**
   * Implementation of hook_link_alter
   */
  function MYMODULE_NAME_link_alter(&$links, $node){
    if (!empty($links['comment_add'])) {
      // Get number of comments for node
      $num_comments = db_result(db_query('
        SELECT comment_count 
        FROM {node_comment_statistics} 
        WHERE nid = %d
      ', $node->nid));

      // Set "Add new comment" link text
      $links['comment_add']['title'] = '<img src="PATH TO ICON"/> ADD COMMENT TEXT (' . $num_comments . ')';

      // Allow HTML in the link text
      $links['comment_add']['html'] = TRUE;
    }
  }

ШАГ 3. Поместите эти файлы в папку с именем MYMODULE_NAME, поместите папку в sites / all / modules и включите модуль

РЕДАКТИРОВАТЬ: Чтобы найти ключи массива: в ваш node.tpl.php (или любой другой шаблон узла) вы можете добавить <?php print_r($node->links); ?>. Это покажет вам всю информацию о ссылке, которая будет отображаться в узле, а ключи основного массива - это то, что вы использовали бы в моем модуле. Вы также можете попробовать использовать Firebug / Chrome Dev Tools и т. Д., Чтобы посмотреть на класс элемента списка, содержащего ссылку (т.е. ul.links> li. comment_add ). Я считаю, что когда ссылки создаются, Drupal использует ключ массива в качестве класса для ссылки.

0 голосов
/ 25 февраля 2011

Я использовал эту технику из http://drupal.org/node/352020 для создания ссылок того же типа, вы хотите добавить ловушку предварительной обработки к вашему модулю для доступа к массиву $ links:

function yourmodule_preprocess_comment (&$variables) {
  $comment = $variables['comment'];

  //load links for current comment
  $links = comment_links($comment, FALSE);

  //code to alter the links array

  //reset the links HTML
  $variables['links'] = theme('links', $links);
}
0 голосов
/ 24 февраля 2011

Я думаю, что самое простое - переопределить файл comment.tpl.php в вашей теме. Вы можете скопировать один файл в / themes / garland и использовать его в качестве основы.

...