infinity178 Posted May 21, 2014 Report Share Posted May 21, 2014 Всем еще раз доброго дня! Нашел на форуме тему с направлением "Выборочная выгрузка в Ya.Market" как я понял автор темы: ссылка на тему http://www.simplashop.com/article/simpla-2-vyborochnaya-vygruzka-v-yandeksmarket Все работает (ну как мин с Админ части), но вот в комментах на сайте был вопрос "возможность фильтрации в админке по принципу Рекоммендуемые, Акции и т.д. api/Products.phpпо аналогии $is_featured_filter = ''; добавляем $yandex_filter = ''; simpla/ProductsAdminв if($f = $this->request->get('filter', 'string')) добавляем elseif($f == 'yandex') $filter['yandex'] = 1; simpla/design/html/products.tpl<!-- Меню --> <!-- Фильтры -->Добавляем <li {if $filter=='yandex'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='yandex'}">Yandex</a></li> Все радуемся и пользуемся Quote Link to post Share on other sites
mart Posted May 21, 2014 Report Share Posted May 21, 2014 В api/Products.php уже есть этот фильтр, его надо добавить только в метод count_products - в остальном верно.Писал для этого случаю другую статью "Фильтрация в админке" - постараюсь на днях (или этих) выходных закончить.Предполагалось фильтрацияпо новинкам и яндексу (т.е. новым полям, что объяснялись в других статьях)по товарам со скидкой,товарам без картинок,товарам с нулевым остатком.Моей целью является не написать подробное руководство, а просто объяснить принципы с какой стороны подойти - развивать проект можно бесконечно и для каждого индивидуально. Quote Link to post Share on other sites
infinity178 Posted May 21, 2014 Author Report Share Posted May 21, 2014 Согласен, я по аналогичному принципу реализовал слайдер, но в целом метод реализации - без границ, под что и куда угодно Quote Link to post Share on other sites
ExtraBash Posted February 20, 2015 Report Share Posted February 20, 2015 if(!empty($filter['featured'])) $is_featured_filter = $this->db->placehold('AND p.featured=?', intval($filter['featured'])); if(!empty($filter['yandex'])) $is_featured_filter = $this->db->placehold('AND p.yandex=?', intval($filter['yandex'])); Вот такая штука в count_products сосчитает сколько товаров таких. Quote Link to post Share on other sites
larenso Posted March 7, 2015 Report Share Posted March 7, 2015 Все сделал как написали, но показывает все товары и даже те, что выключены в выгрузку яндекса. Quote Link to post Share on other sites
larenso Posted March 8, 2015 Report Share Posted March 8, 2015 Всем еще раз доброго дня! Нашел на форуме тему с направлением "Выборочная выгрузка в Ya.Market" как я понял автор темы: ссылка на тему http://www.simplashop.com/article/simpla-2-vyborochnaya-vygruzka-v-yandeksmarket Все работает (ну как мин с Админ части), но вот в комментах на сайте был вопрос "возможность фильтрации в админке по принципу Рекоммендуемые, Акции и т.д. api/Products.phpпо аналогии $is_featured_filter = ''; добавляем $yandex_filter = ''; simpla/ProductsAdminв if($f = $this->request->get('filter', 'string')) добавляем elseif($f == 'yandex') $filter['yandex'] = 1; simpla/design/html/products.tpl<!-- Меню --> <!-- Фильтры -->Добавляем <li {if $filter=='yandex'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='yandex'}">Yandex</a></li> Все радуемся и пользуемся Где-то что-то было упущено. Не работает такой метод %( Quote Link to post Share on other sites
larenso Posted March 13, 2015 Report Share Posted March 13, 2015 /Api/Products.php Поможет if(!empty($filter['yandex'])) $yandex_filter = $this->db->placehold('AND p.to_yandex=?', intval($filter['yandex'])); Quote Link to post Share on other sites
Yana Posted April 29, 2016 Report Share Posted April 29, 2016 (edited) Коллеги, установила модуль, но получила такую проблему : В админ панели не отображается включен товар или нет, причем все работает. Но после обновления страницы все товары светятся как не отправленные в яндекс маркет, хотя они отправлены. Помогите пожалуйста!!)) Edited April 29, 2016 by Yana Quote Link to post Share on other sites
Kosjak76 Posted April 29, 2016 Report Share Posted April 29, 2016 посмотрите внимательно, все ли вы сделали правильноЕсли конкретно, у товаров, отправленных в Яндекс, должнен добавляться класс, подобно рекомендуемым.Или напишите мне в скайп kosjak1976Как землячке - помогу бесплатно Есть еще 1 приятная мелочь - аяксовые кнопочки напротив каждого товара и мы сделаем свои для Yandex.Market. Выше в этом же файле найдем (62 строка) 62 {if $product->featured}featured{/if} и добавим после него 62 {if $product->to_yandex}yandex{/if} Quote Link to post Share on other sites
Yana Posted April 29, 2016 Report Share Posted April 29, 2016 посмотрите внимательно, все ли вы сделали правильноЕсли конкретно, у товаров, отправленных в Яндекс, должнен добавляться класс, подобно рекомендуемым.Или напишите мне в скайп kosjak1976Как землячке - помогу бесплатно Буду очень признательна ))) Отправила запрос в скайп Quote Link to post Share on other sites
Yana Posted April 29, 2016 Report Share Posted April 29, 2016 Вот она моя 62 строка : <div id="list"> {foreach $products as $product} <div class="{if !$product->visible}invisible{/if} {if $product->featured}featured{/if} {if $product->to_yandex}yandex{/if} row"> <input type="hidden" name="positions[{$product->id}]" value="{$product->position}"> <div class="move cell"><div class="move_zone"></div></div> <div class="checkbox cell"> <input type="checkbox" name="check[]" value="{$product->id}"/> Вроде бы все правильно (((( Хелп ми Quote Link to post Share on other sites
Yana Posted April 29, 2016 Report Share Posted April 29, 2016 Уже нашла ошибку ) Видимо когда делала не сохранила, Не хватало вот этого: Чтобы Ваше поле to_yandex выводилось в списке товаров надо модифицировать класс товара api/Products.php - после строки (141) 141 p.visible, добавим поле 142 p.to_yandex, Quote Link to post Share on other sites
snagovskiy Posted July 25, 2017 Report Share Posted July 25, 2017 (edited) Вышеописанные способы у меня не работают.Вот мой рабочий вариант для simpla 2.3.6 В api/Products.php public function get_products($filter = array()) { // По умолчанию $page = 1; $category_id_filter = ''; $brand_id_filter = ''; $product_id_filter = ''; $features_filter = ''; $keyword_filter = ''; $visible_filter = ''; $is_featured_filter = ''; $yandex_filter = ''; $discounted_filter = ''; $in_stock_filter = ''; $group_by = ''; $order = 'p.position DESC'; if(isset($filter['limit'])) $limit = max(1, intval($filter['limit'])); if(isset($filter['page'])) $page = max(1, intval($filter['page'])); if(isset($limit) && isset($page)) $sql_limit = $this->db->placehold(' LIMIT ?, ? ', ($page-1)*$limit, $limit); if(!empty($filter['id'])) $product_id_filter = $this->db->placehold('AND p.id in(?@)', (array)$filter['id']); if(!empty($filter['category_id'])) { $category_id_filter = $this->db->placehold('INNER JOIN __products_categories pc ON pc.product_id = p.id AND pc.category_id in(?@)', (array)$filter['category_id']); $group_by = "GROUP BY p.id"; } if(!empty($filter['brand_id'])) $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']); if(isset($filter['featured'])) $is_featured_filter = $this->db->placehold('AND p.featured=?', intval($filter['featured'])); if(isset($filter['yandex'])) $yandex_filter = $this->db->placehold('AND p.to_yandex=?', intval($filter['yandex'])); if(isset($filter['discounted'])) $discounted_filter = $this->db->placehold('AND (SELECT 1 FROM __variants pv WHERE pv.product_id=p.id AND pv.compare_price>0 LIMIT 1) = ?', intval($filter['discounted'])); if(isset($filter['in_stock'])) $in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock'])); if(isset($filter['visible'])) $visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible'])); if(!empty($filter['sort'])) switch ($filter['sort']) { case 'position': $order = 'p.position DESC'; break; case 'name': $order = 'p.name'; break; case 'created': $order = 'p.created DESC'; break; case 'price': //$order = 'pv.price IS NULL, pv.price=0, pv.price'; $order = '(SELECT -pv.price FROM __variants pv WHERE (pv.stock IS NULL OR pv.stock>0) AND p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM __variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1) DESC'; break; } if(!empty($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) { $kw = $this->db->escape(trim($keyword)); $keyword_filter .= $this->db->placehold("AND (p.name LIKE '%$kw%' OR p.meta_keywords LIKE '%$kw%' OR p.id in (SELECT product_id FROM __variants WHERE sku LIKE '%$kw%'))"); } } if(!empty($filter['features']) && !empty($filter['features'])) foreach($filter['features'] as $feature=>$value) $features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM __options WHERE feature_id=? AND value=? ) ', $feature, $value); if(!empty($filter['min_price']) && !empty($filter['max_price'])) $prices = $this->db->placehold('AND p.id in(SELECT v.product_id FROM __variants v WHERE v.price >= ? AND v.price <= ? AND v.product_id = p.id)', intval($filter['min_price']), intval($filter['max_price'])); $query = "SELECT p.id, p.url, p.brand_id, p.name, p.featured, p.rating, p.votes, p.annotation, p.body, p.position, p.created as created, p.visible, p.to_yandex, p.featured, p.meta_title, p.meta_keywords, p.meta_description, p.garanty, b.name as brand, b.url as brand_url FROM __products p $category_id_filter LEFT JOIN __brands b ON p.brand_id = b.id WHERE 1 $product_id_filter $brand_id_filter $features_filter $keyword_filter $is_featured_filter $yandex_filter $discounted_filter $in_stock_filter $visible_filter $prices $group_by ORDER BY $order $sql_limit"; $this->db->query($query); return $this->db->results(); } /** * Функция возвращает количество товаров * Возможные значения фильтра: * category_id - id категории или их массив * brand_id - id бренда или их массив * keyword - ключевое слово для поиска * features - фильтр по свойствам товара, массив (id свойства => значение свойства) */ public function count_products($filter = array()) { $category_id_filter = ''; $brand_id_filter = ''; $product_id_filter = ''; $keyword_filter = ''; $visible_filter = ''; $is_featured_filter = ''; $yandex_filter = ''; $in_stock_filter = ''; $discounted_filter = ''; $features_filter = ''; if(!empty($filter['category_id'])) $category_id_filter = $this->db->placehold('INNER JOIN __products_categories pc ON pc.product_id = p.id AND pc.category_id in(?@)', (array)$filter['category_id']); if(!empty($filter['brand_id'])) $brand_id_filter = $this->db->placehold('AND p.brand_id in(?@)', (array)$filter['brand_id']); if(!empty($filter['id'])) $product_id_filter = $this->db->placehold('AND p.id in(?@)', (array)$filter['id']); if(isset($filter['keyword'])) { $keywords = explode(' ', $filter['keyword']); foreach($keywords as $keyword) $keyword_filter .= $this->db->placehold('AND (p.name LIKE "%'.$this->db->escape(trim($keyword)).'%" OR p.meta_keywords LIKE "%'.$this->db->escape(trim($keyword)).'%") '); } if(isset($filter['featured'])) $is_featured_filter = $this->db->placehold('AND p.featured=?', intval($filter['featured'])); if(isset($filter['yandex'])) $yandex_filter = $this->db->placehold('AND p.to_yandex=?', intval($filter['yandex'])); if(isset($filter['in_stock'])) $in_stock_filter = $this->db->placehold('AND (SELECT count(*)>0 FROM __variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = ?', intval($filter['in_stock'])); if(isset($filter['discounted'])) $discounted_filter = $this->db->placehold('AND (SELECT 1 FROM __variants pv WHERE pv.product_id=p.id AND pv.compare_price>0 LIMIT 1) = ?', intval($filter['discounted'])); if(isset($filter['visible'])) $visible_filter = $this->db->placehold('AND p.visible=?', intval($filter['visible'])); if(!empty($filter['features']) && !empty($filter['features'])) foreach($filter['features'] as $feature=>$value) $features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM __options WHERE feature_id=? AND value=? ) ', $feature, $value); if(!empty($filter['min_price']) && !empty($filter['max_price'])) $prices = $this->db->placehold('AND p.id in(SELECT v.product_id FROM __variants v WHERE v.price >= ? AND v.price <= ? AND v.product_id = p.id)', intval($filter['min_price']), intval($filter['max_price'])); $query = "SELECT count(distinct p.id) as count FROM __products AS p $category_id_filter WHERE 1 $brand_id_filter $product_id_filter $keyword_filter $is_featured_filter $yandex_filter $in_stock_filter $discounted_filter $visible_filter $prices $features_filter "; $this->db->query($query); return $this->db->result('count'); } Edited July 25, 2017 by snagovskiy Quote Link to post Share on other sites
Tarasbulba Posted October 26, 2018 Report Share Posted October 26, 2018 (edited) Всем еще раз доброго дня! Нашел на форуме тему с направлением "Выборочная выгрузка в Ya.Market" как я понял автор темы:ссылка на темуhttp://www.simplashop.com/article/simpla-2-vyborochnaya-vygruzka-v-yandeksmarket Все работает (ну как мин с Админ части), но вот в комментах на сайте был вопрос "возможность фильтрации в админке по принципу Рекоммендуемые, Акции и т.д. api/Products.phpпо аналогии $is_featured_filter = '';добавляем $yandex_filter = '';simpla/ProductsAdminв if($f = $this->request->get('filter', 'string'))добавляем elseif($f == 'yandex')$filter['yandex'] = 1; simpla/design/html/products.tpl<!-- Меню --> <!-- Фильтры -->Добавляем<li {if $filter=='yandex'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='yandex'}">Yandex</a></li> Все радуемся и пользуемся все описано отлично все сделал с первого раза спасибо!!! Edited October 26, 2018 by Tarasbulba 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.