• урок
  • pantey

Создание своего шаблона для Drupal 7 на примере. Темизация ноды. Часть 4.

16.10.2012

Подходим к заключительной части создания нашего шаблона для Drupal 7, а именно темизируем ноду, как мы видим содержимое сайта у нас выводится по умолчанию, а именно выводится всё то, что нам абсолютно не нужно (аватар пользователя создавший материал, дата публикации, ник пользователя, ссылка подробнее, ссылка добавить комментарий, количество просмотров ), хотя нам необходимо выводить анонс материала, его заголовок – который так же является ссылкой на полное содержимое статьи

Приступим, как мы знаем за вывод ноды на сайте отвечает файл

  1. node.tpl.php

Поэтому давайте создадим файл с таким именем в корне нашего шаблона, не забываем про кодировку UTF-8. Теперь скопируем html код нашего контента из свёртсаного шаблона в только что созданный файл, выглядит код вот так

  1. <h2>Добропожаловать на наш сайт!</h2>
  2. <p>Давно выяснено, что при оценке дизайна и композиции читаемый текст мешает сосредоточиться. Lorem Ipsum используют потому, что тот обеспечивает более или менее стандартное заполнение шаблона, а также реальное распределение букв и пробелов в абзацах, которое не получается при простой дубликации "Здесь ваш текст.. Здесь ваш текст.. Здесь ваш текст.." Многие программы электронной вёрстки и редакторы HTML используют Lorem Ipsum в качестве текста по умолчанию, так что поиск по ключевым словам "lorem ipsum" сразу показывает, как много веб-страниц всё ещё дожидаются своего настоящего рождения. За прошедшие годы текст Lorem Ipsum получил много версий. Некоторые версии появились по ошибке, некоторые - намеренно (например, юмористические варианты).</p>

Сохраняем и давайте пересохраним наш шаблон, чистим кеш и посмотрим, что получилось у нас на сайте.

Как мы видим вместо каждой ноды у на теперь выводится именно тот контент, который прописан в

  1. node.tpl.php

Теперь осталось только вывести заголовок ноды и содержимое. Приступим, открываем опять наш файл

  1. node.tpl.php

Для вывода заголовка используем вот такую конструкцию

  1. print $node->title;

Вставим данный код между заголовком H2.

Сохраняем и смотрим, что у нас на сайте

Видим, что заголовки у нас вывелись. Теперь выведем содержимое анонса, используем вот такую конструкцию

  1. print $node->body['und']['0']['summary'];

Вставим данный код в параграф

Сохраняем и смотрим результат на сайте

Как видим, содержимое анонса у нас так же появилось. Не хватает только одного, а именно ссылки на полное содержимое статьи, ссылки в Drupal строятся как

  1. site_name/node/nid

вытащить nid для ноды можно конструкцией

  1. print $node->nid;

Открываем файл

  1. node.tpl.php

И в заголовок анонса впишем ссылку, выглядеть должно вот так

Сохраняем и видим, что ссылка на полное содержимое у нас так же появилась. В данном выводите мы видим, что при клике по ссылке у нас открывается не полное содержимое статьи, а так же подгружается анонс материала, всё дело в том, что мы не указали в каком случае подгружать анонс, а в каком полное содержимое. Давайте этим займёмся:

Для начала нам нужно сделать проверку на анонс, которая пишется как обычное условие

  1. if($teaser):
  2. else:
  3. endif;

И добавим эту конструкцию в файл

  1. node.tpl.php

Сохраняем и видим, что при клике на полное содержимое у нас открывается пустая страница. Теперь необходимо написать вывод заголовка статьи без ссылки и текст полного содержимого.

Вывод полного содержимого статьи пишется как

  1. print $node->body['und']['0']['value'];

И внесём данную конструкцию в

  1. node.tpl.php

а так же выведем заголовок статьи без ссылки, выглядеть должно вот так

Сохраняем и видим, что полное содержимое у нас так же подгружается. На этом темизация ноды можно считать законченой. Возможно вам понадобится выводить что-то ещё в ноду, список переменных для создания

  1. node.tpl.php

можно посмотреть вот здесь.

-->
Узнавай о новых статьях сайта - первым. Просто подпишись на рассылку.

Комментарии (78)

Profile picture for user 1541
andre
25.03.2013

почему просто не создать новый тип содержимого и не переписывать ноду?

