Вывод структуры с разными шаблонами

+27
1.66K
Часто существует необходимость в магазине выводить структуру каталога с разными шаблонами для разных уровней.
Я посмотрел идею как это сделано в Неткате и написал соответствующую функцию для Инстант Шопа


Пример использования:
  1.  
  2. <?
  3. //Выводим каталог
  4. $inCore = cmsCore::getInstance();
  5. $inCore->loadModel('shop');
  6. $model = new cms_model_shop();
  7.  
  8. global $tmpl2, $tmpl3, $tmpl4, $tmpl5;
  9.  
  10. $tmpl5['prefix'] = '<ul class="menu1 level6">';
  11. $tmpl5['postfix'] = '</ul>';
  12. $tmpl5['inactive'] = "'<li><a href=\"%URL\">%TITLE</a></li>'";
  13. $tmpl5['active'] = "'<li><a class=\"active\" href=\"%URL\">%TITLE</a></li>'";
  14.  
  15. $tmpl4['prefix'] = '<ul class="menu1 level5">';
  16. $tmpl4['postfix'] = '</ul>';
  17. $tmpl4['inactive'] = "'<li><a href=\"%URL\">%TITLE</a></li>'";
  18. $tmpl4['active'] = "'<li><a class=\"active\" href=\"%URL\">%TITLE</a>';global \$tmpl5; \$el.= \$this->showShopStructure(%CAT, \$tmpl5); \$el.='</li>'";
  19.  
  20. $tmpl3['prefix'] = '<ul class="menu1 level4">';
  21. $tmpl3['postfix'] = '</ul>';
  22. $tmpl3['inactive'] = "'<li><a href=\"%URL\">%TITLE</a></li>'";
  23. $tmpl3['active'] = "'<li><a class=\"active\" href=\"%URL\">%TITLE</a>';global \$tmpl4; \$el.= \$this->showShopStructure(%CAT, \$tmpl4); \$el.='</li>'";
  24.  
  25. $tmpl2['prefix'] = '<ul class="menu1 level3">';
  26. $tmpl2['postfix'] = '</ul>';
  27. $tmpl2['inactive'] = "'<li><a href=\"%URL\">%TITLE</a></li>'";
  28. $tmpl2['active'] = "'<li><a class=\"active\" href=\"%URL\">%TITLE</a>';global \$tmpl3; \$el.= \$this->showShopStructure(%CAT, \$tmpl3); \$el.='</li>'";
  29.  
  30. $tmpl['prefix'] = '<ul class="menu1 level2">';
  31. $tmpl['postfix'] = '</ul>';
  32. $tmpl['inactive'] = "'<li><a href=\"%URL\">%TITLE</a></li>'";
  33. $tmpl['active'] = "'<li><a class=\"active\" href=\"%URL\">%TITLE</a>';global \$tmpl2; \$el.= \$this->showShopStructure(%CAT, \$tmpl2); \$el.='</li>'";
  34. print $model->showShopStructure(1, $tmpl);
  35.  
  36.  
