• урок
  • 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 pantey
pantey
28.01.2015
Profile picture for user 1541
Денис
23.03.2015

Подскажите в каком шаблоне темизировать добавление ноды пользователем? Например я хочу сделать заявку (node/add/zayavki), пользователям разрешено добавлять этот тип ноды, и хотелось бы темизировать это добавление.

Profile picture for user 1541
Иван
04.04.2015

Огромное спасибо

Profile picture for user 1541
Иван
18.04.2015

Может кто-то уже такое задавал, но вопрос невероятно важный и случай просто абсурдный. Вот ваш код:

<a href="<?php print $node->nid; ?>">

Почему тег "a" закрывается в месте $node->, а именно в первом попавшемся обработчику ">". У меня не получается сформировать ссылку эту вообщем

Profile picture for user pantey
pantey
18.04.2015
Profile picture for user 1541
Иван
19.04.2015

И тем не менее как быть? Мне даже notepade++ выделяет внутри php-кода закрывающую > , когда я навожу на a-тег. А php я знаю совсем не плохо

Profile picture for user pantey
pantey
19.04.2015

судя по всему вы его не знаете совсем. Что у вас не получается, известно только вам и что вызывает трудности - не совсем понятно. Здесь всего лишь, для атрибута href выводится nid ноды, вывод производится через обращение к объекту $node. Скидывайте весь код целиком иначе вы ничего не добьетесь - экстрасенсов нет.

Profile picture for user 1541
Иван
19.04.2015

О, а такой тон мне больше нравится). Когда я в первом случае выложил код то я кое-что пропустил, вот полный вариант

На следующем фото видно где якобы закрывается тег
http://f-picture.net/lfp/s018.radikal.ru/i526/1504/75/0b4a7808e6f3.png/htm
То есть при первом же увиденном символе >, хоть он и внутри php-кода, поэтому не получается ссылка

Profile picture for user pantey
pantey
19.04.2015

в данном коде все правильно, единственное что -не хватает названия ссылки

<a href="/node/<?php echo $node->nid;?>">ваша ссылка</a>
Profile picture for user 1541
Иван
20.04.2015

Я специально пропустил текст внутри ссылки. Вы никак не поймете что мне надо. Извини что я уже задолбал тебя, но тот код, который ты выложил - он не привальный!!!!)). Обработчик закрывает открытый тег "". Я в предыдущем сообщении на фото показал это.

Profile picture for user 1541
Иван
20.04.2015

И вообще на этом сайте немножко не удобно отправлять сообщения. Пишешь одно, а оно потом теряет какую-то часть написанного(

Profile picture for user pantey
pantey
20.04.2015

мда, учись вообщем. То что тебе редактор, там что-то подсвечивает - не означает, что это не правильно. Я тебе еще раз говорю, учи PHP - там код абсолютно правильный. Используй нормальный редактор кода, например Sublime Text.
Что бы твой код не терялся, в форме комментариев есть специальные кнопки для вставки какого либо кода (PHP, JS, CSS, HTML) - но тебе видимо они не о чем не говорят.

Profile picture for user 1541
Иван
20.04.2015

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

Profile picture for user 1541
Golkiper89
28.08.2015

Здравствуйте, после того, как был создан файл node.tpl.php, и прописано

<?php print $node->body['und']['0']['summary']; ?>

- содержимое анонса не выводится, а в админ-панели выводится ошибка: "Notice: Undefined index: und в функции include() (строка 2 в файле /var/www/u0097845/data/www/gumanitarka.com/sites/all/themes/gumanitarka/node.tpl.php)."
Подскажите, как с этим бороться, что не так? Дело в том, что у меня в место правой колонки webform обратной связи и соответственно выводится только заголовок, а самой формы нет.

Profile picture for user pantey
pantey
28.08.2015

так у вас же написано, что не найден индекс UND, скорее всего вы не вывели поле BODY для полного содержимого. Проверьте в панели отображения полями.

Profile picture for user 1541
Golkiper89
28.08.2015

А вот в чем и интересная ситуация, я не могу найти «управление полями» , структура - тип содержимого у меня "Имя" и только возможность изменить или удалить. а ссылки на управление полями нет. либо я не могу ее отыскать. Буду признателен ответу.

Profile picture for user pantey
pantey
28.08.2015

находится в табах вверху страницы.

Profile picture for user 1541
Golkiper89
28.08.2015

Но у меня их вверху нет вроде как

Profile picture for user 1541
Golkiper89
28.08.2015

Не могу их вверху увидеть. нет никаких табов

Profile picture for user pantey
pantey
28.08.2015

нажмите на изменить для любого типа материала и увидите...

Profile picture for user 1541
Golkiper89
28.08.2015

?

Profile picture for user 1541
Golkiper89
28.08.2015

Сверху так же ничего нет. Слева лишь: Настройки формы, параметры публикации, Настройки отображения, Параметры меню и Webform

Profile picture for user pantey
pantey
28.08.2015

Проверьте включен ли у вас модуль Field UI.

Profile picture for user 1541
Golkiper89
28.08.2015

Да, действительно, данный модуль был выключен. Все отобразилось. Огромное спасибо!

Profile picture for user 1541
junothan
08.10.2015

у меня содержимое ноды не прокручивается

Profile picture for user 1541
Гость
06.05.2016

if (!empty($_GET["name"])&&!empty($_GET["age"]))
{ echo " Получены новые вводные: имя - ".$_GET["name"].", возраст - ".$_GET["age"]." лет";}
else { echo "Переменные не дошли. Проверьте все еще раз."; }

?>

Profile picture for user 1541
Михаил
14.07.2017

Прочитал все комментарии, может уже какие либо изменения произошли, но для 2017 года не работает, либо я кривой)) создал ноду в корне темы нашей (т е где и page.tpl.php, style.css, скриншот и  т д), и написал там все как указано у тебя, но увы, нефига не отобразилось) очищал и кеши и опенсервер перезагружал и че только не делал)) подскажи в чем может быть проблема?)

Profile picture for user pantey
pantey
18.07.2017

проверь стоят ли у тебя именно 2 тире(--), в названии файла

node--page.tpl.php