Закрыть
Загрузка данных
Логин:   Пароль:      
Регистрация   Забыли пароль?

Важные объявления:

Призовой фонд bigstreet




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

Фонд помощи разработчикам bigstreet

+ 500 рублей

15 горячих:


Сообщество

Оформление BigStreet

Если вы хотите поделиться собственным дизайном Большой Улицы, сделайте это здесь.
И вам реклама и нам пригодится =)

Публикации   Пользователи   RSS
Закрыть
Загрузить:
Указать:
Выравнивание:    Копирайт:
Альт
Цвет шрифта Закрыть
Белый Розовый Серебряный Оливковый Красно-коричневый Лимонный Зеленый Темно-синий Желтый Красный Серый Фиолетовый Водный Зеленовато-голубой Голубой
Выделить маркером Закрыть
Розовый Серебряный Оливковый Красно-коричневый Лимонный Зеленый Темно-синий Желтый Красный Серый Фиолетовый Водный Зеленовато-голубой Голубой Черный
Смайлики ;) Закрыть
Улыбка Нахмуриться Подмигивание Язык Смех Смущение Нерешительность Сюрприз Поцелуй Вопль Класс Денежки Ошибся Невинность Плач Рот на замке

Шаблоны в BigStreet CMS

Как сверстать под BigStreet. Пособие для верстальщиков.



В CMS используется система шаблонов Smarty, выбранная создателем движка redhummer`ом. Если имеется опыт работы с шаблонизаторами, то проблем со Smarty возникнуть не должно. Более подробное описание принципов работы, синтаксиса Smarty и шаблонизаторов в целом здесь:
- в Википедии
- Официальное руководство

Вступление



MVC-архитектура, используемая в движке(в движке нет модели, но это неважно в контексте), подразумевает отделение логики от представления. То есть программист, имея минимальные знания о вёрстке, делает своё дело, и в итоге: сначала выполняется основная логика приложения (Controller), предоставляя данные для последующего их оформления верстальщиком в "представлении" (View).
Но полного разделения не происходит (причины - не важны в данной статье), и верстальщику нужно знать, что такое операторы условия (IF - ELSEIF - ELSE, или краткая запись УСЛОВИЕ : TRUE ? FALSE), циклы (WHILE-DO, FOR, FOREACH), и понимать, зачем они нужны.
Вот пример - вывод списка тегов:
  1. <div class="tags_cloud">
  2.  
  3.         {foreach item=tag name=tags_cloud from=$aTagsCloud}
  4.  
  5.                 <a class="tag" style="white-space: nowrap; color: {$tag->getColor()}; font-size: {$tag->getSize()}" href="{$oRouter->getPathWeb()}/blog/tag/{$tag->getTitle()|urlencode}/">{$tag->getTitle()|htmlspecialchars}</a>
  6.  
  7.         {/foreach}
  8.  
  9. </div>


"Controller" предолставил для "View" массив с тегами.
В шаблоне используется проход по массиву, то есть для каждого элемента массива используется это:
  1. <a class="tag" style="white-space: nowrap; color: {$tag->getColor()}; font-size: {$tag->getSize()}" href="{$oRouter->getPathWeb()}/blog/tag/{$tag->getTitle()|urlencode}/">{$tag->getTitle()|htmlspecialchars}</a>


Архитектура


В движке базовой единицей является модуль. То есть, вызывая страницу http://bigstreet.ru/blog/last/, мы вызываем сначала пре-контроллер модуля "Блог" (./modules/blog/controller.php), а затем его подмодуль (Action) "Все блоги" (./modules/blog/last.action.php). Если Action не указан в адресной строке, то обычно используется стандартный index.action.php. Для каждого "Action" существует свой Smarty-шаблон. Находятся они(за редким исключением, которое я опишу ниже *) в папке templates, лежащей в папке модуля. Итак, в нашем случае это папка ./modules/blog/templates.
Нашему action`у соответствует шаблон ./modules/blog/templates/last.tpl.
Рассмотрим его содержимое:
  1. {include file="$path_root/themes/$site_theme/templates/sample.header.tpl"}
  2.  
  3.  
  4.  
  5. {if $aTopics}
  6.  
  7.         {if $allpage > 1 }
  8.  
  9.         <div class="pager" style="padding: 5px 0 15px 2px">
  10.  
  11.         {sliding_pager baseurl=$baseurl url_append="" pagecount=$allpage curpage=$curpage
  12.  
  13.         txt_first = '1' txt_prev  = '←' separator = ''
  14.  
  15.         txt_next  = '→' txt_last  = $allpage txt_skip  = ' ... ' }
  16.  
  17.         </div>
  18.  
  19.         {/if}
  20.  
  21.  
  22.  
  23.         <div style="padding-top: 5px">{include file="$path_root/themes/$site_theme/templates/sample.topics.tpl"}</div>
  24.  
  25.  
  26.  
  27.         {if $allpage > 1 }
  28.  
  29.         <div class="pager" style="padding: 0 0 0 2px">
  30.  
  31.         {sliding_pager baseurl=$baseurl url_append="" pagecount=$allpage curpage=$curpage
  32.  
  33.         txt_first = '1' txt_prev  = '←' separator = ''
  34.  
  35.         txt_next  = '→' txt_last  = $allpage txt_skip  = ' ... ' }
  36.  
  37.         </div>
  38.  
  39.         {/if}
  40.  
  41. {/if}
  42.  
  43.  
  44.  
  45. {include file="$path_root/themes/$site_theme/templates/sample.footer.tpl"}


