Темизация комментариев (вопрос от новичка)

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

Аватар пользователя ElenaSerg ElenaSerg 9 апреля 2017 в 11:24

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

<?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 кстати

Комментарии

Аватар пользователя ElenaSerg ElenaSerg 9 апреля 2017 в 11:27

К тому же при подобном выводе ссылок возникает ситуация, что путь URL строится не от домена, а от текущей страницы. Например, комментарии на странице ex.ru/content/title ссылки комментариев будут вида ex.ru/content/comment/23/344/reply

Понимаю, что темизация не так проста как кажется. Смотрела разные шаблоны - в tpl одно, на выходе совершенно другое. Притом ничего подобнго в template не описано... Откуда что берется - не соображаю Sad

Аватар пользователя multpix multpix 9 апреля 2017 в 13:06

грубо говоря, занимаясь внешним видом дру, мы работаем или с шаблонами 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

Много вопросов уберут (или подскажут нужное направление) следующие книги:
d7 book
d7 book

больше вменяемых книг на рус. нет.
вся интерестная литература здесь:
https://www.drupal.org/books

листая книги - разберитесь с базовыми понятиями,
дале вам в помощь будет https://drupal.org, https://api.drupal.org/api/drupal,
целая вереница авторских блогов таких как: http://drupalace.ru/, http://xandeadx.ru/ и пр.,
и конечно же этот форум)

Аватар пользователя lipinart lipinart 9 апреля 2017 в 14:57

Не совсем понятно, что вас смущает?
Если приведенный код в шаблоне comment.tpl.php - должно работать, меня больше смущает количество брейков ( br ) и ссылки действительно не от корня - drupal_base_path()

Аватар пользователя ElenaSerg ElenaSerg 10 апреля 2017 в 15:09

<br> - это просто чтобы отделить данные друг от друга (пробовала, все ли выведется правильно). Работает, но где-то читала, что не рекомендуется так делать, т.к. получается что контент выдергивается из базы дважды, либо я что-то не так поняла.

Зачем делать абсолютные ссылки? Относительные ведь работают)) только в этом случае не совсем верно.

Аватар пользователя lipinart lipinart 10 апреля 2017 в 15:15

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

P.S. Найдите в ядре файл comment.tpl.php, там в комментарии все написано. За что и люблю Друпал - он прекрасно документирован изнутри.

Аватар пользователя Andruxa Andruxa 12 апреля 2017 в 3:52
1

ElenaSerg wrote:
Зачем делать абсолютные ссылки? Относительные ведь работают

Речь идёт о том, что не факт, что корневая директория вашего сайта будет /
То есть, скорее всего так оно и будет, но вообще друпал может работать в поддиректориях, корректно обрабатывая пути.
Для этого объявлена глобальная переменная $base_path.
Т.е. в вашем случае $base_path == '/' но если друпал будет работать в поддиректории www.site.com/somedir - то $base_path == '/somedir/'

Поэтому - ссылки правильней было бы записать так <a href="<?php print $base_path . 'my/own/path'; ?>"> это будет работать в любом случае.
А ещё правильней - использовать функцию l()

Аватар пользователя ElenaSerg ElenaSerg 12 апреля 2017 в 7:39

Хочется как-то лабильней управлять данными, а в друпале слишком много оберток. Поэтому и возник вопрос - не слишком ли глупо (или неправильно) выдергивать конкретные данные, а не обобщенный стандартный $content.

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

Аватар пользователя lipinart lipinart 12 апреля 2017 в 8:11

Друпал - универсальная CMS, и это плата за универсальность. За обертки отвечает функция render, глобально, Вы вольны поступать как вам удобнее, использовать стандартные и писать много CSS или вытаскивать голые данные из рендер массива для использования в кастомном шаблоне. Бесспорно, функции темизации работают быстрее шаблонов, но и требуют более глубоких знаний.

Аватар пользователя ElenaSerg ElenaSerg 12 апреля 2017 в 9:48

Да, знаний не хватает. И даже нет простого понимания (на пальцах) как что взаимодействует...
Но есть желание))

https://www.drupal.org/node/930760 - из этого ясно, что все изменения делаются через template.php, но у меня тогда только на одних комментариях будут сотни строк кода.

Спасибо, буду думать как быть дальше.

Аватар пользователя ElenaSerg ElenaSerg 12 апреля 2017 в 10:09

« ВНИМАНИЕ
Предыдущий пример иллюстрировал, каким образом Render API генерирует контент. Но этой возможностью не следует злоупотреблять, выводя на странице каждый HTML-фрагмент в виде отдельного элемента, так как это может привести к проблемам производительности. Применять свойство #type имеет смысл для вывода небольших фрагментов разметки, например заголовков, вместо параметра html tag, требуемого функцией темы theme_html_tag().»

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

Иногда думаешь, что лучше пойти варить борщ, чем так заниматься своим проектом))

Аватар пользователя Andruxa Andruxa 12 апреля 2017 в 13:17

Принцип такой - в шаблонах .tpl.php вы выводите предварительно подготовленный контент, заворачивая его в требуемые вашей теме контейнеры, и располагая их в нужном вашей теме порядке.
Максимум логики, который можно позволить в темплейте - проверить наличие определенного контента, и убрать ему враппер, если он пуст:

<?php if ($somevar): ?>
  <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
Но если при редизайне вам надо будет тянуть эти изменения в новую тему - тогда это надо делать в модуле.
Какая-то такая разница.