Различия в методе вывода модулей.

Как сделать вывод всех модулей через смарти .

 
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 754
Год работаю с инстантом ,мне нравится система.Возникла необходимость разобраться ,если толкнут в нужном направлении ,особенно с модулями.
Не предвзятый вопрос -я не профи ,а только учусь,а еше кухня,дети,и тд тп!
Некоторые модули выводят в smarty-> и компилируются в mod_имя модуля.tpl
А некоторые нет ,и вывод инфы организован внутри mod_имя.php
Меня интересует можно ли все модули выводить через smarty->display(’mod_имя модуля.tpl
В частности mod_hmenu, mod_menu, mod_arhiv и тд.Толкните суть поделу,факты основного принципа (почему различия?)а дальше попробую разобраться (если смогу-СМОГУ) и изменить.
Тоесть нужна и необходима возможность при создании шаблонов применять нужные классы непосредственно в файлах ...tpl ЭТОГО шаблона-модуля,а не применять классы в самих модулях ..php.
ТОесть проблема заключается в чем ?
При применении своих классов в модуле предположим /mod_hmenu/module.php (естественно его каждый будет подгонять под свой шаблон-он не компилируется smarty ,
и его ...tpl нет в шаблоне /templates/_default_или другой (свой)_/modules/
тогда при переходе на другой шаблон возникает проблема в перезаливке самих измененных модулей.
Ну если ипользовать один шаблон и надолго ,не проблема.Но при выпуске изменений в файлах модулей опять возникнет необходимость их переписывать и применять свои классы (под свой дизайн шаблона)в уже новой редакции файлов модулей.

Вот пример как я применяю класс в bestblogs.tpl -
Код PHP:
  1.  
  2. <ul>
  3.  
  4. <div class="arrowlist" >
  5. <li><a href="{$post.href}" style="font-weight:bold">{$post.title}</a></li>
  6. </div>
  7. </ul>
  8.  
  9. class="arrowlist" мой класс
А мне предположим надо подогнать вывод архива под свой дизайн,приходится менять сам файл модуля
Код PHP:
  1. echo '<div class="arhive_month"><a href="/arhive/'.и тд.. меняем на свой class="arrowlist"
Или проще всем необходимым мне классам не меняя код модулей присвоить значение class="arrowlist"в styles.css.
Заключениеи конкретный вопрос :РЕАЛЬНО ли ,абсолютно все модули компилировать в шаблонизаторе и выводить в tpl?

Гуру вебмастеринга прошу меня особо не пинать,я старалась разобраться и выразить свой вопрос правильно/
Если подтолкнете в нужном русле,готова с удовольствием (в свободное время)помогать в разработке (в меру УМА).
Редактировалось: 5 раз (Последний: 11 декабря 2009 в 23:34)
Sometime CMS Community
Посетитель
no avatar
Медаль
Сообщений: 332
Уважаемая oll, пинать не кто не будет ситуация следующая вообщето как правильно было замечено, инстант использует компилируемый шаблонизатор smarty, который в свою очеред призван для того чтобы разделить бизнес логику модуля от его графического исполнения. для это и используються шаблоны tpl. Начнем с того что разрабатывается модуль "последние блоги" с точки зрения программиста мне не важно как будет оформлен данный модуль, моя главная задача получить необходимые данные из базы их обработать и подготовить некоторый массив данныъ для дальнейшего вывода в шаблоне, оформление остаеться на совести дизайнера.
То что многие модули не имеют своих шаблонов а дизайн прописан в самом модуле, обусловлено только тем что просто не доходят руки до того чтобы их переписать на смарти шаблоны. Все модули, компоненты и прочие компоненты системы могу использовать смарти шаблоны в любых случаях когда требуеться вывести полученную информацию в дизайн сайт.

Поэтому все можно выносить в smarty и делать свои шаблоны.
Реклама
cms
Посетитель
small user social cms
МедальКубок зрительских симпатийАвторитет форума
Сообщений: 1224
oll[/b smile Вы можете помочь разработчикам и пользователям хотя бы тем, что изготовите под какой нибудь даже один модуль...
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 754
Ну собственно модуль архив новостей перевела на шаблонизатор.Можно сдесь код вылаживать для тестирования.
это код /modules/mod_arhive/module.php
Код PHP:
  1. <?php
  2. /*********************************************************************************************/
  3. // //
  4. // InstantCMS v1.5 (c) 2009 FREEWARE //
  5. // http://instantcms.ru/, [email protected] //
  6. // //
  7. // written by Vladimir E. Obukhov, 2007-2009 //
  8. // //
  9. /*********************************************************************************************/
  10.  
  11. function mod_arhive($module_id){
  12. $inCore = cmsCore::getInstance();
  13. $inDB = cmsDatabase::getInstance();
  14.  
  15. $cfg = $inCore->loadModuleConfig($module_id);
  16. if ($cfg['menuid']>0) {
  17. $menuid = $cfg['menuid'];
  18. } else {
  19. $menuid = $inCore->menuId();
  20. }
  21.  
  22. $sql = "SELECT DATE_FORMAT( pubdate, '%M, %Y' ) fdate, DATE_FORMAT( pubdate, '%Y' ) year, DATE_FORMAT( pubdate, '%m' ) month, COUNT( id ) num
  23. FROM cms_content"."\n";
  24.  
  25. if($cfg['cat_id']>0){
  26. $sql .= "WHERE category_id = ".$cfg['cat_id'];
  27. if ($cfg['source']!='both'){
  28. if ($cfg['source']=='arhive'){
  29. $sql .= " AND is_arhive = 1". "\n";
  30. } else {
  31. $sql .= " AND is_arhive = 0". "\n";
  32. }
  33. } else {
  34. $sql .= "\n";
  35. }
  36. }
  37.  
  38. $sql .= "GROUP BY DATE_FORMAT(pubdate, '%M, %Y')"."\n";
  39. $sql .= "ORDER BY pubdate DESC";
  40.  
  41. $result = $inDB->query($sql) ;
  42.  
  43. if ($inDB->num_rows($result)>0){
  44. while ($item = $inDB->fetch_assoc($result)){
  45. $item['fdate'] = $inCore->getRusDate($item['fdate']);
  46.  
  47.  
  48. $itemar[]=$item ;
  49.  
  50. }
  51.  
  52.  
  53. $smarty = $inCore->initSmarty('modules','mod_arhiv.tpl');
  54. $smarty->assign('item', $itemar);
  55. $smarty->display('mod_arhiv.tpl');
  56.  
  57.  
  58. }
  59. else { echo '<p>Нет материалов для отображения</p>'; }
  60. return true;
  61.  
  62.  
  63. }
  64. ?>

А это соответственно файл /templates/_default_/modules/mod_arhiv.tpl

Код PHP:
  1. {foreach key=tid item=itemar from=$item}
  2. <ul>
  3. <div class="arhive_month">
  4. <li><a href="/arhive/{$menuid}/{$itemar.year}/{$itemar.month} ">{$itemar.fdate}({$itemar.num})</a></li>
  5. </div>
  6. </ul>
  7.  
  8. {/foreach}

Приятно ...Теперь АРХИВ НОВОСТЕЙ можно выводить в шаблон применяя в файле arhiv.tpl вместо class="arhive_month ,свой класс <div class = мой дизайн> ,или изменять свойства class="arhive_month в css под свой шаблон -не затрагивая кода модуля.
Работа дебютная -замечания надеюсь будут?
Редактировалось: 8 раз (Последний: 13 декабря 2009 в 19:12)
Посетитель
small user social cms
МедальКубок зрительских симпатий
Сообщений: 754
Модуль Случайная картинка.Переход модуля на smarty.
Код модуля /modules/mod_random_image/module.php:
Код PHP:
  1. <?php
  2. /*********************************************************************************************/
  3. // //
  4. // InstantCMS v1.5 (c) 2009 FREEWARE //
  5. // http://instantcms.ru/, [email protected] //
  6. // //
  7. // written by Vladimir E. Obukhov, 2007-2009 //
  8. // //
  9. /*********************************************************************************************/
  10.  
  11. function mod_random_image($module_id){
  12. $inCore = cmsCore::getInstance();
  13. $inDB = cmsDatabase::getInstance();
  14. $cfg = $inCore->loadModuleConfig($module_id);
  15.  
  16. if ($cfg['menuid']>0) {
  17. $menuid = $cfg['menuid'];
  18. } else {
  19. $menuid = $inCore->menuId();
  20. }
  21.  
  22. if ($cfg['album_id']>0){
  23. $s = "AND f.album_id = ". $cfg['album_id'];
  24. } else {
  25. $s = "";
  26. }
  27.  
  28. $sql = "SELECT f.*, a.title album_title
  29. FROM cms_photo_files f, cms_photo_albums a
  30. WHERE f.album_id = a.id ".$s." AND f.published = 1
  31. ORDER BY RAND()
  32. LIMIT 1
  33. ";
  34.  
  35. $result = $inDB->query($sql) ;
  36.  
  37. if ($inDB->num_rows($result)){
  38. while ($item=$inDB->fetch_assoc($result)){
  39. $randimag[]=$item ;
  40.  
  41.  
  42. }
  43.  
  44. $smarty = $inCore->initSmarty('modules','mod_randimag.tpl');
  45. $smarty->assign('item', $randimag);
  46. $smarty->assign('menuid', $menuid);
  47. $smarty->display('mod_randimag.tpl');
  48.  
  49.  
  50.  
  51.  
  52.  
  53. }
  54.  
  55.  
  56. return true;
  57. }
  58. ?>

Там где строка LIMIT 1 можно поставить 2 или 10 и ровно столько случайных фото будет выводится за раз.

Код файла templates/_default_/modules/mod_randimag.tpl
Код PHP:
  1. {foreach key=tid item=randimag from=$item}
  2.  
  3. <div>
  4.  
  5.  
  6. <a href="/photos/{$menuid}/photo{$randimag.id}.html "><p align="center" border="0"><img src="/images/photos/small/{$randimag.file}"><p align="center" border="0">{$randimag.title}</p></a>
  7. </div>
  8.  
  9.  
  10. {/foreach}
В начало страницы
Предыдущая темаСледующая тема Перейти на форум:
Быстрый ответ
Чтобы писать на форуме, зарегистрируйтесь или авторизуйтесь.