Добрый день всем. Разбираюсь с друпалом, бекэнд - все неплохо, но вот с темизацией запара полнейшая...
Вычленила нужные данные:
<?phpNAME<br>
<?php print render($content['comment_body']['#object']->name); ?><br><br>
PIC<br>
<?php ?><br><br>
DATE<br>
<?php print date('d/m/y', render($content['comment_body']['#object']->created)); ?><br><br>
COMMENT<br>
<?php print render($content['comment_body']['#object']->comment_body['und'][0]['value']); ?><br><br>
LINK ANSWER<br>
<a href="/<?php print $content['links']['comment']['#links']['comment-reply']['href']; ?>">ANSWER</a><br><br>
LINK DELETE<br>
<a href="<?php print render($content['links']['comment']['#links']['comment-delete']['href']); ?>">DELETE</a><br><br>
LINK EDIT<br>
<a href="<?php print render($content['links']['comment']['#links']['comment-edit']['href']); ?>">EDIT</a><br><br><br><br>
?>
Но это ведь не вариант в файлах шаблона использовать эти конструкции? Не могу найти нормальной информации по темизации, совершенно запуталась в хуках (в php на самом малом уровне)
Уважаемые верстальщики, помогите - куда смотреть,чтобы понять суть темизации... Друпал 7 кстати
Комментарии
К тому же при подобном выводе ссылок возникает ситуация, что путь URL строится не от домена, а от текущей страницы. Например, комментарии на странице ex.ru/content/title ссылки комментариев будут вида ex.ru/content/comment/23/344/reply
Понимаю, что темизация не так проста как кажется. Смотрела разные шаблоны - в tpl одно, на выходе совершенно другое. Притом ничего подобнго в template не описано... Откуда что берется - не соображаю
грубо говоря, занимаясь внешним видом дру, мы работаем или с шаблонами tpl.php или с функциями темы.
вам нужно вникнуть как это работает
https://www.drupal.org/docs/7/theming
и изучайте тему bartik
Доков для старта масса:
https://drupalize.me/series/theming-basics-drupal-7-series
http://xandeadx.ru/blog/drupal/405
Много вопросов уберут (или подскажут нужное направление) следующие книги:
больше вменяемых книг на рус. нет.
вся интерестная литература здесь:
https://www.drupal.org/books
листая книги - разберитесь с базовыми понятиями,
дале вам в помощь будет https://drupal.org, https://api.drupal.org/api/drupal,
целая вереница авторских блогов таких как: http://drupalace.ru/, http://xandeadx.ru/ и пр.,
и конечно же этот форум)
Спасибо, буду разбираться! Хотя по натуре легче работать методом "тыка", решая конкретные текущие задачи
Для метода тыка неплох devel и его функция dpm($var).
Но матчасть всё равно учите.
Не совсем понятно, что вас смущает?
Если приведенный код в шаблоне comment.tpl.php - должно работать, меня больше смущает количество брейков ( br ) и ссылки действительно не от корня - drupal_base_path()
<br>
- это просто чтобы отделить данные друг от друга (пробовала, все ли выведется правильно). Работает, но где-то читала, что не рекомендуется так делать, т.к. получается что контент выдергивается из базы дважды, либо я что-то не так поняла.Зачем делать абсолютные ссылки? Относительные ведь работают)) только в этом случае не совсем верно.
1. Не совсем. Вы уже загрузили объект ноды и вытаскиваете из него нужные строчки.
2. Ссылки относительно текущей страницы, а если страница другая будет? При дальнейшей разработке, деплое и поддержке может нехорошо получится.
P.S. Найдите в ядре файл comment.tpl.php, там в комментарии все написано. За что и люблю Друпал - он прекрасно документирован изнутри.
Речь идёт о том, что не факт, что корневая директория вашего сайта будет /
То есть, скорее всего так оно и будет, но вообще друпал может работать в поддиректориях, корректно обрабатывая пути.
Для этого объявлена глобальная переменная
$base_path
.Т.е. в вашем случае
$base_path == '/'
но если друпал будет работать в поддиректории www.site.com/somedir - то$base_path == '/somedir/'
Поэтому - ссылки правильней было бы записать так
<a href="<?php print $base_path . 'my/own/path'; ?>">
это будет работать в любом случае.А ещё правильней - использовать функцию l()
Спасибо! Так и сделала, все работает корректно.
а что конкретно вам необходимо сделать?
Хочется как-то лабильней управлять данными, а в друпале слишком много оберток. Поэтому и возник вопрос - не слишком ли глупо (или неправильно) выдергивать конкретные данные, а не обобщенный стандартный $content.
В общем-то все работает. Делаю для себя сейчас, поэтому может быть и такой нагроможденный шаблон (главное чтобы не вредить производительности).
Друпал - универсальная CMS, и это плата за универсальность. За обертки отвечает функция render, глобально, Вы вольны поступать как вам удобнее, использовать стандартные и писать много CSS или вытаскивать голые данные из рендер массива для использования в кастомном шаблоне. Бесспорно, функции темизации работают быстрее шаблонов, но и требуют более глубоких знаний.
Да, знаний не хватает. И даже нет простого понимания (на пальцах) как что взаимодействует...
Но есть желание))
https://www.drupal.org/node/930760 - из этого ясно, что все изменения делаются через template.php, но у меня тогда только на одних комментариях будут сотни строк кода.
Спасибо, буду думать как быть дальше.
« ВНИМАНИЕ
Предыдущий пример иллюстрировал, каким образом Render API генерирует контент. Но этой возможностью не следует злоупотреблять, выводя на странице каждый HTML-фрагмент в виде отдельного элемента, так как это может привести к проблемам производительности. Применять свойство #type имеет смысл для вывода небольших фрагментов разметки, например заголовков, вместо параметра html tag, требуемого функцией темы theme_html_tag().»
Совершенно запуталась в показаниях - в итоге нет универсальной проверенной схемы. Что-то через хуки изменять, что-то выводить напрямую в шаблон, что-то оставлять как есть и писать тонну стилей...
Иногда думаешь, что лучше пойти варить борщ, чем так заниматься своим проектом))
Принцип такой - в шаблонах .tpl.php вы выводите предварительно подготовленный контент, заворачивая его в требуемые вашей теме контейнеры, и располагая их в нужном вашей теме порядке.
Максимум логики, который можно позволить в темплейте - проверить наличие определенного контента, и убрать ему враппер, если он пуст:
<div class="<?php print $someclasses; ?>">
<?php print render($somevar); ?>
</div>
<?php endif; ?>
В template.php - этот контент можно альтерить, добавлять-убавлять атрибуты html-тегов и т.д.
Но - только в том случае, если это требуется вашей теме.
Например, если вам надо добавить к комментариям какой-нибудь крестик "скрыть", то вам надо вставить дополнительный контейнер
<div class="hide-comment"></div>
и навесить js который будет добавлять юзеру в localStorage id камента, и прибивать их всех при загрузке страницы.
Если вы считаете, что это будет фишка именно этого дизайна сайта - это можно реализовать в template.php + comment.tpl.php
Но если при редизайне вам надо будет тянуть эти изменения в новую тему - тогда это надо делать в модуле.
Какая-то такая разница.