Вопрос от Pro Drupal 7 Book: модуль аннотирования - PullRequest
0 голосов
/ 16 февраля 2011

Так что это, скорее всего, выстрел в темноте, но для тех, кто знает немного о Drupal и даже лучше, внедрил модуль аннотирования из Ch. 2 из Pro Drupal 7 Development

Знаете ли вы, как изменить модуль аннотирования, чтобы все пользователи могли комментировать? Прямо сейчас, только администратор может комментировать, и это представляется как расширение для редактирования.

Конкретный используемый код находится в этом хранилище (в значительной степени прямо из книги): http://github.com/dsharkey/Drupal-Module-Development--Annotate-Module

Кроме того, я не вижу, как вообще должен быть представлен модуль annotate? Я считаю, что это следующие строки PHP (из annotate.admin.inc):

$instance = array(
          'field_name' => 'annotation',
          'entity_type' => 'node',
          'bundle' => $key,
          'label' => t('Annotation'),
          'widget_type' => 'text_textarea_with_summary',
          'settings' => array('display_summary' => TRUE),
          'display' => array(
            'default' => array(
              'type' => 'text_default',
            ),
            'teaser' => array(
              'type' => 'text_summary_or_trimmed',
            ),
        ),
      );
$instance = field_create_instance($instance);

Но я не уверен, что это делает что-то большее, чем создание экземпляра и присоединение к узлу. Почему он показывает, где он делает (как вариант рядом с редактировать)?

Спасибо всем!

1 Ответ

1 голос
/ 16 февраля 2011

Я не уверен, что вы имеете в виду, когда говорите «как вариант рядом с правкой», но загруженный вами код (и перепроверка самой книги, использованный код) не вызовет этого.Фактически, вы должны просто видеть поле под полем тела, когда вы редактируете узел с включенными аннотациями:

Annotations location

Причина, по которой оно появляется только при редактировании существующего узла (а не когда вы создаете новый узел) связан с вашим первым вопросом о том, что он не позволяет всем пользователям аннотировать узел: в реализации hook_node_load() он специально проверяет, совпадает ли пользователь, редактирующий узел, с владельцемузел;если это не так, оно скрывает поле аннотации:

/**
* Implements hook_node_load()
*/
function annotate_node_load($nodes, $types) {
  global $user;
  // Check to see if the person viewing the node is the author. If not then
  // hide the annotation.
  foreach ($nodes as $node) {
    if ($user->uid != $node->uid) {
      unset($node->annotation);
    }
  }
}

Таким образом, единственный человек, который должен когда-либо видеть поле аннотации, является владельцем.Если вы хотите разрешить кому-либо с правами на редактирование аннотировать узел, удалите эту функцию.

Что касается того, чтобы разрешить кому-либо делать аннотации к узлу в качестве отдельной функции для редактирования самого узла, это не то, что было в примереи полностью отделен от используемого кода.Вам придется искать это в других местах и ​​искать примеры, такие как проект Drupal.org Annotate , чтобы найти способы сделать это.По сути, аннотации будут представлять собой отдельные сущности, которые будут ссылаться на узел, почти так же, как работают комментарии.

Но если я буду настолько смелым, вы столкнетесь с большой проблемой с Pro Drupal 7 Development в том смысле, что он не так хорош для разработки, как предыдущие выпуски: он не очень хорошо объясняет вещи, тратит слишком много времени на второстепенные вещи и не хватает времени на действительно важные вещи, вводит действительноплохая практика (включая несколько в примере с аннотациями) и полностью пропускает большие разделы того, что представил Drupal 7.Я бы рекомендовал проверить Drupal 7 Module Development вместо.

...