Ссылочные ссылки на отображение узлов - PullRequest
0 голосов
/ 10 октября 2011

У меня есть узел "Ошибки / Запросы", который ссылается на один "Проект".

На странице "узла" проекта я хотел бы отобразить список ошибок / запросов, которые ссылаются на этот проект.Это возможно?

вот как я это сделал:

Это хорошо или плохо?Есть ли способ лучше?(в template.php)

<?php
function digital_preprocess_node(&$vars)
{
    $node = $vars['node'];

    if ($node->type == 'project' ) 
    {
        $bugs_requests_nids = array();
        $query = 'SELECT entity_id FROM field_data_field_project WHERE field_project_nid = :project_nid';
        $result = db_query($query, array(':project_nid' =>$node->nid));
        foreach($result as $row)
        {
            $bugs_requests_nids[] = $row->entity_id;
        }

        $vars['tasks'] = node_load_multiple($bugs_requests_nids);
    }
}

1 Ответ

1 голос
/ 10 октября 2011

Я думаю, вам нужен модуль References (предоставляет справочные поля для узлов и пользователей для Drupal 7)

Извинения Я не прочитал правильно, вы также хотите соответствующий узел эталонный модуль , который делает ссылку на узел двунаправленной (версии модулей D7 приведены в другом ответе).

РЕДАКТИРОВАТЬ для адресации нового кода:

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

Нескольковторостепенные моменты:

  1. Я бы посоветовал переместить ваш код из файла шаблона в пользовательский модуль вместо функции hook_node_load, чтобы эти данные были доступны в течение всего срока службы узлов (чтокак вы можете использовать его в разных контекстах).Однако если вам не нужно повторно использовать эти данные где-либо, кроме файла шаблона, тогда все будет в порядке.
  2. Если вы собираетесь перейти непосредственно к таблицам полей, вам, вероятно, следует использовать field_revision_field_xтаблицы вместо field_data_field_x, чтобы вы могли воспользоваться преимуществами системы редакций и всегда получать самые последние данные.
  3. Поскольку поля могут быть присоединены к нескольким типам сущностей, вам следует убедиться, что вы получаете правильные данные полейдля правильного объекта (вы можете не планировать прикреплять это поле к каким-либо другим узлам / объектам, но в этом случае рекомендуется).

Это слегка отредактированная версия вашего кода с учетомправильные типы полей (не проверено, но должно работать):

function digital_preprocess_node(&$vars) {
  $node = $vars['node'];

  if ($node->type == 'project' ) {
    $bugs_requests_nids = db_select('field_revision_field_project', 'p')
      ->fields('p', array('entity_id'))
      ->condition('entity_type', 'node')
      ->condition('bundle', 'project')
      ->condition('entity_id', $node->nid)
      ->condition('revision_id', $node->vid)
      ->execute()
      ->fetchCol();

    $vars['tasks'] = node_load_multiple($bugs_requests_nids);
  }
}
...