Prote1n Posted May 12, 2012 Report Share Posted May 12, 2012 Можно ли сделать так, что бы возле брэнда указывалось количество товаров данного брэнда. Quote Link to post Share on other sites
basil13 Posted May 12, 2012 Report Share Posted May 12, 2012 интересная идея, постараюсь реализовать.... Quote Link to post Share on other sites
Prote1n Posted May 12, 2012 Author Report Share Posted May 12, 2012 Спасибо, жду с нетерпением. Quote Link to post Share on other sites
daramal Posted May 12, 2012 Report Share Posted May 12, 2012 Поддерживаю вопрос. Ждем Quote Link to post Share on other sites
chocolate_moles Posted May 12, 2012 Report Share Posted May 12, 2012 колхоз конечно, но работает {get_new_products var=count_products}{counter start=-1 skip=1 print=false}{foreach $count_products as $c} {if $c->brand_id == $b->id} {counter print=false} {/if}{/foreach} ({counter})закинуть в цикл вывода брендов Quote Link to post Share on other sites
Prote1n Posted May 12, 2012 Author Report Share Posted May 12, 2012 Нормалек! Quote Link to post Share on other sites
Prote1n Posted May 12, 2012 Author Report Share Posted May 12, 2012 Работает, только у меня переносит цифры в следующую строку если не помещается, короче как зафиксировать, что бы цифра всегда находилась рядом с брэндом? Quote Link to post Share on other sites
Prote1n Posted May 12, 2012 Author Report Share Posted May 12, 2012 Разобрался, добавил в css параметр float: left; Quote Link to post Share on other sites
Prote1n Posted May 12, 2012 Author Report Share Posted May 12, 2012 Спасибо, насчет "колхоз", не пойму почему, есть еще варианты доработки? С помощью css нормально оформить и все . Quote Link to post Share on other sites
Prote1n Posted May 12, 2012 Author Report Share Posted May 12, 2012 Еще вопрос, в фильтре по брендам в списке товаров, возле "все бренды" количество не отображается, как сделать что бы выводилось общее количество? Quote Link to post Share on other sites
Simon1985 Posted September 28, 2012 Report Share Posted September 28, 2012 тут одна проблемка всплывает, если количества товара больше 98 он стопорится и не показывает в брендах правильное кол-во а еще больше так вообще 0 товаров показывает и во всех категориях, в чем может быть причина? Quote Link to post Share on other sites
Prote1n Posted January 18, 2013 Author Report Share Posted January 18, 2013 Напомните куда это вписывать нужно? Quote Link to post Share on other sites
Kosjak76 Posted January 18, 2013 Report Share Posted January 18, 2013 Корс, есть вариант лучше - показыбваем.... Нет - молчим в тряпочку)))) Quote Link to post Share on other sites
Kosjak76 Posted January 18, 2013 Report Share Posted January 18, 2013 Меня просто бесят многомудрые умники, которые ВЕЩАЮТ всем извсестные вещи, а по теме - полный ноль... Quote Link to post Share on other sites
Kosjak76 Posted January 18, 2013 Report Share Posted January 18, 2013 И не для вашего троллизма :-) Quote Link to post Share on other sites
Ruslan Kopyl Posted January 19, 2013 Report Share Posted January 19, 2013 И не для вашего троллизма :-) Это у него образ жизни такой человек-троль...Он действительно что то слышал что нужно делать не так , но вот как это делать, он сказать не может. (Слышыл звон да не знаю где он)А на самом деле вся simpla написана на вот таких быдлокодах, где вместо того что бы сделать правильную выборку из базы, используются непонятные конструкции (вложенные циклы, рекурсии и т.д), или вместо одного запроса делается 4.Теперь по теме, для того что бы отображались количества товаров для определенных брендов, нужно просто правильно составить sql запрос, что бы количества продуктов в брендах считалось MySQL, тем более что он и так их выбирает. Вот измененыйя метод класса Brands, находится он в файле api/brands.php/* * * Функция возвращает массив брендов, удовлетворяющих фильтру * @param $filter * */ public function get_brands($filter = array()) { $brands = array(); $category_id_filter = ''; if(!empty($filter['category_id'])) $category_id_filter = $this->db->placehold('LEFT JOIN __products_categories pc ON p.id = pc.product_id WHERE pc.category_id in(?@)', (array)$filter['category_id']); // Выбираем все бренды $query = "SELECT COUNT(p.id) AS count, b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image FROM __brands AS b LEFT JOIN __products AS p ON p.brand_id = b.id $category_id_filter GROUP BY b.id, p.brand_id ORDER BY b.name"; $this->db->query($query); return $this->db->results(); }Т.е нужно заменить код родного метода на тот что написал я, и после в том месте, где вам нужно отобразить количество товаров для бренда, необходимо обратититься к свойству count.Для примера приведу вывод в файле design/default/html/products.tpl{* Фильтр по брендам *}{if $category->brands}<div id="brands"> <a href="catalog/{$category->url}" {if !$brand->id}class="selected"{/if}>Все бренды</a> {foreach name=brands item=b from=$category->brands} {if $b->image} <a data-brand="{$b->id}" href="catalog/{$category->url}/{$b->url}"><img src="{$config->brands_images_dir}{$b->image}" alt="{$b->name|escape}"></a> {else} <a data-brand="{$b->id}" href="catalog/{$category->url}/{$b->url}" {if $b->id == $brand->id}class="selected"{/if}>{$b->name|escape}</a> {/if} ({$b->count}) {/foreach}</div>{/if}Т.е {$b->count} выводит выводит количество товаров которые относятся к данному бренду.При этом нет никаких рекурсий, вложенных циклов, а к базе как посылался один запрос, так и сейчас все выбирается одним запросом.Если у кого то будут возникать проблемы с установкой данной функции, обращайтесь, сделаю за чисто символическую сумму. Также занимаюсь разработкой модулей, оптимизацией запросов, и разнообразных функций к simpla.skype: alpex-s1icq: 687928520 email: alpex-s@rambler.ru Quote Link to post Share on other sites
Rash Posted January 19, 2013 Report Share Posted January 19, 2013 Благодарю AlpeX, все работает как часы! =) Подскажите а как задать стиль для вывода кол. товара? А то слишком большой отступ получается от бренда и хотелось бы изменить цвет. Quote Link to post Share on other sites
Ruslan Kopyl Posted January 19, 2013 Report Share Posted January 19, 2013 поместите вывод в тег span и задавайте ему стили какие нужно<span class="...">({$b->count})</span> Quote Link to post Share on other sites
Rash Posted January 19, 2013 Report Share Posted January 19, 2013 AlpeX, мерси!!! Quote Link to post Share on other sites
delprofile Posted January 19, 2013 Report Share Posted January 19, 2013 может вообще кол-во ajax считать, так тормозов не будет. Т.е. просто выдавать статику вместо того чтобы каждый раз при обновлении страницы не получать тормоза Quote Link to post Share on other sites
Rash Posted January 20, 2013 Report Share Posted January 20, 2013 kors, согласен что лучше! только вот вопрос как это сделать?!)) Quote Link to post Share on other sites
Ruslan Kopyl Posted January 20, 2013 Report Share Posted January 20, 2013 kors вы несете откровенный бред...Посмотрите на родной метод и на этот, они отличаются только заменой оператора distinct на group при выборе записей из mysql, торомзов из-за этого быть не может, а даже наоборот данный метод будет работать быстрее, чем родной т.к в нем используется на одно обращение к методу placeholder меньше.Вообщем читайте книги по базам данных... Quote Link to post Share on other sites
Ruslan Kopyl Posted January 20, 2013 Report Share Posted January 20, 2013 вот код родного метода public function get_brands($filter = array()) { $brands = array(); $category_id_filter = ''; 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']); // Выбираем все бренды $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(); }и код моего методаpublic function get_brands($filter = array()) { $brands = array(); $category_id_filter = ''; if(!empty($filter['category_id'])) $category_id_filter = $this->db->placehold('LEFT JOIN __products_categories AS pc ON p.id = pc.product_id WHERE pc.category_id in(?@)', (array)$filter['category_id']); // Выбираем все бренды $query = "SELECT COUNT(p.id) AS count, b.id, b.name, b.url, b.meta_title, b.meta_keywords, b.meta_description, b.description, b.image FROM __brands AS b LEFT JOIN __products AS p ON p.brand_id = b.id $category_id_filter GROUP BY b.id, p.brand_id ORDER BY b.name"; $this->db->query($query); return $this->db->results(); }а теперь расскажите со ссылкой на достоверные источники, изза чего здесь могут возникнуть тормоза? Quote Link to post Share on other sites
delprofile Posted January 20, 2013 Report Share Posted January 20, 2013 потому что ты при каждом открытие страницы делаешь этот запрос на подсчёт, чем больше товаров тем дольше идёт подсчёт, прогрессия. Не не слышал? Quote Link to post Share on other sites
Ruslan Kopyl Posted January 20, 2013 Report Share Posted January 20, 2013 delprofile идите читайте книги вместе с korsПеред этим был оператор distinct, который каждую выбранную строку сравнивал между собой, а сейчас стоит group, который считает их. 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.