-
Публикаций
169 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные Enhill
-
-
Добрый день. Очень нужна ваша помощь.
Вывожу акционные товары в шаблоне products.tpl с помощью GET параметра:
if (!empty($type) && !$brand) { $query = $this->db->placehold(" SELECT c.name, count(pc.product_id) as products_count, c.parent_id, c.id, c.url FROM __products_categories pc LEFT JOIN __categories c ON c.id=pc.category_id INNER JOIN __products p ON p.id=pc.product_id AND pc.position=(SELECT MIN(pc2.position) FROM __products_categories pc2 WHERE pc.product_id=pc2.product_id) WHERE 1 AND p.visible=1 AND (SELECT 1 FROM __variants pv WHERE pv.product_id=p.id AND pv.compare_price>0 LIMIT 1) = 1 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) = 1 GROUP BY pc.category_id ORDER BY products_count DESC"); $this->db->query($query); $results_categories = $this->db->results(); foreach($results_categories as &$u) { $u->url .= '?type=actions'; }
https://site.ru/category_name?type=actions
Как сделать условие в шаблоне products.tpl на присутствие\отсутствие акционных товаров?
Цель: показывать ссылку на акционные товары, только в тех категориях, где они есть.
-
Большое спасибо за помощь.
1. $p->quantity - неизвестно что, всегда будет пустым.
2. Никаких сведений о ценах и стоимости не пеедается вообще. Вряд ли это правильно...
1. Это пример яндекса. Под этим параметром они хотят видеть количество товара в заказе. То есть $p->quantity это $purchase->amount
-
Здравствуйте. Как мы знаем, наступила эра нового Федерального закона. Яндекс для отбития чеков в обязательном порядке запрашивает список товаров в таком формате:
<input name="ym_merchant_receipt" value='{"customerContact": "+79001231212","taxSystem": 1, "items":[{"quantity": 1.154, "price": {"amount": 300.23}, "tax": 3,"text": "Зеленый чай \"Юн Ву\", кг","paymentMethodType": "full_prepayment ","paymentSubjectType": "commodity"},{"quantity": 2, "price": {"amount": 200.00}, "tax": 3,"text": "Кружка для чая, шт., скидка 10%","paymentMethodType": "full_prepayment ","paymentSubjectType": "commodity"}]}' type="hidden"/>
Как такое реализовать?
-
Через файл обмена. Обязательно завтра напишу, спасибо за помощь. Попробую сначала уменьшить выборку, ведь такая проблема существует только с группированными товарами у которых есть гроуп ид.
-
дык я же говорю сделайте уникальным экстернал айди, тем самым вы не сможете добавить товар с дублирующим экс айди. я с таким развлекался когда делал парсер мультипоставщика, только там добавлял еще поле поставщика, но если у вас товар только из 1с и весь с внешним ключем (экс айди) тогда это решение для вас.
Вы говорите о индексе UNIQUE? Если сделать это поле уникальным, тогда после исправления ошибки в 1с, не будет создан правильный вариант, так как на сайте висит старый, с неправильным ид группы, но с таким же эксернал ид.
Ошибки в 1с находим не сразу, к этому времени уже создаются варианты с неправильными данными. Часто бывает так, что вариант создается не в своем товаре и вычислить его потом очень трудно. В итоге второй созданный вариант является правильным, так как создается уже после исправления в 1с. Я вижу вариант с удалением, если найден дубль экстернал ид. АмМожет я вас неправильно понял...
-
Как доберусь до компьютера обязательно попробую все предложенные варианты.
более извращенный вариант если предыдущие не сработали - сделать экспорт таблицы, указать уникальным экстернал айди в структуре, сделать импорт, убрать уникальность - гарантировано сработает
тут загвоздка в том, что external_id это уникальный код из 1с, который присваивается вариантам при первой выгрузке. А еще у нас работает группировка товаров по другому id. Иногда наш закупщик путается и заводит в 1с неправильный id группы. После исправления ошибки, если товар успел выгрузиться на сайт с неправильным id группы, создается дублирующий вариант с тем же уникальным кодом external_id, по которому происходит обновление цен и наличия. Получается что созданный до этого первый вариант перестает обновлять наличие и цену и вообще может висеть не в своем товаре (в следствие ошибки заведения в 1с). Этот запрос и был призван такое исправлять. то есть при каждой выгрузке проверять задвоенные варианты и оставлять только последний из созданных.
Была мысль запихнуть его прямо в обработчик выгрузки из 1с, но теперь понимаю, что решение очень нерациональное. Может подскажете куда копнуть?
-
Добрый вечер. Возникла необходимость удалить все варианты у которых задублировано поле "external_id", кроме последнего.
Получился запрос:
DELETE n1 FROM s_variants n1, s_variants n2 WHERE n1.id < n2.id AND n1.external_id = n2.external_id
Удаляет задублированное поле с меньшим id
На тестовом магазине с маленьким количеством товара все ок. На магазине в 10000 товаров захлебывается. Помогите пожалуйста упростить запрос. Может есть альтернатива?
-
Добрый день. Возникла необходимость вывести сумму остатков товара на складе. То есть посчитать все остатки у вариантов товара и вывести их сумму.
Рабочий вариант (сомнительный):
{assign var="sumstock" value="0"} {foreach $product->variants as $v} {$sumstock = $sumstock +$product->variant->stock} {/foreach} {if $sumstock >0}На складе: {$sumstock|convert}{/if}
Есть сомнения на счет быстроты выполнения в шаблоне products.tpl Насколько это рациональный способ? У нас могут быть товары с 40+ вариантами.
Может кто-то реализовывал другим способом?
-
{if in_array($bc->id, $category->children) && $bc->id != $category->id}
Примерно так
Спасибо большое. Дайте обниму.
-
Осталось придумать, как скрыть категорию бренда, если мы туда уже зашли.
- Фотоаппараты
--- Ручные (присвоен бренд canon)
--- Автозаводные (присвоен бренд canon)
Если зайти в "Автозаводные" , все равно показывает ее в списке.
-
Я не очень понятно задачу изложил. Имелся ввиду вывод категорий бренда из доработки: http://forum.simplacms.ru/topic/7909-%D0%BA%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D0%B8-%D0%B2-%D0%BA%D0%BE%D0%BC%D0%BF%D0%B0%D0%BD%D0%B8%D0%B8-%D0%B8%D0%BB%D0%B8-%D0%BB%D0%BE%D0%B3%D0%B8%D0%BA%D0%B0-%D0%B7%D0%B0%D0%B4%D0%BE%D0%BC-%D0%BD%D0%B0%D0%BF%D0%B5%D1%80%D0%B5%D0%B4/
Дайте код, который у вас есть сейчас (который выводит все категории Бренда)
А условие будет примерно такое:
{if in_array($c->id,$category->children)} ... {/if}
В цикле вывода категорий бренда - выводим только те категории, которые есть в $category->children
Спасибо, то что нужно! Вот такой вывод почти идеален:
{foreach $brand_cat as $bc} {if in_array($bc->id, $category->children)} <a href="catalog/{$bc->url}/{$brand->url}"> {$bc->name}</a> {/if} {/foreach}
-
Зря я создал новую тему. Надо было поднять старую, тогда бы и контекст был понятен.
Вывод категорий бренда:
{if $brand} {foreach $brand_cat as $bc} <a href="catalog/{$bc->url}/{$brand->url}">{$bc->name}</a> {/foreach} {/if}
-
{if $category->subcategories} ... {/if}
Это условие "если есть детки у категории".
Не сработает с таким вариантом событий:
- Фотоаппараты
--- Ручные (присвоен бренд canon)
--- Автозаводные (присвоен бренд canon)
- Пылесосы CANON (присвоен бренд canon)
Если мы зайдем в бренд в фотоаппаратах: фотоаппараты/ручные/canon
то получим вот такой список категорий:
- Ручные
- Автозаводные
- Пылесосы CANON
-
Добрый день. в симпле есть 2 места, где мы можем посмотреть товары привязанные к бренду:
1) http://demo.simplacms.ru/brands/canon
2) http://demo.simplacms.ru/catalog/fotoapparaty/canon
Возникла необходимость во втором случае выводить категории, в которых лежат товары этого бренда.
Есть замечательная доработка от ExtraBash и Noxter'a:
Но как оказалось, с ее помощью выводятся ВСЕ категории, в которых лежат товары бренда. Это отлично подходит для 1 варианта.
В случае 2 не логично показывать категорию бренда "Пылесосы", так как мы выбрали бренд в категории "сотовые телефоны".
Как можно вывести в бренде только категории деток?
-
-
Maksclub, вот это оперативность =)
Файл фида, отдающий максимальную информацию в поиск, включая все свойства.
Его также можно использовать для выгрузки на яндекс маркет.
<name>Наименование товара</name> <vendor>Бренд</vendor> <vendorCode>Артикул</vendorCode> <description>Описание $p->description : $p->annotation<description/> <param name="Свойство">значение свойства</param> <price>цена</price> <oldprice>старая цена</oldprice>
-
Согласен. Открываются невиданные возможности фильтрации результатов поиска.
По поводу бренда. Наверное хорошо и артикул туда закинуть.
// Товары $simpla->db->query("SET SQL_BIG_SELECTS=1"); // Товары $simpla->db->query("SELECT v.price, v.id as variant_id, p.name as product_name, v.name as variant_name, p.url, p.annotation, pc.category_id, i.filename as image, b.name as brand, b.url as brand_url FROM __variants v LEFT JOIN __products p ON v.product_id=p.id LEFT JOIN __products_categories pc ON p.id = pc.product_id AND pc.position=(SELECT MIN(position) FROM __products_categories WHERE product_id=p.id LIMIT 1) LEFT JOIN __images i ON p.id = i.product_id AND i.position=(SELECT MIN(position) FROM __images WHERE product_id=p.id LIMIT 1) LEFT JOIN __brands b ON p.brand_id = b.id WHERE p.visible AND (v.stock >0 OR v.stock is NULL) GROUP BY v.id"); print "<offers> ";
<vendor>".htmlspecialchars($p->brand)."</vendor> ".($p->sku ? '<vendorCode>'.$p->sku.'</vendorCode>' : '')."
-
Maksclub, ого! Даже не знаю как выразить свой восторг.
По поводу фида. Стандартный фид в принципе имеет в себе все необходимое, кроме характеристик. Опять же все подряд характеристики туда пихать не очень рационально (их может быть очень много).
Как думаете на счет такого варианта:
Cразу после описания в <description> или в тег <param> выводим те характеристики, которые отмечены в фильтре (значит самые важные).
Например вот так:
if (!empty($features[$p->product_id])) { foreach($features[$p->product_id] as $feature) { print " <param name='".htmlspecialchars($feature->name)."'>".htmlspecialchars($feature->value)."</param> "; } }
Еще наверное бренд хорошо выводить
<vendor>Adidas</vendor>
-
Мы все знаем, что одно из самых узких мест в Simpla является ужасный поиск товаров. Но есть решение, которое может все изменить.
Недавно команда Яндекса выпустила в бетатестирование новый полноценный поиск для интернет магазинов. https://tech.yandex.ru/sitesearch/shopsearch/
Он понимает запросы в свободной форме, исправит ошибки и опечатки, выводит подсказки, разберается с разными вариантами написания названий. Сам результат можно отфильтровать по категории, по наличию в продаже, по ценовому диапазону.
Можно быстро и легко подключить страницу с поиском, но стилизованную яндексом. Для этого надо добавить пару скриптов на сайт и скормить файлик с YML каталогом.
Самое интересное: с помощью Яндекс API можно получать сырые JSON данные, которые можно как угодно стилизовать в своем магазине.
Предлагаю обсудить возможности этого поиска.
-
Попробуйте где нибудь в шаблоне, например в каталоге это дело вывести.
Пробовал. Вся проблема в том, что они не сформируются пока не пройдешься руками по всем товарам, а прайс необходимо формировать автоматически.
-
Пытаюсь добавить картинки в Excel-прайс с помощью библиотеки PHPExcel.
Для добавления картинки нужно указывать адрес типа:
/home/web/site.com/www/files/products/kartinka.250x250.jpg
dirname (dirname ( __FILE__ ) ) . '/files/products/'.preg_replace('@\.([^\.]+)$@', '.250x250.\1', $p->image);
Такая конструкция выдает вроде бы правильный путь, но картинка по факту не существует. То есть не сгенерирована. Генерация происходит уже после того как зайти по этому урлу.
http://site.com/files/products/kartinka.250x250.jpg
$simpla->design->resize_modifier($p->image, 250, 250)
Вот такая конструкция то же не генерирует файл, пока к нему не обратятся (если я все правильно понял)
Как автоматически сгенерировать картинки определенных размеров?
-
Добрый вечер, форумчане.
Движок оброс множеством доработок, приличным трафиком и ~10000 товарами. Приключилось все еще на хостинге, что привело меня к переезду на VDS.Характеристики машины:
CPU: 4 Core RAM: 4096 Mb Диск: 20 Gb,SSD
А приключилось следующее:
При неизвестных мне обстоятельтвах, mysql не хватает памяти выполнить некоторые запросы. Он сбрасывает кеш на диск и сбрасывает его до тех пор, пока не займет все пространство на диске, что приводит к блокировке всех сервисов, как mysql, так и php.
В логе ошибок PHP - все кристально чисто.
mysqltuner - говорит, что конфиги правильно настроенны.
а вот в логах mysql-slow есть много интересного:
Запросы с большим временем выполнения и неиспользующим индексы:
# Time: 160318 14:02:09 # User@Host: o[o] @ localhost [] # Thread_id: 18308 Schema: o QC_hit: No # Query_time: 240.045449 Lock_time: 0.000199 Rows_sent: 1 Rows_examined: 8227 SET timestamp=1458291729; SELECT p.id, p.url, p.brand_id, p.name, p.annotation, p.body, p.bodytwo, p.video, pc.category_id, p.position, p.created as created, p.visible, p.proizvodstvo, p.featured, p.meta_title, p.meta_keywords, p.meta_description, b.name as brand, b.url as brand_url FROM s_products p INNER JOIN s_products_categories pc ON pc.product_id = p.id LEFT JOIN s_brands b ON p.brand_id = b.id , s_variants v WHERE 1 AND p.id=v.product_id AND (v.sku LIKE "%Самокат%" OR p.name LIKE "%Самокат%" OR p.meta_keywords LIKE "%Самокат%") AND p.id=v.product_id AND (v.sku LIKE "%3-х%" OR p.name LIKE "%3-х%" OR p.meta_keywords LIKE "%3-х%") AND p.id=v.product_id AND (v.sku LIKE "%колесный%" OR p.name LIKE "%колесный%" OR p.meta_keywords LIKE "%колесный%") AND p.id=v.product_id AND (v.sku LIKE "%Marvel%" OR p.name LIKE "%Marvel%" OR p.meta_keywords LIKE "%Marvel%") AND p.id=v.product_id AND (v.sku LIKE "%Spider%" OR p.name LIKE "%Spider%" OR p.meta_keywords LIKE "%Spider%") AND p.id=v.product_id AND (v.sku LIKE "%Man%" OR p.name LIKE "%Man%" OR p.meta_keywords LIKE "%Man%") AND p.visible=1 ORDER BY (SELECT p.position FROM s_variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM s_variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)DESC LIMIT 0, 150;
Или вот этот, с пугающим значением Rows_examined
# Time: 160318 13:26:07 # User@Host: r[r] @ localhost [] # Thread_id: 17388 Schema: r QC_hit: No # Query_time: 0.049616 Lock_time: 0.000179 Rows_sent: 24 Rows_examined: 19005 SET timestamp=1458289567; SELECT p.id, p.url, p.brand_id, p.name, p.yandex_name, p.annotation, p.body, p.bodyniz, p.bodyunderbutton, p.video, p.no_active_product, p.position, p.created as created, p.visible, p.yandex, p.tiu, p.freelance_status, p.featured, p.meta_title, p.meta_keywords, p.meta_description, b.name as brand, b.url as brand_url FROM s_products p LEFT JOIN s_brands b ON p.brand_id = b.id , s_variants v WHERE 1 AND p.id=v.product_id AND (v.sku LIKE "%%" OR p.name LIKE "%%" OR p.meta_keywords LIKE "%%") AND p.id=v.product_id AND (v.sku LIKE "%Карапуз-5А%" OR p.name LIKE "%Карапуз-5А%" OR p.meta_keywords LIKE "%Карапуз-5А%") AND p.id=v.product_id AND (v.sku LIKE "%%" OR p.name LIKE "%%" OR p.meta_keywords LIKE "%%") AND p.visible=1 ORDER BY (SELECT p.position FROM s_variants pv WHERE p.id = pv.product_id AND pv.position=(SELECT MIN(position) FROM s_variants WHERE (stock>0 OR stock IS NULL) AND product_id=p.id LIMIT 1) LIMIT 1)DESC LIMIT 0, 200;
Какие то запросы висят, блокируют таблицу и пишут кеш в гигабайты! Что за запросы, понять я не могу.
Прошу вашей помощи! Предоставлю любые листинги чего угодно. Если хотите денег за помощь - говорите, за мной не заржавеет.
-
Яндекс время от времени меняет свою верстку, что убивает наш любимый парсер.
Это рабочий на данный момент парсер (надолго ли?)
Скачать
-
Вся загвоздка в том, что бы вывести поля находящиеся в таблице юзера(зарегистрированного),который сделал заказ, а не самого заказа. В order.tpl спокойно выводятся такие вещи как:
{$user->company|escape}
Как такое можно вывести в админке в orders.tpl ? Спасибо.
Условие в шаблоне products.tpl на присутствие\отсутствие акционных товаров
в Общие вопросы по функционалу и дизайну
Опубликовано · Изменено пользователем Enhill
Мне подсказали вот такое решение:
ProductsView
В шаблоне products.tpl
Работает отлично. Но есть вопрос к профессионалам: не избыточно ли?