AlexanderKi Опубликовано 9 июня, 2015 Жалоба Поделиться Опубликовано 9 июня, 2015 Суть такая, как можно сделать активные бренды?Например: Категория - активные меню, там можно свободно менять местами категории, тем самым меняя их расположение.Как сделать такую активную штуку к брендам? Цитата Ссылка на сообщение Поделиться на другие сайты
koteyka Опубликовано 9 июня, 2015 Жалоба Поделиться Опубликовано 9 июня, 2015 В таблицу брендов нужно добавлять поле position и дальше, по аналогии, как в категориях везде прописать. Цитата Ссылка на сообщение Поделиться на другие сайты
Решение mishanya Опубликовано 9 июня, 2015 Решение Жалоба Поделиться Опубликовано 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); 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вроде бы все. Изменено 27 февраля, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
AlexanderKi Опубликовано 9 июня, 2015 Автор Жалоба Поделиться Опубликовано 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вроде бы все.Почти как надо, только сейчас они сортируются по дате создания, а то что передвигаю в админке, не закрепляется. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 9 июня, 2015 Жалоба Поделиться Опубликовано 9 июня, 2015 (изменено) вы добавили в выборку поле b.position? Изменено 9 июня, 2015 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 26 октября, 2016 Жалоба Поделиться Опубликовано 26 октября, 2016 вы добавили в выборку поле b.position? День добрый. Такая же проблема как и у AlexanderKi, бренды сортируются по дате создания, а то что передвигаю в админке, не закрепляется. В базе поле position у всех брендов равно 0. в выборку поле b.position добавлено. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 26 октября, 2016 Жалоба Поделиться Опубликовано 26 октября, 2016 День добрый. Такая же проблема как и у AlexanderKi, бренды сортируются по дате создания, а то что передвигаю в админке, не закрепляется. В базе поле position у всех брендов равно 0. в выборку поле b.position добавлено. сделайте запрос к базе UPDATE `s_brands` SET `position`=`id`; а затем пробуйте сортировать Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 26 октября, 2016 Жалоба Поделиться Опубликовано 26 октября, 2016 сделайте запрос к базе UPDATE `s_brands` SET `position`=`id`; а затем пробуйте сортироватьСделал запрос, в базе position заполнилось двузначными числами. После попытки сортировки - поле снова стало нулями. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 26 октября, 2016 Жалоба Поделиться Опубликовано 26 октября, 2016 Сделал запрос, в базе position заполнилось двузначными числами. После попытки сортировки - поле снова стало нулями.можете фтп в личку кинуть, посмотрю. Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 27 октября, 2016 Жалоба Поделиться Опубликовано 27 октября, 2016 можете фтп в личку кинуть, посмотрю.Разобрался, извиняюсь. вы добавили в выборку поле b.position? Оказалось, что не добавил, подумал, что нужно только order by b.name заменить на order by b.position! Спасибо за подсказки и способ! Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 27 октября, 2016 Жалоба Поделиться Опубликовано 27 октября, 2016 порядок сбрасывается после перезагрузки страницы Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 28 октября, 2016 меняем сортировку по имени (примерно 35я строка) ORDER BY b.name на сортировку по позиции:ORDER BY b.position Я что-то не понял наверное я просто заменил ORDER BY b.name на ORDER BY b.position, правильно? Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 28 октября, 2016 Да Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 28 октября, 2016 (изменено) меняем сортировку по имени (примерно 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 Изменено 28 октября, 2016 пользователем Dmitry86 Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 28 октября, 2016 b.supplier_id, - что-то нестандартное, сейчас он его добавит и будет кричать - все пропало Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 28 октября, 2016 b.supplier_id, - что-то нестандартное, сейчас он его добавит и будет кричать - все пропало Да, это собственные доработки, я просто указал, где нужно добавить b.position ) Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 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"); Цитата Ссылка на сообщение Поделиться на другие сайты
Kosjak76 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 28 октября, 2016 Значит, нужно проверять ВСЕ ОСТАЛЬНЫЕ пункты по инструкции. Цитата Ссылка на сообщение Поделиться на другие сайты
Julius123 Опубликовано 28 октября, 2016 Жалоба Поделиться Опубликовано 28 октября, 2016 сделайте запрос к базе UPDATE `s_brands` SET `position`=`id`; а затем пробуйте сортироватьпомог вот этот пост. Спасибо за доработку и помощь. Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 18 мая, 2017 Жалоба Поделиться Опубликовано 18 мая, 2017 Народ, помогите, пожалуйста, с брендами всё Ок, выводим в юзерской части как нам нужно по сортировке, но в админке в "товарах" бренды хотелось бы выводить по имени, для удобства просмотра (их стало очень много, приходится постоянно пользоваться теперь поиском по странице), как это можно реализовать? Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 28 января, 2018 Жалоба Поделиться Опубликовано 28 января, 2018 При создании нового бренда есть проблема, что position заполняется нулём. При добавлении нескольких новых брендов постепенно появляются нули в свойстве position и от этого сортировка "едет" и бренды потом не меняются местами. Вероятно так происходит потому, что новое поле было создано с нулём по умолчанию, то есть: ALTER TABLE `s_brands` ADD `position` INT(11) NOT NULL DEFAULT '0' ; А по идее при создании position должен заполняться равным id нового бренда, как это у свойств товаров. Возможно я что-то путаю, т.к. не гуру программирования. Сможет кто-нибудь помочь? Заранее благодарю. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 28 января, 2018 Жалоба Поделиться Опубликовано 28 января, 2018 При создании нового бренда есть проблема, что position заполняется нулём. При добавлении нескольких новых брендов постепенно появляются нули в свойстве position и от этого сортировка "едет" и бренды потом не меняются местами. Вероятно так происходит потому, что новое поле было создано с нулём по умолчанию, то есть: ALTER TABLE `s_brands` ADD `position` INT(11) NOT NULL DEFAULT '0' ; А по идее при создании position должен заполняться равным id нового бренда, как это у свойств товаров. Возможно я что-то путаю, т.к. не гуру программирования. Сможет кто-нибудь помочь? Заранее благодарю. выше же есть запрос чтобы это сделать. UPDATE `s_brands` SET `position`=`id`; Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 28 января, 2018 Жалоба Поделиться Опубликовано 28 января, 2018 выше же есть запрос чтобы это сделать. UPDATE `s_brands` SET `position`=`id`; Этот запрос исправляет position только у уже созданных брендов. А при создании новых брендов у них position снова с нулём. Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 28 января, 2018 Жалоба Поделиться Опубликовано 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; Цитата Ссылка на сообщение Поделиться на другие сайты
Dmitry86 Опубликовано 28 января, 2018 Жалоба Поделиться Опубликовано 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... Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.