Работаем над выводом контента. Часть первая.

ср, 02.07.2008 02:18 :: olk

Начинаем приводить вывод нод и комментариев к более приемлемому виду.
Я пока не буду говорить о стилях оформления (точнее о включенных в тему файлах CSS), сейчас мы будем разбираться в структуре вывода контекста, используемых при выводе переменных, и как и где их можно менять и использовать.
Для дальнейшего понимания приводимых исходных кодов, оговорюсь, что свою тему, не мудрствуя лукаво я назвал «hotel». т.е. в каталоге sites/www.hotel-prog.ru/themes создал директорию hotel, в которой разместил следующие файлы:

hotel.info
  1. name = Hotel
  2. description = Div-based multi-column theme
  3. version = 6.1.0.1
  4. core = 6.x
  5. engine = phptemplate
  6. stylesheets[all][]   = layout.css
  7. stylesheets[all][]   = color.css
  8. stylesheets[all][]   = metrics.css
  9. stylesheets[print][]   = print.css
  10. regions[header] =  header
  11. regions[content_top] = content top
  12. regions[content_right] =  content right
  13. regions[content] = content
  14. regions[content_bottom] = content bottom
  15. regions[footer] =  footer
  16. regions[search_box_zone] =  search box zone
  17. regions[login_box_zone] =  login box zone
  18. features[] = name
  19. features[] = node_user_picture
  20. features[] = comment_user_picture
  21. features[] = search
  22. features[] = favicon
  23. features[] = primary_links
  24. features[] = secondary_links



node.tpl.php

  1. <div class="node" id="node-<?php print $node->nid; ?>">
  2.   <?php if($submitted): ?>
  3.   <div class="node-user<?php if ($picture) {print ' picture';}?>">
  4.   <?php if ($picture) print $picture;?>
  5.   <?php if ($hotel_submitted_user) print $hotel_submitted_user;?>
  6.   </div>
  7.   <?php endif; ?>
  8.   <?php if ($page == 0): ?>
  9.       <h2 class="title"><a href="<?php print $node_url; ?>" class="title"><?php print $title;?>/a></h2>
  10.   <?php endif; ?>
  11.   <?php if ($unpublished): ?>
  12.     <div class="unpublished"><?php print t('Unpublished'); ?></div>
  13.   <?php endif; ?>
  14.  
  15.   <?php if ($hotel_submitted_date && $submitted): ?>
  16.     <div class="submitted-node">
  17.       <?php print $hotel_submitted_date; ?>
  18.     </div>
  19.   <?php endif; ?>
  20.   <div class="content">
  21.     <?php print $content.'&nbsp;'.$hotel_node_read_more;} ?>
  22.   </div>
  23.   <?php if ($links): ?>
  24.     <div class="links">
  25.       <?php print $links; ?>
  26.     </div>
  27.   <?php endif; ?>
  28. </div> <!-- /node -->


comment.tpl.php

  1. <div class="comment">
  2.   <?php if($submitted): ?>
  3.   <div class="comment-user<?php if ($picture) {print ' picture';}?>">
  4.   <?php if ($picture) print $picture;?>
  5.   <?php if ($hotel_submitted_user) print $hotel_submitted_user;?>
  6.   </div>
  7.   <?php endif; ?>
  8.  
  9.  
  10.   <?php if ($hotel_submitted_date && $submitted): ?>
  11.   <div class="submitted-comment">
  12.       <?php print $hotel_submitted_date; ?>
  13.   </div>
  14.   <?php endif; ?>
  15.  
  16.   <?php if ($unpublished): ?>
  17.     <div class="unpublished"><?php print t('Unpublished'); ?></div>
  18.   <?php endif; ?>
  19.  
  20.   <div class="content">
  21.     <?php print $content; ?>
  22.   </div>
  23.   <?php if ($links): ?>
  24.     <div class="links">
  25.       <?php print $links; ?>
  26.     </div>
  27.   <?php endif; ?>
  28. </div>


Ну и конечно page.tpl.php и файлики стилей (.css)- содержание которых, нам пока не интересено.

Разберем первый файл hotel.info, он включает в себя как уже известные по 5.х версии параметры

  1. name = Hotel
  2. description = Div-based multi-column theme
  3. version = 6.1.0.1

так и ряд новых
  1. core = 6.x
  2. #- показывает, что тема относится к 6.x версии ядра Drupal-а
  3. stylesheets[all][] = layout.css
  4. # какие файлы (находящиеся в каталоге нашей темы) подключать
  5. regions[header] =  header
  6. #- определяем возможные регионы
  7. #(то что в пятой версии определялось через хук theme_regions() в файле template.php)
  8. features[] = name
  9. # это определение того, какие функции, поддерживает тема (т.е. какие флажки у вас будут доступны #в секции настройки темы (Название сайта, Аватары в сообщениях и т.д.))

Файлик template.php - в нем переопределяем ряд функций, целью которых служит сформировть переменные для вывод контента, так как нам нужно:
1. Переопределение вывода breadcrumb, Вместо ссылки на Нome , подставим наименование нашего сайта
2. Вывод материала (ноды), во первых я хочу вместо стандартного вывода submitted, сделать вывод пользователя под аватаром (если он есть) и под заголовком ноды отдельно вывести время создания ноды. Во вторых для тизера, перенести ссылку читать далее из под ноды в конец тизера.Ну и в третих убрать надпись "Добавить комментарий", если нода не показана полность.
4. Для вывода комментариев заменить вывод submitted по аналогии с выводом ноды.
Как это сделано, можно посмотреть в комментариях в тексте template.php
В итоге мы получаем, переопределенный content для тизера ноды (очищенный от тэгов <p></p>),
три дополнительные переменные:
переменную hotel_node_read_more c ссылкой "Читать далее",
hotel_submitted_user и hotel_submitted_date (которые мы выведем в шаблонах в нужные места).
Убираем ссылки "Читать далее" и "Добавить комментарий" там где они нам не нужны из links.

Ну и файлики node.tpl.php и comment.tpl.php - это просто шаблоны где мы используем наши переменные.

Продолжение следует ... :)

Комментарии

Не подскажите как переопределить переменную $date ? Выводит

  1. <span property="dc:date dc:created" content="2012-07-12T23:35:22+10:00" datatype="xsd:dateTime">Чт, 07/12/2012 - 23:35</span>

а мне нужно вместо тега span поставить тег time. Например :

  1. <time datetime="2012-07-12T23:35">Чт, 12/07/2012 - 23:35</time>

Сделал просто в node.tpl.php

  1. <time id="post-time" datetime="<?php print format_date($created, 'custom', 'Y-m-dTH:i'); ?>">
  2. <?php print format_date($created, 'custom', 'D, d/m/Y H:i'); ?>
  3. </time>
  4.  
  5. Но хочется сделать все через template.php и с отдельной переменной.
  6.  
  7. Да и буква "T" между датой и временем в свойстве datetime создает в коде лишние буквы:
  8. <code>
  9. datetime="2012-07-12EST23:35"

  1. <time pubdate datetime="<?php print format_date($created, 'custom', 'c');?>"><?php print format_date($created, 'custom', 'D, d/m/Y H:i');?></time>

Но в коде почему то pubdate с кавычками появляется, да и в переменную это все запихать так и не получилось :(

Голова кипит уже!!! E У меня друпал 7.

Как мне links Добавить комментарий перенести под комментарии?? Или форму комментариев поставить выше самих комментариев???

Уже нервы не выдерживают - 4-й день не могу сделать. Чуть меняешь местами в коде, тема съезжает.

Добавить комментарий
« Добавить комментарий
» Добавить комментарий