Gloobus Опубликовано 28 февраля, 2013 Жалоба Поделиться Опубликовано 28 февраля, 2013 (изменено) Возникла необходимость вывести перечень брендов с сопровождающей картинкой в определенной последовательности на главной странице.1. Добавляем в таблицу s_brands столбец position с типом поля int(11)2. Добавляем параметр сортировки для получения списка брендов в шаблоне в нужной последовательности.В файле api/Brands.php в функцию get_brands после строк if(!empty($filter['category_id'])) $category_id_filter = $this->db->placehold('LEFT JOIN __products p ON p.brand_id=b.id LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@)', (array)$filter['category_id']); добавляем $order = 'b.name'; if(!empty($filter['sort'])) switch ($filter['sort']) { case 'position': $order = 'b.position'; break; case 'name': $order = 'b.name'; break; case 'image': $order = 'b.image'; break; } сразу же ниже, меняем: // Выбираем все бренды $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 FROM __brands b $category_id_filter ORDER BY b.name"); на следующее: // Выбираем все бренды $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 $order"); Теперь в шаблонах перечень брендов можно получать отсортированными по нужному полю:{get_brands var=all_brands sort=position}P.S.: Аналогичным образом можно добавить параметр limit3. В этом же файле, правим функцию add_brand, заменяем строки: $this->db->query("INSERT INTO __brands SET ?%", $brand); return $this->db->insert_id(); на нижеследующие: $query = $this->db->placehold("INSERT INTO __brands SET ?%", $brand); $this->db->query($query); $id = $this->db->insert_id(); $query = $this->db->placehold("UPDATE __brands SET position=id WHERE id=? LIMIT 1", $id); $this->db->query($query); return $id; Это позволит в новое поле position записывать новое значение при добавление бренда, располагая его в конец списка.Чуть ниже, в функции update_brand заменяем строку: $query = $this->db->placehold("UPDATE __brands SET ?% WHERE id=? LIMIT 1", $brand, intval($id)); на другую строку: $query = $this->db->placehold("UPDATE __brands SET ?% WHERE id in(?@) LIMIT ?", (array)$brand, (array)$id, count((array)$id)); 4. Добавляем в файл simpla/design/html/brands.tpl после: <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> и в этом же файле, чуть ниже, сразу после: // Раскрасить строки сразу colorize(); добавляем: // Сортировка списка, добавляем по аналогии из шаблона features.tpl $("#list").sortable({ items: ".row", tolerance: "pointer", handle: ".move_zone", axis: 'y', scrollSensitivity: 40, opacity: 0.7, forcePlaceholderSize: true, 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(); }); } }); Это нам позволит в админке, простым перетаскиванием, менять сортировку по полю position. Точнее пока не позволит, это просто визуальная часть, нужно сделать update в базу, что бы смена позиции сохранялось, для этого...5. Добавляем в файл simpla\BrandsAdmin.php сразу после: if(is_array($ids)) switch($this->request->post('action')) { case 'delete': { foreach($ids as $id) $this->brands->delete_brand($id); break; } } следующее: // Сортировка $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)); А чуть ниже, мы меняем: $brands = $this->brands->get_brands(); на: $brands = $this->brands->get_brands(array('sort'=>'position')); это нужно для того, что бы в админке бренды сортировались не по названию (по умолчанию), а по полю positionВроде все, ничего не забыл. Отредактировал в связи с переездом форума на новый движок, привел в божеский читаемый вид! Изменено 2 июля, 2013 пользователем Gloobus Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 1 марта, 2013 Жалоба Поделиться Опубликовано 1 марта, 2013 Спасибо за реализвацию.Можешь помочь с сортировкой товара в заказе, выскакивает ошибка?!http://forum.simplacms.ru/discussion/3430/sortirovka-tovarov-v-zakaze#Item_3 Цитата Ссылка на сообщение Поделиться на другие сайты
neo-2000 Опубликовано 16 июня, 2013 Жалоба Поделиться Опубликовано 16 июня, 2013 Gloobus очень ценная вещь, я вот сделал все по инструкции, но картинка бренда не отображается на сайте, в чем проблема? Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 2 июля, 2013 Автор Жалоба Поделиться Опубликовано 2 июля, 2013 Gloobus очень ценная вещь, я вот сделал все по инструкции, но картинка бренда не отображается на сайте, в чем проблема?Давно не заходил и не смотрел темы если еще не поправил, пиши в ЛС, посмотрим Цитата Ссылка на сообщение Поделиться на другие сайты
neo-2000 Опубликовано 2 июля, 2013 Жалоба Поделиться Опубликовано 2 июля, 2013 спасибо Globus, уже поправил, даже ресайз добавил, теперь все бренды автоматически нужного размера, просто красота... Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 2 июля, 2013 Автор Жалоба Поделиться Опубликовано 2 июля, 2013 спасибо Globus, уже поправил, даже ресайз добавил, теперь все бренды автоматически нужного размера, просто красота...Тоесть вы ресайзите фотку бренда в момент загрузки ее?Что-то я об этом не подумал сразу а можно кусочек кода и куда лепить, а то лень сейчас капаться? Цитата Ссылка на сообщение Поделиться на другие сайты
neo-2000 Опубликовано 2 июля, 2013 Жалоба Поделиться Опубликовано 2 июля, 2013 ну там не кусочек кода, но не сложно... в .htaccess (который в корне), добавляем перед # Статические страницы строку RewriteRule ^image/([^/]+)_([^/]+)/(.+)? /image.php?width=$1&height=$2&image=/$3 [NC,L]в корень сайта ложем https://www.dropbox....lbmll/image.phpтеперь в шаблоне достаточно писать к брендам <img src="image/42_42/files/brands/{$brand->image}" border="0"> , на выходе имеем 42х42 максимальные размеры Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 2 июля, 2013 Автор Жалоба Поделиться Опубликовано 2 июля, 2013 neo-2000О, спасибо Я прадва думал у вас ресайз идет в момент загрузки картинки для бренда На лету это лучше, можно всегда иметь нужного размера картинку, но вот не будет ли это сильно жратъ ресурсы? Цитата Ссылка на сообщение Поделиться на другие сайты
neo-2000 Опубликовано 2 июля, 2013 Жалоба Поделиться Опубликовано 2 июля, 2013 так запрос то не ресурсный... так что не будет жрать, его даже с симпловским ресайзом картинок для товара не сравнить.... Цитата Ссылка на сообщение Поделиться на другие сайты
neo-2000 Опубликовано 2 июля, 2013 Жалоба Поделиться Опубликовано 2 июля, 2013 да и размеры можно править по своему желанию... Цитата Ссылка на сообщение Поделиться на другие сайты
Shpion Опубликовано 3 июля, 2013 Жалоба Поделиться Опубликовано 3 июля, 2013 Давно искал, надо попробывать. Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 18 августа, 2013 Жалоба Поделиться Опубликовано 18 августа, 2013 Всё сделал по инструкции, не идёт сохранение в базу при сортировке в админке. Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 27 августа, 2013 Жалоба Поделиться Опубликовано 27 августа, 2013 Сортировка не работает в админке, в базе в поле position бренда "0", нужно редактировать каждый бренд и прописывать числа позиций. Возможно ли массово прописать числа позиций? Цитата Ссылка на сообщение Поделиться на другие сайты
mart Опубликовано 27 августа, 2013 Жалоба Поделиться Опубликовано 27 августа, 2013 UPDATE s_brands SET position = id Цитата Ссылка на сообщение Поделиться на другие сайты
Danya Опубликовано 28 августа, 2013 Жалоба Поделиться Опубликовано 28 августа, 2013 mart Спасибо огромное! Помогло! Цитата Ссылка на сообщение Поделиться на другие сайты
Gloobus Опубликовано 8 сентября, 2013 Автор Жалоба Поделиться Опубликовано 8 сентября, 2013 UPDATE s_brands SET position = id Да, вот что я забыл написать После добавления поля в базу, его нужно проапдейтить на значение ID той же строки!Спасибо mart за помощь в мое отсутствие Цитата Ссылка на сообщение Поделиться на другие сайты
daramal Опубликовано 15 августа, 2016 Жалоба Поделиться Опубликовано 15 августа, 2016 Спасибо большое, Gloobus за отличную доработку! Цитата Ссылка на сообщение Поделиться на другие сайты
spammaster Опубликовано 7 мая, 2019 Жалоба Поделиться Опубликовано 7 мая, 2019 Юрий быстро и недорого установил данный модуль, теперь работает сортировка брендов в категориях. Рекомендую данного исполнителя! Цитата Ссылка на сообщение Поделиться на другие сайты
Skynet Опубликовано 17 июля, 2019 Жалоба Поделиться Опубликовано 17 июля, 2019 Подскажите пожалуйста, реализацию вывода брендов по параметру limit=12 совместно с параметром position в первом посту Цитата Ссылка на сообщение Поделиться на другие сайты
shooroop Опубликовано 18 июля, 2019 Жалоба Поделиться Опубликовано 18 июля, 2019 Подскажите пожалуйста, реализацию вывода брендов по параметру limit=12 совместно с параметром position в первом посту {get_brands var=all_brands sort=position limit=12} Цитата Ссылка на сообщение Поделиться на другие сайты
Skynet Опубликовано 24 июля, 2019 Жалоба Поделиться Опубликовано 24 июля, 2019 {get_brands var=all_brands sort=position limit=12} Спасибо большое за ответ, но по прежнему отображаются все бренды. Цитата Ссылка на сообщение Поделиться на другие сайты
phukortsin Опубликовано 24 июля, 2019 Жалоба Поделиться Опубликовано 24 июля, 2019 Дорабатывайте get_brands(), чтоб работала с limit - по аналогии с другими. Цитата Ссылка на сообщение Поделиться на другие сайты
Skynet Опубликовано 24 июля, 2019 Жалоба Поделиться Опубликовано 24 июля, 2019 $sql_limit = ''; if(isset($filter['limit']) || isset($filter['page'])) { $limit = 100; $page = 1; if(isset($filter['limit'])) $limit = max(1, intval($filter['limit'])); if(isset($filter['page'])) $page = max(1, intval($filter['page'])); $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit); } изменить // Выбираем все бренды $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 $order"); на // Выбираем все бренды $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 $order $sql_limit"); Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.