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

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

#1 11 декабря 2009 в 23:15
Год работаю с инстантом, мне нравится система.Возникла необходимость разобраться, если толкнут в нужном направлении, особенно с модулями.
Не предвзятый вопрос -я не профи, а только учусь, а еше кухня, дети, и тд тп!
Некоторые модули выводят в 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 —
  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" мой класс
А мне предположим надо подогнать вывод архива под свой дизайн, приходится менять сам файл модуля
  1. echo '<div class="arhive_month"><a href="/arhive/'.и тд.. меняем на свой class="arrowlist"
Или проще всем необходимым мне классам не меняя код модулей присвоить значение class="arrowlist"в styles.css.
Заключениеи конкретный вопрос :РЕАЛЬНО ли, абсолютно все модули компилировать в шаблонизаторе и выводить в tpl?

Гуру вебмастеринга прошу меня особо не пинать, я старалась разобраться и выразить свой вопрос правильно/
Если подтолкнете в нужном русле, готова с удовольствием (в свободное время)помогать в разработке (в меру УМА).
#2 12 декабря 2009 в 00:35
oll[/b😊Вы можете помочь разработчикам и пользователям хотя бы тем, что изготовите под какой нибудь даже один модуль...
#3 13 декабря 2009 в 18:26
Ну собственно модуль архив новостей перевела на шаблонизатор.Можно сдесь код вылаживать для тестирования.
это код /modules/mod_arhive/module.php
  1. <?php
  2. /*********************************************************************************************/
  3. // //
  4. // InstantCMS v1.5 (c) 2009 FREEWARE //
  5. // http://instantcms.ru/, info@instantcms.ru //
  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

  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 под свой шаблон -не затрагивая кода модуля.
Работа дебютная -замечания надеюсь будут?
#4 19 декабря 2009 в 23:51
Модуль Случайная картинка.Переход модуля на smarty.
Код модуля /modules/mod_random_image/module.php:
  1. <?php
  2. /*********************************************************************************************/
  3. // //
  4. // InstantCMS v1.5 (c) 2009 FREEWARE //
  5. // http://instantcms.ru/, info@instantcms.ru //
  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
  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}
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.