Profile picture for user pantey
pantey
25.03.2013

Так мы не ставили себе задачу темизации нового типа материала.

Profile picture for user 1541
andre
25.03.2013

понял, глупость спросил, уже каша в голове.

Profile picture for user 1541
andre
25.03.2013

получается если создать новый тип содержимого, то ему придёться прописывать свою ноду?

Profile picture for user pantey
pantey
26.03.2013

если у вас по дизайну или функционалу новый тип материала будет отличаться от всех остальных - то да, ноду нужно будет переписать для данного типа. Ну а если нет, то вывод подхватится из

node.tpl.php
Profile picture for user 1541
Serg
27.03.2013

А как в друпал 6 правильно темизировать свой тип материала? (хочу сделать свою верстку)
Пытаюсь в шаблоне вывести поле с помощью кода :

print render($content['field_photo'][1]);?>

друпал ругается на неизвестную фун. рендер

Функция render работает только в 7 друпале.
Какая функция вместо render применяется в 6
друпале. Подскажите пожалуйста.

Profile picture for user pantey
pantey
27.03.2013

Да render() - это новая функция в 7ке. Для 6ки как-то

<?php print $node->field_name[0]['view']; ?>

если мне память не изменяет давно с ней не работаю просто.

Profile picture for user 1541
Jeremy
02.04.2013

Такой вопрос. После того, как я создал документ node.tpl.php и поместил туда контент, на сайте этот контент отобразился кракозябрами. Верстаю в Dreamweaver, кодировку выставил, как положено, пробовал по очереди создавать php-документ, html-документ (потом переименовывал), ничего не помогает. В общем, как поставить документу кодировку?

Profile picture for user 1541
Jeremy
02.04.2013

Все, разобрался.

Profile picture for user 1541
Jeremy
03.04.2013

Ну, до сих пор все более или менее понятно. Спасибо автору. Есть вопрос: а каков алгоритм действий, если у нас не одна страничка на сайте, а, к примеру, 10?

Profile picture for user pantey
pantey
03.04.2013

Без разницы сколько у вас страницы. В любом случае каркас подгрузится из page.tpl.php а вывод контента из node.tpl.php

Profile picture for user 1541
zubra
15.04.2013

Может быть немного оффтопом, но такой вопрос. Прошелся по всем 4м частям (только со своей версткой, немного другой шаблон), все ок работает, все супер! Но, стоит разлогинится и войти обратно под админкой уже не получается. Т.е. после того как разлогинишься на страничке не выходит форма авторизации пользователя. Пришлось поколдовать с подстановкой папок с темами. Возможно эти уроки не предполагали конечно этот аспект (про авторизацию), или я что-то не так делаю? В других источниках говорят что нужно организовать дополнительный регион под авторизацию. Не могли бы вы осветить эту тему? Может еще один урок про организацию авторизации? ;) А вообще огромное спасибо за подробные объяснения, уроки отличные!

Profile picture for user pantey
pantey
15.04.2013

Мы не затрагивали темизацию форму входа. Если же у вас всё таки нет формы для входа на сайт, то войти можно вот так:

ваш_сайт/user

а так вам правильно говорят, что необходимо создать дополнительный регион и вывести туда форму входа.

Profile picture for user 1541
zubra
15.04.2013

Видимо я что-то с версткой все-таки перемудрил. Потому как ни "ваш_сайт/user" ни ваш_сайт/user/logon", не прокатывает (.

Profile picture for user pantey
pantey
15.04.2013

вёрстка здесь ни причём. Это базовый url drupal, для входа на сайт. У вас контент в какой регион выводится??? именно в него и должна по этому адресу вылезти форма для авторизации!

Profile picture for user 1541
zubra
15.04.2013

О! Вот оно! Спасибо! Въехал, помогло!

Profile picture for user 1541
Ирина
16.04.2013

Огромное спасибо, автор! на 10000% согласна, что эти 4 урока в миллион раз полезнее и понятнее всех, что мне приходилось читать и на русском и на английском. Долго и упорно не понимала как и с какого боку подступиться к созданию своего собственного шаблона. Множество раз запутывалась во множестве перебираемых готовых шаблонов, пытаясь разобраться. и учитывая мой опыт с версткой сайтов на html мечтой моей был именно такой вот подход, как демонстрирует автор этих чудесных уроков. еще раз благодарю!

