CCK и Views - мощная комбинация. Часть третья: Contemplate и Panels

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

Аватар пользователя maxbinzzz maxbinzzz 24 мая 2007 в 3:17

Итак, в первой части мы увидели, как модуль CCK (Content Construction Kit) можеть быть использован для создания новых типов нод. Во второй части мы говорили использования модуля Views для отображения собстванного контента наряду с остальными нодами. Возможно вы заметили, что в результате наш новый вид материалов выглядит немного уродливо, так что сейчас мы попробуем сделать его красивее с помощью двух модулей: Contemplate и Panels.

Contemplate

Модуль Content Template (a.k.a. ConTemplate) позволяет изменять поля Друпала, используя определяемые администратором стили (templates), в которых используется PHP.

Contemplate позволяет легко изменить дизайн любой ноды, созданной с помощью CCK без необходимости переписывания файла template.php. Для начала нам нужна нода из собственного типа и модуль contemplate. После инсталяции мы можем настроить стиль в administer -> content -> templates. Здесь мы увидим список всех типов материалов с возможностью изменить стиль для нужного типа материалов. Если вы следовали первой части, то у вас есть тип "курсы", одним из полей которого была цена, которую мы более определяли как число, нежели как текст. Давайте изменим отбражение этого поля. Когда вы щелкните create template (создать шаблон), вы увидите два поля с шаблонами, один из которых тизер, а другой - полный вид ноды. Быстрый взгляд на код позволяет объяснить, как изменять ноды.


<div class=”field field-type-text field-field-brief-description”>
  <h3 class=”field-label”>Короткое Описание</h3>
  <div class=”field-items”>
      <div class=”field-item”></div>
  </div>


Этот пример типичного поля CCK, этот шаблон повторяется для каждого созданного вами поля. Совсем несложно понять, что можно изменять, что не следует, что можно изменить класс в тэге div или другом в файле стилей или создать новый. Давайте быстро подправим нашу цену курса:


<div class=”field field-type-number-integer field-field-cost”>
  <h3 class=”field-label”>Цена</h3>
  <div class=”field-items”>
    <?php foreach ((array)$field_cost as $item) { ?>
      <div class=”field-item”>£<?php print $item[’view’] ?> За Человека</div>
    <?php } ?>
  </div>
</div>


Это действительно простое изменение, но оно помогает понять все возможности. Вы можете изменять этот шаблон, как любой другой, используя знания HTML и PHP.

Panels

Этот модуль позволяет вам создавать страницы, которые разделены на некоторые области. Когда обычно есть только четыре зоны, это гибкая система включает в себя разнообразные способы распределения зон.

Panels - прекрасный модуль для создания гибких макетов. Пока рассмотри стандартные макеты, идущие в поставке с модулем. Установите модуль, перейдите в управление->Panels. Нам нужен новый макет (panel), поэтому щелкаем add (добавить). На странице макетов выбираем с двумя колонками. Далее появится страница, которая позволяет добавить содержание на макет. Добавьте title (название) и URL, по которому будет доступен макет (URL нужен обязательно, даже если у вас есть модуль Pathauto).

Следующий шаг - добавление содержания. Это делается очень просто с помощью блока add content (добавить содержание), просто выберите зону, в которой вы хотите доабвить контент, а затем выберите или Block (блок), или Views (вид), или просто номер произвольной ноды и щелкните кнопку add (добавить) рядом с элементом. Вы такде можете добавить свой заголовок для зоны используя поле custom title (произвольный заголовок). Наконец, щелкните save (сохранить), чтобы увидеть вашу новую страницу с двумя колонками.

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

Вывод

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

Комментарии

Аватар пользователя Ilja Ilja 13 января 2008 в 2:17
<div class=”field field-type-number-integer field-field-cost”>
<h3 class=”field-label”>Цена</h3>
<div class=”field-items”>
<?php foreach ((array)$field_cost as $item) { ?>
<div class=”field-item”>£<?php print $item[’view’] ?> За Человека</div>
<?php } ?>
</div>
</div>

а если поле "цена" не заполнено ?
останется только

Цена За человека

Какой код нужно вставить чтобы лейбл не выводился, если поле не заполнено?

сори в php не силен...

Аватар пользователя Xaber Xaber 3 августа 2008 в 2:20

Ilja wrote:

<div class=”field field-type-number-integer field-field-cost”>
<h3 class=”field-label”>Цена</h3>
<div class=”field-items”>
<?php foreach ((array)$field_cost as $item) { ?>
<div class=”field-item”>£<?php print $item[’view’] ?> За Человека</div>
<?php } ?>
</div>
</div>

а если поле "цена" не заполнено ?
останется только

Цена За человека

Какой код нужно вставить чтобы лейбл не выводился, если поле не заполнено?


postadm проверку на пустую строку. Что-то вроде как

<?php if($field_cost [0]['view'] != ""){ ?>
<div class=”field field-type-number-integer field-field-cost”>
<h3 class=”field-label”>Цена</h3>
<div class=”field-items”>
<?php foreach ((array)$field_cost as $item) { ?>
<div class=”field-item”>£<?php print $item[’view’] ?> За Человека</div>
<?php } ?>
</div>
</div>
<?php } ?>
Аватар пользователя villy villy 4 февраля 2008 в 16:07

кто нибудь может расшифровать составные имени класса? т.е. как формируется имя класса?
Описана где нить эта система?
Из логики в принципе понятно, просто иногда напрягает такая длина класса...

Аватар пользователя Iegova Iegova 2 января 2009 в 21:57

Создал шаблон, а материалы всеравно отображаются по-прежнему... Не могу понять, как это должно работать. Когда зашел на по ссылке "создать шаблон", поставил галочку "Применить к выводу teaser" и написал аброкадабру в поле ниже. Как я понимаю, после этого вместо тизеров всех материалов данного типа должна выводиться та самая абракадабра. А на самом деле ничего не изменилось... В чем дело? может я че-нить не так понял...

Все заработало....

Другой вопрос возник... Как сделать чтобы title не выводилось в тизере и автор с датой создания?