и разжуём, что к чему:
  1. {include file="$path_root/themes/$site_theme/templates/sample.header.tpl"}

- подключаем шапку движка. Она лежит в папке с шаблонами, которые используются всеми модулями (в данном случае - ./themes/default/templates.

  1. {if $aTopics}

- далее проверяем, не пустой ли массив, переданный нам controller`ом. Если не пустой, то:

  1.         {if $allpage > 1 }
  2.  
  3.         <div class="pager" style="padding: 5px 0 15px 2px">
  4.  
  5.         {sliding_pager baseurl=$baseurl url_append="" pagecount=$allpage curpage=$curpage
  6.  
  7.         txt_first = '1' txt_prev  = '←' separator = ''
  8.  
  9.         txt_next  = '→' txt_last  = $allpage txt_skip  = ' ... ' }
  10.  
  11.         </div>
  12.  
  13.         {/if}

- добавляем постраничную навигацию (pagination). Не вдаюсь в подробности(в тему статьи это не входит), просто эта часть кода отвечает за навигацию.


  1.         <div style="padding-top: 5px">{include file="$path_root/themes/$site_theme/templates/sample.topics.tpl"}</div>

- подключаем файл с выводом списка записей. Этот файл универсален, используется во многих action`ах, поэтому находится среди шаблонов, используемых во всём движке, а не отдельно в каждом модуле (напомню, эта папка в данном случае ./themes/default/templates). Этому файлу нужна лишь определённая переменная с массивом, в котором находится информация из БД о постах. В данном примере эта переменная - $aTopics.

  1. {if $allpage > 1 }
  2.  
  3.         <div class="pager" style="padding: 0 0 0 2px">
  4.  
  5.         {sliding_pager baseurl=$baseurl url_append="" pagecount=$allpage curpage=$curpage
  6.  
  7.         txt_first = '1' txt_prev  = '←' separator = ''
  8.  
  9.         txt_next  = '→' txt_last  = $allpage txt_skip  = ' ... ' }
  10.  
  11.         </div>
  12.  
  13.         {/if}
  14.  
  15. {/if}
  16.  
  17.  
  18.  
  19. {include file="$path_root/themes/$site_theme/templates/sample.footer.tpl"}

- затем ещё раз подключаем навигацию (для удобства, чтобы она имелась и после списка топиков), и подключаем подвал (footer) страницы.

* - движок проверяет нахождение шаблона для action`а сначала в папке ./modules/%MODULE%/templates/%ACTION%.tpl, и если не находит, то обращается в папку с шаблонами для всего движка ./themes/default/templates/%ACTION%.tpl



Таким образом, мы рассмотрели основы использования шаблонов в движке BigStreet.
Позже в статью добавлю назначение всех файлов в папке ./themes/default/templates, которые мы подключаем в шаблоны модулей.
Alphard 25 января 2010 12:31 комментариев: 3
:) 5,03 :(
просмотров: 1979

Комментарии:
Плач
Жаль что я недостаточно осведомлен в этой области…
web_etalon   25 января 2010 22:24
:) 0 :( #
каких именно знаний не хватает?
говори, поделюсь ресурсами )
Alphard   25 января 2010 22:44
:) 1 :( #
Написать комментарий
Только зарегистрированные пользователи могут оставлять комментарии.





Подписаться на рассылку
"Бесплатный движок bigstreet.ru"


 
© 2009. | О сайте | Инструкции | Обратная связь
© Powered by BigStreet RC1-maps SVN Сервис коротких адресов День святого Валентина
www.webmoney.ru Участник проекта CMS Magazine


Работа с БД:
 Время - 7.6085
 Запросов - 13
Работа с кэшем:
 Время - 0.972
 Записей - 2
 Прочтений - 5
Общее время:
 9.0708