Profile picture for user 1541
vanich
20.05.2013

спасибо, действительно правы те кто говорит, что это лучшее руководство для начального дизайна!

у Вас +1 посетитель теперь на сайте )))

Profile picture for user 1541
Согдиана
09.06.2013

У меня такая проблема. Уже неделя не могу найти решение. Может вы сможете посоветовать как ее решить. Я создала новый тип контента, куда добивала field ssilka_perehoda. В это поле, я вставлю сырую ссылку без html, например _http://drupalfly.ru/lesson/mask_generation_drupal_7_4. И хочу чтобы, эта ссылка на сайте автоматически отображалась как "Перейти на сайт". Для этого, я пробовала использовать следующий код в шаблоне для вывода сырой ссылки как активную ссылку:

a href="_field_ssilka_perehoda[0]['view']; ?>" target="_blank">Перейти<_> и следующий вариант:  a href="_" target="_blank">Перейти<_>

Но все равно не получилось вывести активную ссылку перейти..
Прошу вас посоветовать, как можно реализовать такое?

Profile picture for user pantey
pantey
09.06.2013

Для Drupal 7 вывод буде выглядеть вот так

<a href="<?php print $content['field_ssilka_perehoda'];?>">link</a>
Profile picture for user 1541
Согдиана
09.06.2013

Попробовала сделать как вы написали. В результате отображается ссылка link, но при клике на ссылку link, открывается адрес http://adres sayta /Array, а ссылка которую вставила в поле field_ssilka_perehoda через админку друпал 7, все таки не отображает. В чем может быть проблема?

Profile picture for user pantey
pantey
09.06.2013

тогда через render

<a href="<?php print render($content['field_ssilka_perehoda']);?>">link</a>
Profile picture for user 1541
Согдиана
09.06.2013

Через тоже пробовала, но не получилось.

Profile picture for user pantey
pantey
09.06.2013

вы drupal 7 используете? а в настройках отображения полей для тизера у вас стоит вывод?

Profile picture for user 1541
Согдиана
09.06.2013

У меня друпал 7.22. Спасибо, что хотели помочь мне. Что я не делала, все равно не помогало. Но я сегодня нашла решение этому. В этом помог модуль link. Я удалила field для ссылки и воспользовалась возможностями модуля. Добавила новый field с (тип поля Ссылка). Теперь во время добавления в админке появились еще 2 поля: текст для ссылки и поле для полной ссылки.
А в шаблоне поставила следующий код:

?php print render($content['field_ssilka_perehoda']);?>

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

Profile picture for user 1541
Алексей
16.07.2013

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

 
          

title; ?>

Материал был опубликован:

image

body['und']['0']['summary'];?>

Нужно сказать, что хорошее быстродействие вообще является отличительной характеристикой Android-устройств. Построенная на ядре Linux, эта операционная система унаследовала от своего прародителя нетребовательность к аппаратным ресурсам, включая производительность процессора и объем памяти. Неудивительно, что на 2-ядерных мобильных процессорах последнего поколения, установленных в смартфонах GSmart, Android в полной мере раскрывает свои качества, что особенно хорошо заметно на ресурсоемких играх, например, Dungeon Hunter 4. Дополнительному повышению производительности способствует то обстоятельство, что GSmart работают на ядре Android без графической оболочки. Впрочем, недостатка в ней не ощущается, поскольку оригинальное пользовательское меню устройств ничуть не уступает «родному» интерфейсу Android, а кое-где даже удобнее. Более удобна и оригинальная экранная клавиатура GSmart, оптимизированная именно под относительно небольшие по сравнению с планшетами дисплеи смартфонов.

11 Comments Read more »

title; ?>

body['und']['0']['value'];?>

Profile picture for user 1541
Алексей
16.07.2013

Точнее как сделать так, что бы краткое содержание не в ручную добавлять, а просто обрезалось полное содержание и выводилось как краткое? что в ноде нужно еще прописать?

Profile picture for user pantey
pantey
18.07.2013

так это настраивается для конкретного типа материала, в управление отображениями полей. Там для поля BODY в формате вывода можно настроить, что именно вам необходимо, в том числе и обрезанный текст ограниченный количеством символов.

Profile picture for user 1541
Алексей
18.07.2013

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

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

Profile picture for user pantey
pantey
18.07.2013

drupal какой используете ?

