Вопрос из Pro Drupal 7 Book: модуль Annotate

Так что это, вероятно, выстрел в темноту, но для тех, кто немного знаком с Drupal и еще лучше реализовал модуль аннотации из гл. 2 из Профессиональная разработка Drupal 7

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

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

Кроме того, я действительно не понимаю, как модуль аннотации вообще должен быть представлен? Я считаю, что это следующие строки 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);

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

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


person djs22    schedule 16.02.2011    source источник


Ответы (1)


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

Расположение аннотаций

Причина, по которой он появляется только при редактировании существующего узла (а не при создании нового узла), связана с вашим первым вопросом о том, что он не позволяет всем пользователям аннотировать узел: в реализации 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.

person Community    schedule 16.02.2011
comment
Потрясающий ответ Марк. Большое спасибо! Обязательно посмотрю рекомендованную вами книгу. В дополнение к тому, что вы сказали о Pro Drupal 7, он также изобилует ошибками в коде, который он предоставляет. - person djs22; 16.02.2011