А вот сама функция, надеюсь что будет полезна
  1.  
  2. /* ========================================================================== */
  3. /* ========================================================================== */
  4.  
  5. public function showShopStructure($cat_id, $tmpl_menu, $strict=0) {
  6. $structure = $tmpl_menu['prefix'];
  7.  
  8. $inCore = cmsCore::getInstance();
  9. $seolink = $inCore->request('seolink', 'str');
  10. $cat = $this->getCategoryByLink($seolink);
  11. if(!$cat) {
  12. $item_id = $this->getItemBySeolink($seolink);
  13. if($item_id) $cat = $this->getCategory($item_id['category_id']);
  14. }
  15.  
  16.  
  17. $sql = "SELECT id, NSLeft, NSRight, title, seolink
  18. FROM cms_shop_cats
  19. WHERE published = 1 AND parent_id = $cat_id
  20. ORDER BY NSLeft";
  21.  
  22. $result = $this->inDB->query($sql);
  23.  
  24. if (!$this->inDB->num_rows($result)) { return false; }
  25. while($con = $this->inDB->fetch_assoc($result)) {
  26. //проверяем есть ли дочерние элементы
  27. $sql_in = "SELECT id FROM cms_shop_cats WHERE published = 1 AND parent_id = ".$con['id']." LIMIT 1";
  28. $res_in = $this->inDB->query($sql_in);
  29. if($this->inDB->num_rows($res_in)>0) $has_children = true; else $has_children = false;
  30.  
  31. $inactive = str_replace('%URL', '/shop/'.$con['seolink'], $tmpl_menu["inactive"]);
  32. $inactive = str_replace('%TITLE', $con['title'], $inactive);
  33. $inactive = str_replace('%CAT', $con['id'], $inactive);
  34.  
  35. $active = str_replace('%URL', '/shop/'.$con['seolink'], $tmpl_menu["active"]);
  36. $active = str_replace('%TITLE', $con['title'], $active);
  37. $active = str_replace('%CAT', $con['id'], $active);
  38.  
  39. if($tmpl_menu["inactivehaschildren"]) {
  40. $inactivehaschildren = str_replace('%URL', '/shop/'.$con['seolink'], $tmpl_menu["inactivehaschildren"]);
  41. $inactivehaschildren = str_replace('%TITLE', $con['title'], $inactivehaschildren);
  42. $inactivehaschildren = str_replace('%CAT', $con['id'], $inactivehaschildren);
  43. }
  44. if($tmpl_menu["activehaschildren"]) {
  45. $activehaschildren = str_replace('%URL', '/shop/'.$con['seolink'], $tmpl_menu["activehaschildren"]);
  46. $activehaschildren = str_replace('%TITLE', $con['title'], $activehaschildren);
  47. $activehaschildren = str_replace('%CAT', $con['id'], $activehaschildren);
  48. }
  49.  
  50.  
  51. $current = false;
  52. if(!$strict) {
  53. if($con['NSLeft']<=$cat['NSLeft'] && $con['NSRight']>=$cat['NSRight'] ) $current = true;
  54. } else {
  55. if($con['id']===$cat['id'] ) $current = true;
  56. }
  57. if($current) {
  58. $code = '$el = '.$active.';';
  59. if($tmpl_menu["activehaschildren"]) {
  60. if($has_children) {
  61. $code = '$el = '.$activehaschildren.';';
  62. }
  63. }
  64. } else {
  65. $code = '$el = '.$inactive.';';
  66. if($tmpl_menu["inactivehaschildren"]) {
  67. if($has_children) {
  68. $code = '$el = '.$inactivehaschildren.';';
  69. }
  70. }
  71. }
  72. eval($code);
  73. $structure.=$el;
  74.  
  75. }
  76.  
  77.  
  78. $structure.= $tmpl_menu['postfix'];
  79.  
  80. return $structure;
  81. }
  82.  
0
Amurland Amurland 12 лет назад #
Можно принтскрин демки или демо?
+1
vicoder vicoder 12 лет назад #
применял во многих проектах, вот например: http://iskrasb.ru/
0
Amurland Amurland 12 лет назад #
спасибо. понял ;)
0
eoleg eoleg 12 лет назад #
+
0
PET PET 12 лет назад #
А как вы сделали на сайте разные категории цен для каждой позиции товара (iskrasb.ru)? Это какой-то хак компонента или просто оформление такое?
0
vicoder vicoder 12 лет назад #
не, это хак
0
PET PET 12 лет назад #
Т.е. с вашим хаком есть возможность в админке для каждой позиции устанавлить категории цен в зависимости от общей суммы заказа? Покупателю выставляется счёт с учётом скидки? Можно поподробнее узнать про вашу доработку и можете ли вы свой хак продать?
0
vicoder vicoder 12 лет назад #
не... там просо три цены задаются. Цена в корзину идет как и раньше.
остальные две цены просто для оптовых клиентов, для информации

Еще от автора

связка ishop и программа Покупка на Яндекс-маркете (2)
продолжение http://instantcms.ru/blogs/uluchshenija/svjazka-ishop-i-programa-pokupka-na-jandeks-markete.htmlпервой части
связка ishop и программа Покупка на Яндекс-маркете
Яндекс маркет позволяет заказывать товары непосредственно с яндекса - удобная штука.
Сортировка дополнительных картинок в шопе drag'n'drop
Сделал возможность перемещения дополнительных картинок в шопе: т.е. можно мышкой взять и перетащить картинку вверх-вниз, как требуется
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.