Profile picture for user 1541
Алексей
18.07.2013

7. 21 помойму

Profile picture for user pantey
pantey
18.07.2013

Тогда вывод вашего поля должен записываться как

<?php print render($content['body']);?>

и тогда всё у вас будет работать.

Profile picture for user 1541
Сергей
04.08.2013

Доброго времени суток! Хотел спросить, а какой код с переменной выводит изображение. Спасибо за доступные уроки!!!

Profile picture for user pantey
pantey
05.08.2013
<?php print render($content['название_вашего_поля']);?>
Profile picture for user 1541
Сергей
05.08.2013

А для какой-либо отдельной картинки есть такой же волшебный кодик?

Profile picture for user 1541
Сергей
05.08.2013

Вроде как разобрался сам ))

Просто меняем циферку "0" это первая фотка )

Profile picture for user 1541
Тимофей
07.10.2013

Спасибо за замечательные уроки!
Только начинаю работать с Друпалом.
У меня пока один вопрос - как добиться пагинации в самодельном шаблоне? У меня почему-то вместо разбивки контента при достижении конца блока

и переноса их на сл. страницу и отображения номеров страниц в пейджере, все статьи переходят ниже соответствующего блока
. Пейджер соответственно не отображается. Можете поэтапно объяснить алгоритм действий? Или хотя-бы в какую сторону начинать двигаться?
Profile picture for user pantey
pantey
11.10.2013

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

Profile picture for user 1541
gabdrahimov.ru
22.10.2013

все вроде работает только почему-то на главной появляется только заголовок и анонс если поставить. А как сделать чтобы на главной появлялся текст целиком?

Profile picture for user 1541
Snowball
23.10.2013

У меня не показывает ничего строчка : print $node->body['und']['0']['summary'];
print $node->body['und']['0']['value']; показывает
Что это такое??? Почему так? Я как-то неправильно создал материал(контент)

Profile picture for user 1541
gabdrahimov.ru
24.10.2013

а при создании поста "article" ты анонс создавал?

Profile picture for user 1541
Павел8837
05.12.2013

Доброго времени суток!
Спасибо за чудесные уроки, создал свой шаблон за день 
Есть следующий вопрос:
Вывожу материалы на сайте через


Данный код распологается в файле page.tpl.php

В файле node.tpl.php

Вопрос как сделать на одной странице вывод нескольких Basic page? Например материалы О нас и Контакты?
Интересует именно на одной сранице вывод разных node чтобы пользователь мог изменить информацию через
Сайт одностаничник.

Profile picture for user 1541
Виктор
06.01.2014

Здравствуйте!
Не знаю, что скажет уважаемый автор этого блога, но я бы выводил ноды через views в блоки, а уже блоки разпихивал по регионам страницы.

Profile picture for user 1541
Владимир
25.01.2014

Доброго времени суток!
Спасибо за полезные уроки, но вот застрял: мой Drupal 7.22, похоже, в упор не видит файла node.tpl.php, помещенного в корень шаблона modelDrupal. С кодировкой и кэшем все OK.
В чем может быть дело?
Заранее спасибо.

Profile picture for user 1541
Алексей
20.03.2014

подскажите я в корень кидаю node.tpl.php но его вообще не видит этот шаблон. Мне нужно для каждой ноды например node/3 node/4 node/5 сделать свой шаблон подскажите как это реализовать, может название нужно другое где-то читал что в 7 иначе прописывается название файла http://ucozdonyan.tmp.fstest.ru/drupal-7.26/node/4 подскажите что я не так делаю

Profile picture for user pantey
pantey
20.03.2014

кеш сайта почистили?

Profile picture for user 1541
Алексей
20.03.2014

да кеш читил но без изменений и еще как можно изменить адресную строку чтобы в адресе вместо/node/3 писало тот текст

Profile picture for user pantey
pantey
20.03.2014

ну чудес в разработке не бывает... Вы в корне текущей темы его создали? Вы кеш именно сайта чистили (Конфигурация- Производительность - Очистить кеш)?

Profile picture for user 1541
chip
17.10.2014

Спасибо огромное! Очень понятная инструкция для начинающих. Есть от чего оттолкнуться :-)

Profile picture for user 1541
Артур
28.01.2015

А как сделать, чтобы для каждой ноды для администратора выводилась строчка: обзор, редактировать, удалить?