cepreu Опубликовано 11 июля, 2014 Жалоба Поделиться Опубликовано 11 июля, 2014 Нужно реализация суб-брендов. Кто-нибудь делал? Нужно по мимо брендов выводить линию бренда (косметика) Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 11 июля, 2014 Жалоба Поделиться Опубликовано 11 июля, 2014 Добавляете в брендах parent_id, а в адресе делаете что-то типа brand-collection и в htaccess разбираете строку Цитата Ссылка на сообщение Поделиться на другие сайты
cepreu Опубликовано 12 июля, 2014 Автор Жалоба Поделиться Опубликовано 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} Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 12 июля, 2014 Жалоба Поделиться Опубликовано 12 июля, 2014 Бред сивой кобылы... Цитата Ссылка на сообщение Поделиться на другие сайты
cepreu Опубликовано 12 июля, 2014 Автор Жалоба Поделиться Опубликовано 12 июля, 2014 Бред сивой кобылы...Конкретнее не могли бы выразить свою мысль, пожалуйста? Что-то не правильно или я неправильно оформил? Я спрашивал решение, не дождавшись сделал сам. Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 4 октября, 2015 Жалоба Поделиться Опубликовано 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} Не открывается список выбора бренда Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 4 октября, 2015 Жалоба Поделиться Опубликовано 4 октября, 2015 Похоже, $brands в шаблоне не определена... Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 24 октября, 2015 Жалоба Поделиться Опубликовано 24 октября, 2015 Похоже, $brands в шаблоне не определена... По шаблону вопросов нет. Где-то в другом коде ошибка. Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 25 октября, 2015 Жалоба Поделиться Опубликовано 25 октября, 2015 Сделал, работает, но не сохраняет как подбренд, похоже проблема с "parent_id", хотя parent_id задан и в Brand.php и в БД, та и в коде ошибки не вижу. Цитата Ссылка на сообщение Поделиться на другие сайты
Kors Опубликовано 25 октября, 2015 Жалоба Поделиться Опубликовано 25 октября, 2015 Видимо, Вы это значение в контроллере не встречаете. Во всяком случае, в приведенном коде нигде обработки parent_id нет... Цитата Ссылка на сообщение Поделиться на другие сайты
n1c Опубликовано 25 октября, 2015 Жалоба Поделиться Опубликовано 25 октября, 2015 Видимо, Вы это значение в контроллере не встречаете. Во всяком случае, в приведенном коде нигде обработки parent_id нет... Спасибо за подсказку) Сразу нашел в чем проблема) надо добавить еще в BrandAdmin.php код $brand->parent_id = $this->request->post('parent_id', 'integer'); Цитата Ссылка на сообщение Поделиться на другие сайты
MaLeN Опубликовано 30 августа, 2019 Жалоба Поделиться Опубликовано 30 августа, 2019 (изменено) Спасибо за подсказку) Сразу нашел в чем проблема) надо добавить еще в BrandAdmin.php код $brand->parent_id = $this->request->post('parent_id', 'integer');Можете описать по папкам что да куда? Изменено 30 августа, 2019 пользователем MaLeN Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 26 апреля, 2022 Жалоба Поделиться Опубликовано 26 апреля, 2022 (изменено) Привет парни, а как вывести в шаблоне товары подбрендов в главном бренде? - adidas -- adidas one -- adidas two Вот чтобы в adidas показывалось adidas one и adidas two Изменено 26 апреля, 2022 пользователем get31 Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 26 апреля, 2022 Жалоба Поделиться Опубликовано 26 апреля, 2022 8 часов назад, get31 сказал: Привет парни, а как вывести в шаблоне товары подбрендов в главном бренде? - adidas -- adidas one -- adidas two Вот чтобы в adidas показывалось adidas one и adidas two Стандартно в симпле нет подбрендов. Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 27 апреля, 2022 Жалоба Поделиться Опубликовано 27 апреля, 2022 11 часов назад, Noxter сказал: Стандартно в симпле нет подбрендов. Та я уже сделал подбренды, а теперь в главном бренде товары не выводятся( Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 28 апреля, 2022 Жалоба Поделиться Опубликовано 28 апреля, 2022 20 часов назад, get31 сказал: Та я уже сделал подбренды, а теперь в главном бренде товары не выводятся( Возможно, в контроллере не фильтруется с учетом подбрендов. И еще десяток причин может быть... Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 28 апреля, 2022 Жалоба Поделиться Опубликовано 28 апреля, 2022 2 часа назад, phukortsin сказал: Возможно, в контроллере не фильтруется с учетом подбрендов. И еще десяток причин может быть... Какой файл копать, подскажите? ProductsView.php? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 30 апреля, 2022 Жалоба Поделиться Опубликовано 30 апреля, 2022 В 28.04.2022 в 11:07, get31 сказал: Какой файл копать, подскажите? ProductsView.php? Сделал подбренды, а фильтр не смог сделать? Смешно... Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 2 мая, 2022 Жалоба Поделиться Опубликовано 2 мая, 2022 В 30.04.2022 в 18:05, Noxter сказал: Сделал подбренды, а фильтр не смог сделать? Смешно... ничего смешного, это реальность. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 2 мая, 2022 Жалоба Поделиться Опубликовано 2 мая, 2022 7 часов назад, get31 сказал: ничего смешного, это реальность. Делал по инструкции? Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 3 мая, 2022 Жалоба Поделиться Опубликовано 3 мая, 2022 16 часов назад, Noxter сказал: Делал по инструкции? да, + добавил то чего нет чтобы работало Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 3 мая, 2022 Жалоба Поделиться Опубликовано 3 мая, 2022 и еще момент, не понял как в бренде вывести названия подбрендов с ссылками делал по аналогии с каталогом, но что-то идет не так Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 3 мая, 2022 Жалоба Поделиться Опубликовано 3 мая, 2022 Какая-то битва экстрасенсов не иначе! Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 4 мая, 2022 Жалоба Поделиться Опубликовано 4 мая, 2022 очень интересно ) Цитата Ссылка на сообщение Поделиться на другие сайты
get31 Опубликовано 4 мая, 2022 Жалоба Поделиться Опубликовано 4 мая, 2022 11 часов назад, Noxter сказал: Какая-то битва экстрасенсов не иначе! Та какая битва, вот по примеру делал: Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.