Sergio022 Posted September 1, 2012 Report Share Posted September 1, 2012 Подскажите, как разбить большой список брендов по алфавиту. Например, чтобы при нажитии на кнопку А, выводились бренды только на букву А, или на 123, только бренды, которые начинаются с цифр. Видел такое на множестве интернет-магазинов, но что-то не получилось.И еще вопрос, как можно сделать вывод разбивки по первым буквам, например:AArmaini...BBoscoBvlgari... Quote Link to post Share on other sites
Kosjak76 Posted September 1, 2012 Report Share Posted September 1, 2012 Самый простой вариант - использовать 2 Джейквери-плагина: лист-меню и (блин, второй не помню, как называется :-) ) из той же серии...Или заплатить немного денег тому, кто знает, как это делается... Quote Link to post Share on other sites
venDETTa Posted October 29, 2014 Report Share Posted October 29, 2014 я делал для Симплы 2.3.6 от 14.07.14Brands.php public function get_all_brands($filter = array()) { $brands = array(); $category_id_filter = ''; $visible_filter = ''; if(isset($filter['visible'])) $visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible'])); 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(?@) $visible_filter", (array)$filter['category_id']); // Выбираем все бренды $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"); $this->db->query($query); // return $this->db->results(); $bnds = $this->db->results(); foreach($bnds as $brnd){ $first_letter = mb_strtoupper(substr($brnd->name, 0, 1)); $otp[$first_letter][] = $brnd; } return $otp; } в шаблоне где нужно вывести (в моем случае я выводил в шаблоне page) {get_all_brands var=all_brands} {if $all_brands} {foreach $all_brands as $kbrnds => $brnds} <h3>{$kbrnds}</h3> <ul class="all_brands"> {foreach $brnds as $b} <li><a href="brands/{$b->url}">{$b->name}</a></li> {/foreach} </ul> {/foreach} {/if} Код писал на скорую, поэтому несуразные имена переменных, и кривосли аля накой черд я узал функцию чтобы вырезать первую букву хотя можно было сделать просто '$first = $str[0];' и чтобы это дело работало в View.php $this->design->smarty->registerPlugin("function", "get_all_brands", array($this, 'get_all_brands_plugin')); public function get_all_brands_plugin($params, &$smarty) { if(!isset($params['visible'])) $params['visible'] = 1; if(!empty($params['var'])) $smarty->assign($params['var'], $this->brands->get_all_brands($params)); } Quote Link to post Share on other sites
Maksclub Posted July 4, 2015 Report Share Posted July 4, 2015 (edited) Подниму тему — как начать вывод с A? а то в начале всякие цифры и скобки лезут...Также русский алфАвит не работает... Edited July 4, 2015 by Maksclub Quote Link to post Share on other sites
mishanya Posted July 4, 2015 Report Share Posted July 4, 2015 Подниму тему — как начать вывод с A? а то в начале всякие цифры и скобки лезут...Также русский алфАвит не работает... а у вас есть цыфры в названиях? по коду первые буквы бренда сохраняются. если у вас нет таких брендов, то не должно быть цыфр и скобок foreach($bnds as $brnd){ $first_letter = mb_strtoupper(substr($brnd->name, 0, 1)); $otp[$first_letter][] = $brnd; } Quote Link to post Share on other sites
Kors Posted July 4, 2015 Report Share Posted July 4, 2015 а у вас есть цыфры в названиях? по коду первые буквы бренда сохраняются. если у вас нет таких брендов, то не должно быть цыфр и скобок foreach($bnds as $brnd){ $first_letter = mb_strtoupper(substr($brnd->name, 0, 1)); $otp[$first_letter][] = $brnd; } Почему Вы решили, что там должны сохраняться непременно первые буквы? С ходу видно, что в коде используется substr... Quote Link to post Share on other sites
mishanya Posted July 4, 2015 Report Share Posted July 4, 2015 Почему Вы решили, что там должны сохраняться непременно первые буквы? С ходу видно, что в коде используется substr... видимо потому что substr с параметром 0,1. Quote Link to post Share on other sites
Kors Posted July 4, 2015 Report Share Posted July 4, 2015 видимо потому что substr с параметром 0,1.А как насчет того, чтобы догадаться, что с русскими буквами это может давать ошибку? На нее довольно явно указал maksclub. Тем более рядом в коде стоит подсказка mb_strtoupper... Quote Link to post Share on other sites
yr4ik Posted July 4, 2015 Report Share Posted July 4, 2015 (edited) Попробуйте mb_substr ...........Или даже так $first_letter = mb_strtoupper(preg_replace('/^([^\w]*)([\w]{1}).*$/ui', '$2', $brnd->name)); Это разрешит только буквы и цифры Edited July 4, 2015 by yr4ik Quote Link to post Share on other sites
Maksclub Posted July 4, 2015 Report Share Posted July 4, 2015 а у вас есть цыфры в названиях? по коду первые буквы бренда сохраняются. если у вас нет таких брендов, то не должно быть цыфр и скобок Есть названия брендов, начинающиесяс цифр (со скобкой не правильно назвал), но нужно с А и чтобы русские буквы работали... эт оважно, так функционал брендов задействован в качестве автора, т оесть их очень много Quote Link to post Share on other sites
Kosjak76 Posted July 4, 2015 Report Share Posted July 4, 2015 У меня есть рабочий вариант, но в нем сначала идут цифры, потом английский алфавит, а потом русский Quote Link to post Share on other sites
madison21 Posted May 4, 2018 Report Share Posted May 4, 2018 У меня есть рабочий вариант, но в нем сначала идут цифры, потом английский алфавит, а потом русскийЕсли не сложно, поделитесь..Я тоже такую страничку хочу вывести. Quote Link to post Share on other sites
Noxter Posted February 2, 2022 Report Share Posted February 2, 2022 В 04.05.2018 в 15:56, madison21 сказал: Если не сложно, поделитесь.. Я тоже такую страничку хочу вывести. https://ericsteinborn.com/jquery-listnav/ Quote Link to post Share on other sites
madison21 Posted February 14, 2022 Report Share Posted February 14, 2022 В 02.02.2022 в 15:46, Noxter сказал: https://ericsteinborn.com/jquery-listnav/ спасибо! 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.