AlexanderKi Posted June 9, 2015 Report Share Posted June 9, 2015 Суть такая, как можно сделать активные бренды?Например: Категория - активные меню, там можно свободно менять местами категории, тем самым меняя их расположение.Как сделать такую активную штуку к брендам? Quote Link to post Share on other sites
koteyka Posted June 9, 2015 Report Share Posted June 9, 2015 В таблицу брендов нужно добавлять поле position и дальше, по аналогии, как в категориях везде прописать. Quote Link to post Share on other sites
Solution mishanya Posted June 9, 2015 Solution Report Share Posted June 9, 2015 (edited) Делаем запрос к БД: ALTER TABLE `s_brands` ADD `position` INT(11) NOT NULL DEFAULT '0' ; В /simpla/design/brands.tpl меняем: <div id="list" class="brands"> {foreach $brands as $brand} <div class="row"> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$brand->id}" /> </div> <div class="cell"> <a href="{url module=BrandAdmin id=$brand->id return=$smarty.server.REQUEST_URI}">{$brand->name|escape}</a> </div> <div class="icons cell"> <a class="preview" title="Предпросмотр в новом окне" href="../brands/{$brand->url}" target="_blank"></a> <a class="delete" title="Удалить" href="#"></a> </div> <div class="clear"></div> </div> {/foreach} </div> на это: <div id="list" class="brands"> {foreach $brands as $brand} <div class="row"> <input type="hidden" name="positions[{$brand->id}]" value="{$brand->position}"> <div class="move cell"><div class="move_zone"></div></div> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$brand->id}" /> </div> <div class="cell"> <a href="{url module=BrandAdmin id=$brand->id return=$smarty.server.REQUEST_URI}">{$brand->name|escape}</a> </div> <div class="icons cell"> <a class="preview" title="Предпросмотр в новом окне" href="../brands/{$brand->url}" target="_blank"></a> <a class="delete" title="Удалить" href="#"></a> </div> <div class="clear"></div> </div> {/foreach} </div> в этом же файле, ниже, после: {literal} <script> $(function() { добавляем функцию сортировки (остальные функции не удалять, просто добавить эту): // Сортировка списка $("#list").sortable({ items: ".row", tolerance: "pointer", handle: ".move_zone", scrollSensitivity: 40, opacity: 0.7, helper: function(event, ui){ if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui; var helper = $('<div/>'); $('input[type="checkbox"][name*="check"]:checked').each(function(){ var item = $(this).closest('.row'); helper.height(helper.height()+item.innerHeight()); if(item[0]!=ui[0]) { helper.append(item.clone()); $(this).closest('.row').remove(); } else { helper.append(ui.clone()); item.find('input[type="checkbox"][name*="check"]').attr('checked', false); } }); return helper; }, start: function(event, ui) { if(ui.helper.children('.row').size()>0) $('.ui-sortable-placeholder').height(ui.helper.height()); }, beforeStop:function(event, ui){ if(ui.helper.children('.row').size()>0){ ui.helper.children('.row').each(function(){ $(this).insertBefore(ui.item); }); ui.item.remove(); } }, update:function(event, ui) { $("#list_form input[name*='check']").attr('checked', false); $("#list_form").ajaxSubmit(function() { colorize(); }); } }); в файле /simpla/BrandsAdmin.php после: // Обработка действий if($this->request->method('post')) { вставляем прием позиций брендов: // Сортировка $positions = $this->request->post('positions'); $ids = array_keys($positions); sort($positions); foreach($positions as $i=>$position) $this->brands->update_brand($ids[$i], array('position'=>$position)); дальше в файле api/Brands.phpдобавляем в запрос выборки (примерно 34я строка) брендов поле b.position меняем сортировку по имени (примерно 35я строка) ORDER BY b.name на сортировку по позиции: ORDER BY b.positionвроде бы все. Edited February 27, 2016 by mishanya Quote Link to post Share on other sites
AlexanderKi Posted June 9, 2015 Author Report Share Posted June 9, 2015 Делаем запрос к БД: ALTER TABLE `s_brands` ADD `position` INT(11) NOT NULL DEFAULT '0' ; В /simpla/design/brands.tpl меняем: <div id="list" class="brands"> {foreach $brands as $brand} <div class="row"> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$brand->id}" /> </div> <div class="cell"> <a href="{url module=BrandAdmin id=$brand->id return=$smarty.server.REQUEST_URI}">{$brand->name|escape}</a> </div> <div class="icons cell"> <a class="preview" title="Предпросмотр в новом окне" href="../brands/{$brand->url}" target="_blank"></a> <a class="delete" title="Удалить" href="#"></a> </div> <div class="clear"></div> </div> {/foreach} </div> на это: <div id="list" class="brands"> {foreach $brands as $brand} <div class="row"> <input type="hidden" name="positions[{$brand->id}]" value="{$brand->position}"> <div class="move cell"><div class="move_zone"></div></div> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$brand->id}" /> </div> <div class="cell"> <a href="{url module=BrandAdmin id=$brand->id return=$smarty.server.REQUEST_URI}">{$brand->name|escape}</a> </div> <div class="icons cell"> <a class="preview" title="Предпросмотр в новом окне" href="../brands/{$brand->url}" target="_blank"></a> <a class="delete" title="Удалить" href="#"></a> </div> <div class="clear"></div> </div> {/foreach} </div> в этом же файле, ниже, после: {literal} <script> $(function() { добавляем функцию сортировки (остальные функции не удалять, просто добавить эту): // Сортировка списка $("#list").sortable({ items: ".row", tolerance: "pointer", handle: ".move_zone", scrollSensitivity: 40, opacity: 0.7, helper: function(event, ui){ if($('input[type="checkbox"][name*="check"]:checked').size()<1) return ui; var helper = $('<div/>'); $('input[type="checkbox"][name*="check"]:checked').each(function(){ var item = $(this).closest('.row'); helper.height(helper.height()+item.innerHeight()); if(item[0]!=ui[0]) { helper.append(item.clone()); $(this).closest('.row').remove(); } else { helper.append(ui.clone()); item.find('input[type="checkbox"][name*="check"]').attr('checked', false); } }); return helper; }, start: function(event, ui) { if(ui.helper.children('.row').size()>0) $('.ui-sortable-placeholder').height(ui.helper.height()); }, beforeStop:function(event, ui){ if(ui.helper.children('.row').size()>0){ ui.helper.children('.row').each(function(){ $(this).insertBefore(ui.item); }); ui.item.remove(); } }, update:function(event, ui) { $("#list_form input[name*='check']").attr('checked', false); $("#list_form").ajaxSubmit(function() { colorize(); }); } }); в файле /simpla/BrandsAdmin.php после: // Обработка действий if($this->request->method('post')) { вставляем прием позиций брендов: // Сортировка $positions = $this->request->post('positions'); $ids = array_keys($positions); sort($positions); $positions = array_reverse($positions); foreach($positions as $i=>$position) $this->brands->update_brand($ids[$i], array('position'=>$position)); дальше в файле api/Brands.phpдобавляем в запрос выборки (примерно 34я строка) брендов поле b.position меняем сортировку по имени (примерно 35я строка) ORDER BY b.name на сортировку по позиции: ORDER BY b.positionвроде бы все.Почти как надо, только сейчас они сортируются по дате создания, а то что передвигаю в админке, не закрепляется. Quote Link to post Share on other sites
mishanya Posted June 9, 2015 Report Share Posted June 9, 2015 (edited) вы добавили в выборку поле b.position? Edited June 9, 2015 by mishanya Quote Link to post Share on other sites
Dmitry86 Posted October 26, 2016 Report Share Posted October 26, 2016 вы добавили в выборку поле b.position? День добрый. Такая же проблема как и у AlexanderKi, бренды сортируются по дате создания, а то что передвигаю в админке, не закрепляется. В базе поле position у всех брендов равно 0. в выборку поле b.position добавлено. Quote Link to post Share on other sites
mishanya Posted October 26, 2016 Report Share Posted October 26, 2016 День добрый. Такая же проблема как и у AlexanderKi, бренды сортируются по дате создания, а то что передвигаю в админке, не закрепляется. В базе поле position у всех брендов равно 0. в выборку поле b.position добавлено. сделайте запрос к базе UPDATE `s_brands` SET `position`=`id`; а затем пробуйте сортировать Quote Link to post Share on other sites
Dmitry86 Posted October 26, 2016 Report Share Posted October 26, 2016 сделайте запрос к базе UPDATE `s_brands` SET `position`=`id`; а затем пробуйте сортироватьСделал запрос, в базе position заполнилось двузначными числами. После попытки сортировки - поле снова стало нулями. Quote Link to post Share on other sites
mishanya Posted October 26, 2016 Report Share Posted October 26, 2016 Сделал запрос, в базе position заполнилось двузначными числами. После попытки сортировки - поле снова стало нулями.можете фтп в личку кинуть, посмотрю. Quote Link to post Share on other sites
Dmitry86 Posted October 27, 2016 Report Share Posted October 27, 2016 можете фтп в личку кинуть, посмотрю.Разобрался, извиняюсь. вы добавили в выборку поле b.position? Оказалось, что не добавил, подумал, что нужно только order by b.name заменить на order by b.position! Спасибо за подсказки и способ! Quote Link to post Share on other sites
Julius123 Posted October 27, 2016 Report Share Posted October 27, 2016 порядок сбрасывается после перезагрузки страницы Quote Link to post Share on other sites
Julius123 Posted October 28, 2016 Report Share Posted October 28, 2016 меняем сортировку по имени (примерно 35я строка) ORDER BY b.name на сортировку по позиции:ORDER BY b.position Я что-то не понял наверное я просто заменил ORDER BY b.name на ORDER BY b.position, правильно? Quote Link to post Share on other sites
Kosjak76 Posted October 28, 2016 Report Share Posted October 28, 2016 Да Quote Link to post Share on other sites
Dmitry86 Posted October 28, 2016 Report Share Posted October 28, 2016 (edited) меняем сортировку по имени (примерно 35я строка) ORDER BY b.name на сортировку по позиции:ORDER BY b.position Я что-то не понял наверное я просто заменил ORDER BY b.name на ORDER BY b.position, правильно? Да, всё правильно сделали, только пропустили предыдущий пункт: дальше в файле api/Brands.phpдобавляем в запрос выборки (примерно 34я строка) брендов поле b.position Это вот здесь нужно добавить в конец b.position: // Выбираем все бренды $query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.top_description, b.image, b.supplier_id, b.position Edited October 28, 2016 by Dmitry86 Quote Link to post Share on other sites
Kosjak76 Posted October 28, 2016 Report Share Posted October 28, 2016 b.supplier_id, - что-то нестандартное, сейчас он его добавит и будет кричать - все пропало Quote Link to post Share on other sites
Dmitry86 Posted October 28, 2016 Report Share Posted October 28, 2016 b.supplier_id, - что-то нестандартное, сейчас он его добавит и будет кричать - все пропало Да, это собственные доработки, я просто указал, где нужно добавить b.position ) Quote Link to post Share on other sites
Julius123 Posted October 28, 2016 Report Share Posted October 28, 2016 Исправил но все равно порядок сбрасывается $query = $this->db->placehold("SELECT DISTINCT b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image, b.position FROM __brands b $category_id_filter ORDER BY b.position"); Quote Link to post Share on other sites
Kosjak76 Posted October 28, 2016 Report Share Posted October 28, 2016 Значит, нужно проверять ВСЕ ОСТАЛЬНЫЕ пункты по инструкции. Quote Link to post Share on other sites
Julius123 Posted October 28, 2016 Report Share Posted October 28, 2016 сделайте запрос к базе UPDATE `s_brands` SET `position`=`id`; а затем пробуйте сортироватьпомог вот этот пост. Спасибо за доработку и помощь. Quote Link to post Share on other sites
Dmitry86 Posted May 18, 2017 Report Share Posted May 18, 2017 Народ, помогите, пожалуйста, с брендами всё Ок, выводим в юзерской части как нам нужно по сортировке, но в админке в "товарах" бренды хотелось бы выводить по имени, для удобства просмотра (их стало очень много, приходится постоянно пользоваться теперь поиском по странице), как это можно реализовать? Quote Link to post Share on other sites
Dmitry86 Posted January 28, 2018 Report Share Posted January 28, 2018 При создании нового бренда есть проблема, что position заполняется нулём. При добавлении нескольких новых брендов постепенно появляются нули в свойстве position и от этого сортировка "едет" и бренды потом не меняются местами. Вероятно так происходит потому, что новое поле было создано с нулём по умолчанию, то есть: ALTER TABLE `s_brands` ADD `position` INT(11) NOT NULL DEFAULT '0' ; А по идее при создании position должен заполняться равным id нового бренда, как это у свойств товаров. Возможно я что-то путаю, т.к. не гуру программирования. Сможет кто-нибудь помочь? Заранее благодарю. Quote Link to post Share on other sites
mishanya Posted January 28, 2018 Report Share Posted January 28, 2018 При создании нового бренда есть проблема, что position заполняется нулём. При добавлении нескольких новых брендов постепенно появляются нули в свойстве position и от этого сортировка "едет" и бренды потом не меняются местами. Вероятно так происходит потому, что новое поле было создано с нулём по умолчанию, то есть: ALTER TABLE `s_brands` ADD `position` INT(11) NOT NULL DEFAULT '0' ; А по идее при создании position должен заполняться равным id нового бренда, как это у свойств товаров. Возможно я что-то путаю, т.к. не гуру программирования. Сможет кто-нибудь помочь? Заранее благодарю. выше же есть запрос чтобы это сделать. UPDATE `s_brands` SET `position`=`id`; Quote Link to post Share on other sites
Dmitry86 Posted January 28, 2018 Report Share Posted January 28, 2018 выше же есть запрос чтобы это сделать. UPDATE `s_brands` SET `position`=`id`; Этот запрос исправляет position только у уже созданных брендов. А при создании новых брендов у них position снова с нулём. Quote Link to post Share on other sites
mishanya Posted January 28, 2018 Report Share Posted January 28, 2018 Этот запрос исправляет position только у уже созданных брендов. А при создании новых брендов у них position снова с нулём.а замените в add_brand return $this->db->insert_id(); на $id = $this->db->insert_id(); $this->db->query("UPDATE __brands SET position=id WHERE id=?", $id); return $id; Quote Link to post Share on other sites
Dmitry86 Posted January 28, 2018 Report Share Posted January 28, 2018 а замените в add_brand return $this->db->insert_id(); на $id = $this->db->insert_id(); $this->db->query("UPDATE __brands SET position=id WHERE id=?", $id); return $id; Огромное Спасибо Mishanya! Сделал в api/Brands.php, и теперь всё как надо. Почему сам не додумался сначала заглянуть в Features.php, ведь там всё точно так же в add_feature... 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.