Размещение разных переменных одной ноды в разных полях

Главные вкладки

Аватар пользователя Chaplin Chaplin 8 апреля 2008 в 20:21

Доброго времени суток.

Возник вопрос... с помощью CCK были созданы 2 поля для содержания страницы. Дальше содержимое полей необходимо разместить в 2 абсолютно разных блока, находящихся в разных местах сайта (грубо говоря один - в шапку, другой на дно сайта). Пытался это оформить с помощью шаблонов, но получилось лишь отображать в одном из этих блоков необходимое для него содержимое. Панели не подходят (изза требований к верстке). Как грамотно вывести содержание этих полей?

Комментарии

Аватар пользователя Chaplin Chaplin 9 апреля 2008 в 16:44

Да, спасибо, уже видел. Проблема в том, что пробовал всю эту "массу решений", которые там предлагали, и ответа не нашел. Вообще спасибо за ссылку, но я лазаю по drupal.ru и drupal.org уже 5 дней, разумеется я не сразу тупо создал эту тему.

Quote:
создайте view как блок, видимость блоков настраивается.

Нужно чтобы в этом view как блоке отображалось содержание лишь одного поля, притом в зависимости от страницы, на которой находится пользователь. То есть в ноде у нас 2 переменных - $content1 и $content2. В блоке должна выводиться переменная $content1, в другой части $content2. И на каждой странице сайта в этих частях нужно чтобы выводилось содержание ноды, помещенной на данную страницу.

Аватар пользователя KCEOH KCEOH 9 апреля 2008 в 18:11

ну в node.tpl.php можно пихнуть

if ($node-type == "page") {
  print $content1; // $node->cck[0] или че-нить в этом роде.
}
else if ($node-type == "story") {
  print $content2;
}

А вообще var_dump($node) и флаг в руки Wink

//$node->type Знак больше не пишется блин

Аватар пользователя Chaplin Chaplin 10 апреля 2008 в 0:30

Благодарю, разобрался )

Чуть позже опишу как сделал не влезая в код... еси кому то горит, пишите в личку - торопите, просто нуна проект заканчивать... как закончу так все подробно опишу.

Всем участникам дискуссии спасибо.

Аватар пользователя Chaplin Chaplin 10 апреля 2008 в 15:34

Итак, все же расскажу сейчас, раз кому то это нужно ) Решение на самом деле выглядит довольно простым, однако новичок в drupal до этого дойти может не сразу... ощутил на собственной шкуре ) Кроме того не сказал бы что оно является грамотным, уверен что это все можно оформить как то правильнее.

Опишу способ для 2-х нод.

Потребуются следующие модули: CCK, Views и Content Template.

1. Создаем новый тип материала. Назовем его page1. Ничего особо не меняем и сохраняем. Дальше нажимаем изменить -> добавить поле. Пускай имя у него будет "Текст вверху", тип поля - text field. Добавляем, потом заходим во вкладку "управление полями" и запоминаем машинное имя этого поля. Для примера пускай оно называется "field_".
2. Создаем шаблон для этого типа материала. Во вкладке "Текст" ставим галку и убираем печать только что созданного нами поля, а также заменяем вторую переменную на $node->content['body']['#value'] (на самом деле в шаблоне вообще можно оставить только строчку <?php print $node->content['body']['#value'] ?>).
3. Создаем еще один тип материала (например "page2"). Так же средствами CCK создаем еще одно поле ("field__"). Так же правим его шаблон. Теперь у нас 2 типа материала, помещая которые на страницы сайта выводится только основное поле, "Текст вверху" в нодах не печатается.
4. Дальше добавляем материал сайта -> page1. Пишем что хотим видеть наверху, что внизу и адрес страницы, где мы хотим это видеть. Добавляем. Теперь создаем еще один материал - page2. Собственно, тут все то же. Для наглядности пускай страницы называются node/1 и node/2.
5. Создаем регион, в котором должен содержаться контент верхних полей (если он еще не создан). Как это делается описывать не буду, тем с регионами полно.
6. Создаем вид, пускай он называется "page1view". Ставим галку где блок, типы видов - вид списка (list), документов на блок скока хошь, не суть важно пока. Дальше добавляем поле "Text: Текст вверху (field_)" и добавляем фильтр "Документ: Тип", "Одно из" page1. Сохраняем. Теперь создаем вид "page2view" для page2 (то же, кроме field__ и в фильтре page2).
7. Переходим в раздел "Блоки" в меню навигации. В тот регион, где мы хотим видеть содержание верхнего текста ставим оба вида, сохраняем. Дальше тут же в блоках их настраиваем их отображение (настроить -> меняем в самом низу радиобатон на "Показывать только на перечисленных страницах", указываем для page1view node/1, для page2view node/2).
8. Теперь на тех страницах, где это нужно выводится соответствующий вид с верхним полем ноды.

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

Собственно комментарии приветствуются, я разбираюсь в drupal меньше недели, поэтому сильно не кидайтесь камнями )