cepreu Posted July 11, 2014 Report Share Posted July 11, 2014 Нужно реализация суб-брендов. Кто-нибудь делал? Нужно по мимо брендов выводить линию бренда (косметика) Quote Link to post Share on other sites
mart Posted July 11, 2014 Report Share Posted July 11, 2014 Добавляете в брендах parent_id, а в адресе делаете что-то типа brand-collection и в htaccess разбираете строку Quote Link to post Share on other sites
cepreu Posted July 12, 2014 Author Report Share Posted July 12, 2014 `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `url` varchar(255) NOT NULL DEFAULT '', `meta_title` varchar(500) NOT NULL, `meta_keywords` varchar(500) NOT NULL, `meta_description` varchar(500) NOT NULL, `description` text NOT NULL, `image` varchar(255) NOT NULL, `position` int(11) NOT NULL, заменил функцию в brands.php как у категорий // Список указателей на категории в дереве категорий (ключ = id категории) private $all_brands; // Дерево категорий private $brands_tree; public function get_brands_tree() { if(!isset($this->brands_tree)) $this->init_brands(); return $this->brands_tree; } private function init_brands() { // Дерево категорий $tree = new stdClass(); $tree->subbrands = array(); // Указатели на узлы дерева $pointers = array(); $pointers[0] = &$tree; $pointers[0]->path = array(); $pointers[0]->level = 0; // Выбираем все категории $query = $this->db->placehold("SELECT DISTINCT b.id,b.parent_id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image FROM __brands b ORDER BY b.position"); // Выбор категорий с подсчетом количества товаров для каждой. Может тормозить при большом количестве товаров. // $query = $this->db->placehold("SELECT c.id, c.parent_id, c.name, c.description, c.url, c.meta_title, c.meta_keywords, c.meta_description, c.image, c.visible, c.position, COUNT(p.id) as products_count // FROM __categories c LEFT JOIN __products_categories pc ON pc.category_id=c.id LEFT JOIN __products p ON p.id=pc.product_id AND p.visible GROUP BY c.id ORDER BY c.parent_id, c.position"); $this->db->query($query); $brands = $this->db->results(); $finish = false; // Не кончаем, пока не кончатся категории, или пока ниодну из оставшихся некуда приткнуть while(!empty($brands) && !$finish) { $flag = false; // Проходим все выбранные категории foreach($brands as $k=>$brand) { if(isset($pointers[$brand->parent_id])) { // В дерево категорий (через указатель) добавляем текущую категорию $pointers[$brand->id] = $pointers[$brand->parent_id]->subbrands[] = $brand; // Путь к текущей категории $curr = $pointers[$brand->id]; $pointers[$brand->id]->path = array_merge((array)$pointers[$brand->parent_id]->path, array($curr)); // Уровень вложенности категории $pointers[$brand->id]->level = 1+$pointers[$brand->parent_id]->level; // Убираем использованную категорию из массива категорий unset($brands[$k]); $flag = true; } } if(!$flag) $finish = true; } // Для каждой категории id всех ее деток узнаем $ids = array_reverse(array_keys($pointers)); foreach($ids as $id) { if($id>0) { $pointers[$id]->children[] = $id; if(isset($pointers[$pointers[$id]->parent_id]->children)) $pointers[$pointers[$id]->parent_id]->children = array_merge($pointers[$id]->children, $pointers[$pointers[$id]->parent_id]->children); else $pointers[$pointers[$id]->parent_id]->children = $pointers[$id]->children; // Добавляем количество товаров к родительской категории, если текущая видима // if(isset($pointers[$pointers[$id]->parent_id]) && $pointers[$id]->visible) // $pointers[$pointers[$id]->parent_id]->products_count += $pointers[$id]->products_count; } } unset($pointers[0]); unset($ids); $this->brands_tree = $tree->subbrands; $this->all_brands = $pointers; } Вывод в brandsAdmin.php && BrandAdmin.php $brands = $this->brands->get_brands_tree(); В шаблонах. В brand.tpl <!-- Основная форма --> <form method=post id=product enctype="multipart/form-data"> <input type=hidden name="session_id" value="{$smarty.session.id}"> <div id="name"> <input class="name" name=name type="text" value="{$brand->name|escape}"/> <input name=id type="hidden" value="{$brand->id|escape}"/> </div> <div id="product_categories"> <select name="parent_id"> <option value='0'>Корневой бренд</option> {function name=brand_select level=0} {foreach from=$brands item=b} {if $b->id != $brand->id} <option value='{$b->id}' {if $brand->parent_id == $b->id}selected{/if}>{section name=sp loop=$level} {/section}{$b->name}</option> {brand_select brands=$b->subbrands level=$level+1} {/if} {/foreach} {/function} {brand_select brands=$brands} </select> </div> В brands.tpl <div id="main_list" class="brands"> <form id="list_form" method="post"> <input type="hidden" name="session_id" value="{$smarty.session.id}"> {function name=brand_select level=0} {if $brands} <div id="list" class="sortable"> {foreach $brands as $b} {if $b} <div class="row"> <div class="tree_row"> <input type="hidden" name="positions[{$b->id}]" value="{$b->position}"> <div class="move cell" style="margin-left:{$level*20}px"><div class="move_zone"></div></div> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$b->id}" /> </div> <div class="cell"> <a href="{url module=BrandAdmin id=$b->id return=$smarty.server.REQUEST_URI}">{$b->name|escape}|{$level}</a> </div> <div class="icons cell"> <a class="preview" title="Предпросмотр в новом окне" href="../catalog/{$b->url}" target="_blank"></a> <a class="delete" title="Удалить" href="#"></a> </div> <div class="clear"></div> </div> {brand_select brands=$b->subbrands level=$level+1} </div> {/if} {/foreach} </div> {/if} {/function} {brand_select brands=$brands} Quote Link to post Share on other sites
Kosjak76 Posted July 12, 2014 Report Share Posted July 12, 2014 Бред сивой кобылы... Quote Link to post Share on other sites
cepreu Posted July 12, 2014 Author Report Share Posted July 12, 2014 Бред сивой кобылы...Конкретнее не могли бы выразить свою мысль, пожалуйста? Что-то не правильно или я неправильно оформил? Я спрашивал решение, не дождавшись сделал сам. Quote Link to post Share on other sites
n1c Posted October 4, 2015 Report Share Posted October 4, 2015 `id` int(11) NOT NULL AUTO_INCREMENT, `parent_id` int(11) NOT NULL DEFAULT '0', `name` varchar(255) NOT NULL DEFAULT '', `url` varchar(255) NOT NULL DEFAULT '', `meta_title` varchar(500) NOT NULL, `meta_keywords` varchar(500) NOT NULL, `meta_description` varchar(500) NOT NULL, `description` text NOT NULL, `image` varchar(255) NOT NULL, `position` int(11) NOT NULL, заменил функцию в brands.php как у категорий // Список указателей на категории в дереве категорий (ключ = id категории) private $all_brands; // Дерево категорий private $brands_tree; public function get_brands_tree() { if(!isset($this->brands_tree)) $this->init_brands(); return $this->brands_tree; } private function init_brands() { // Дерево категорий $tree = new stdClass(); $tree->subbrands = array(); // Указатели на узлы дерева $pointers = array(); $pointers[0] = &$tree; $pointers[0]->path = array(); $pointers[0]->level = 0; // Выбираем все категории $query = $this->db->placehold("SELECT DISTINCT b.id,b.parent_id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image FROM __brands b ORDER BY b.position"); // Выбор категорий с подсчетом количества товаров для каждой. Может тормозить при большом количестве товаров. // $query = $this->db->placehold("SELECT c.id, c.parent_id, c.name, c.description, c.url, c.meta_title, c.meta_keywords, c.meta_description, c.image, c.visible, c.position, COUNT(p.id) as products_count // FROM __categories c LEFT JOIN __products_categories pc ON pc.category_id=c.id LEFT JOIN __products p ON p.id=pc.product_id AND p.visible GROUP BY c.id ORDER BY c.parent_id, c.position"); $this->db->query($query); $brands = $this->db->results(); $finish = false; // Не кончаем, пока не кончатся категории, или пока ниодну из оставшихся некуда приткнуть while(!empty($brands) && !$finish) { $flag = false; // Проходим все выбранные категории foreach($brands as $k=>$brand) { if(isset($pointers[$brand->parent_id])) { // В дерево категорий (через указатель) добавляем текущую категорию $pointers[$brand->id] = $pointers[$brand->parent_id]->subbrands[] = $brand; // Путь к текущей категории $curr = $pointers[$brand->id]; $pointers[$brand->id]->path = array_merge((array)$pointers[$brand->parent_id]->path, array($curr)); // Уровень вложенности категории $pointers[$brand->id]->level = 1+$pointers[$brand->parent_id]->level; // Убираем использованную категорию из массива категорий unset($brands[$k]); $flag = true; } } if(!$flag) $finish = true; } // Для каждой категории id всех ее деток узнаем $ids = array_reverse(array_keys($pointers)); foreach($ids as $id) { if($id>0) { $pointers[$id]->children[] = $id; if(isset($pointers[$pointers[$id]->parent_id]->children)) $pointers[$pointers[$id]->parent_id]->children = array_merge($pointers[$id]->children, $pointers[$pointers[$id]->parent_id]->children); else $pointers[$pointers[$id]->parent_id]->children = $pointers[$id]->children; // Добавляем количество товаров к родительской категории, если текущая видима // if(isset($pointers[$pointers[$id]->parent_id]) && $pointers[$id]->visible) // $pointers[$pointers[$id]->parent_id]->products_count += $pointers[$id]->products_count; } } unset($pointers[0]); unset($ids); $this->brands_tree = $tree->subbrands; $this->all_brands = $pointers; } Вывод в brandsAdmin.php && BrandAdmin.php $brands = $this->brands->get_brands_tree(); В шаблонах. В brand.tpl <!-- Основная форма --> <form method=post id=product enctype="multipart/form-data"> <input type=hidden name="session_id" value="{$smarty.session.id}"> <div id="name"> <input class="name" name=name type="text" value="{$brand->name|escape}"/> <input name=id type="hidden" value="{$brand->id|escape}"/> </div> <div id="product_categories"> <select name="parent_id"> <option value='0'>Корневой бренд</option> {function name=brand_select level=0} {foreach from=$brands item=b} {if $b->id != $brand->id} <option value='{$b->id}' {if $brand->parent_id == $b->id}selected{/if}>{section name=sp loop=$level} {/section}{$b->name}</option> {brand_select brands=$b->subbrands level=$level+1} {/if} {/foreach} {/function} {brand_select brands=$brands} </select> </div> В brands.tpl <div id="main_list" class="brands"> <form id="list_form" method="post"> <input type="hidden" name="session_id" value="{$smarty.session.id}"> {function name=brand_select level=0} {if $brands} <div id="list" class="sortable"> {foreach $brands as $b} {if $b} <div class="row"> <div class="tree_row"> <input type="hidden" name="positions[{$b->id}]" value="{$b->position}"> <div class="move cell" style="margin-left:{$level*20}px"><div class="move_zone"></div></div> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$b->id}" /> </div> <div class="cell"> <a href="{url module=BrandAdmin id=$b->id return=$smarty.server.REQUEST_URI}">{$b->name|escape}|{$level}</a> </div> <div class="icons cell"> <a class="preview" title="Предпросмотр в новом окне" href="../catalog/{$b->url}" target="_blank"></a> <a class="delete" title="Удалить" href="#"></a> </div> <div class="clear"></div> </div> {brand_select brands=$b->subbrands level=$level+1} </div> {/if} {/foreach} </div> {/if} {/function} {brand_select brands=$brands} Не открывается список выбора бренда Quote Link to post Share on other sites
Kors Posted October 4, 2015 Report Share Posted October 4, 2015 Похоже, $brands в шаблоне не определена... Quote Link to post Share on other sites
n1c Posted October 24, 2015 Report Share Posted October 24, 2015 Похоже, $brands в шаблоне не определена... По шаблону вопросов нет. Где-то в другом коде ошибка. Quote Link to post Share on other sites
n1c Posted October 25, 2015 Report Share Posted October 25, 2015 Сделал, работает, но не сохраняет как подбренд, похоже проблема с "parent_id", хотя parent_id задан и в Brand.php и в БД, та и в коде ошибки не вижу. Quote Link to post Share on other sites
Kors Posted October 25, 2015 Report Share Posted October 25, 2015 Видимо, Вы это значение в контроллере не встречаете. Во всяком случае, в приведенном коде нигде обработки parent_id нет... Quote Link to post Share on other sites
n1c Posted October 25, 2015 Report Share Posted October 25, 2015 Видимо, Вы это значение в контроллере не встречаете. Во всяком случае, в приведенном коде нигде обработки parent_id нет... Спасибо за подсказку) Сразу нашел в чем проблема) надо добавить еще в BrandAdmin.php код $brand->parent_id = $this->request->post('parent_id', 'integer'); Quote Link to post Share on other sites
MaLeN Posted August 30, 2019 Report Share Posted August 30, 2019 (edited) Спасибо за подсказку) Сразу нашел в чем проблема) надо добавить еще в BrandAdmin.php код $brand->parent_id = $this->request->post('parent_id', 'integer');Можете описать по папкам что да куда? Edited August 30, 2019 by MaLeN Quote Link to post Share on other sites
get31 Posted April 26, 2022 Report Share Posted April 26, 2022 (edited) Привет парни, а как вывести в шаблоне товары подбрендов в главном бренде? - adidas -- adidas one -- adidas two Вот чтобы в adidas показывалось adidas one и adidas two Edited April 26, 2022 by get31 Quote Link to post Share on other sites
Noxter Posted April 26, 2022 Report Share Posted April 26, 2022 8 часов назад, get31 сказал: Привет парни, а как вывести в шаблоне товары подбрендов в главном бренде? - adidas -- adidas one -- adidas two Вот чтобы в adidas показывалось adidas one и adidas two Стандартно в симпле нет подбрендов. Quote Link to post Share on other sites
get31 Posted April 27, 2022 Report Share Posted April 27, 2022 11 часов назад, Noxter сказал: Стандартно в симпле нет подбрендов. Та я уже сделал подбренды, а теперь в главном бренде товары не выводятся( Quote Link to post Share on other sites
phukortsin Posted April 28, 2022 Report Share Posted April 28, 2022 20 часов назад, get31 сказал: Та я уже сделал подбренды, а теперь в главном бренде товары не выводятся( Возможно, в контроллере не фильтруется с учетом подбрендов. И еще десяток причин может быть... Quote Link to post Share on other sites
get31 Posted April 28, 2022 Report Share Posted April 28, 2022 2 часа назад, phukortsin сказал: Возможно, в контроллере не фильтруется с учетом подбрендов. И еще десяток причин может быть... Какой файл копать, подскажите? ProductsView.php? Quote Link to post Share on other sites
Noxter Posted April 30, 2022 Report Share Posted April 30, 2022 В 28.04.2022 в 11:07, get31 сказал: Какой файл копать, подскажите? ProductsView.php? Сделал подбренды, а фильтр не смог сделать? Смешно... Quote Link to post Share on other sites
get31 Posted May 2, 2022 Report Share Posted May 2, 2022 В 30.04.2022 в 18:05, Noxter сказал: Сделал подбренды, а фильтр не смог сделать? Смешно... ничего смешного, это реальность. Quote Link to post Share on other sites
Noxter Posted May 2, 2022 Report Share Posted May 2, 2022 7 часов назад, get31 сказал: ничего смешного, это реальность. Делал по инструкции? Quote Link to post Share on other sites
get31 Posted May 3, 2022 Report Share Posted May 3, 2022 16 часов назад, Noxter сказал: Делал по инструкции? да, + добавил то чего нет чтобы работало Quote Link to post Share on other sites
get31 Posted May 3, 2022 Report Share Posted May 3, 2022 и еще момент, не понял как в бренде вывести названия подбрендов с ссылками делал по аналогии с каталогом, но что-то идет не так Quote Link to post Share on other sites
Noxter Posted May 3, 2022 Report Share Posted May 3, 2022 Какая-то битва экстрасенсов не иначе! Quote Link to post Share on other sites
shooroop Posted May 4, 2022 Report Share Posted May 4, 2022 очень интересно ) Quote Link to post Share on other sites
get31 Posted May 4, 2022 Report Share Posted May 4, 2022 11 часов назад, Noxter сказал: Какая-то битва экстрасенсов не иначе! Та какая битва, вот по примеру делал: Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.