Drupal 7: Как извлечь конкретное поле на странице таксономии

Как извлечь конкретное поле для отображения на странице таксономии?

У меня есть собственный тип контента под названием "фильм", и у каждого фильма есть поле "Термин", которое называется "кастинг". Как и ожидалось, я могу нажать на "кастинг" (тег), он открывает мне страницу, где перечислены все фильмы, где бы этот тег ни был связан. Например, если я нажму "Кейт Уинслет" из фильма "Титаник", я попаду на страницу http://localhost/mysite/tags/kate-winslet где перечислены другие фильмы Кейт Уинслет. До этого момента все просто отлично.

Я не хочу, чтобы Drupal включал и отображал поля по умолчанию, такие как Title и Body, в своем собственном формате отображения. Скорее, я хочу, чтобы я мог отобразить фотографию каждого фильма, год выпуска и, конечно, название и урезанную версию тела. Я только хочу настроить содержимое этой страницы, чтобы у меня был контроль над тем, что показывать и где показывать конкретное значение поля.

Вот что я попробовал:

Я клонировал и поставил page.tpl.php в папке шаблонов моей темы. Переименовал его как page--vocabulary--tags.tpl.php, Затем я вынул следующую строку кода (<?php print render($page['content']);?>) от моего page--vocabulary--tags.tpl.php, Намерение состояло в том, чтобы проверить, действительно ли Drupal доступен для переопределенного шаблона. Оно делает!

Но я не смог извлечь такие поля, как field_photo или же field_release_date от $page['content], Чтобы получить представление об определенных переменных и о том, как они размещаются, я использовал следующую строку кода: <pre><?php /*print var_export(get_defined_vars(), TRUE);*/ ?></pre>, Но даже оттуда я не мог извлечь конкретное поле, как я упоминал выше. Поля выглядят где-то внутри $page['content']['system_main']['nodes'], но я не знаю, как добраться до конкретного поля напрямую.

Я также создал template.php со следующей функцией обработчика препроцесса:

<?php
function introduction_preprocess_page(&$vars) {
  if (arg(0) == 'taxonomy' && arg(1) == 'term' && is_numeric(arg(2))) {
    $term = taxonomy_term_load(arg(2));
    $vars['theme_hook_suggestions'][] = 'page__vocabulary__' . $term->vocabulary_machine_name;
    $vars['content'] = $vars['page']['content']['system_main']['nodes'];
  }
}
?>

И то и другое <?php print render($content) ?> а также <?php print render($page['content']) ?> вывести тот же результат, но я хочу что-то вроде <?php render($content['photo_field'])?> что я не смог.

Я прошу прощения за то, что сделал это слишком долго. Я только что вошел в Drupal. Поэтому я хотел убедиться, что то, что я пытаюсь объяснить, точно соответствует тому, чего я хочу достичь.

1 ответ

Решение

Вы, вероятно, пытаетесь длинный путь к этому. Вы можете использовать модуль Views. Он позволяет создавать пользовательские списки, опрашивающие базу данных, но также переопределяет существующие, как в случае с листингом терминологического списка страниц.

После того, как вы установили модуль (если он еще не установлен), особенно модуль Views UI, перейдите в /admin/structure/views и прокрутите вниз, где отключены виды (серые строки). Вы найдете один из них, называемый термином Таксономия, который описывается как "Вид, имитирующий ядро ​​Drupal для обработки таксономии / термина".

Нажмите " Включить" справа от него, а затем перейдите в то же место, где находится ссылка "Включить", нажмите стрелку, чтобы развернуть, и выберите " Изменить". Находясь на странице редактирования представления, вы можете по своему усмотрению манипулировать списком, добавляя / удаляя поля или все, что вы хотите сделать в вашем конкретном случае. Если вы не знакомы с Views, я рекомендую вам узнать об этом, в Интернете есть много связанного контента, и он близок к важному для разработки Drupal.

Кроме того, если вы хотите добавить больше настроек на страницу, вы можете использовать тот же подход с модулем Panels, который позволяет переопределять системные страницы (а не только списки, такие как Views).

Другие вопросы по тегам