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).