Jump to content

Фильтр отсутствующие товары в админке


Recommended Posts

Заметил момент, при попытки отфильтровать товары у которых количество товаров 0, мне выдает, только те, у которых 1 либо все варианты с кол-вом товара 0, но те у которых один вариант кол-во "безлим" а второй вариант 0, то фильтр его не находит.

Пытался поправить запрос в api/Products.php в функции get_products() 

но честно, запутался 

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']));

Подскажите как поправить запрос

Edited by technokid
Link to post
Share on other sites

Интересно, как это?

Вы придумали запрос, он у вас не работает - и это БАГ Симплы?

 

Ничего я не придумал. Это стандартный запрос симплы. вот тут сами посмотрите https://github.com/pikusov/Simpla/blob/master/api/Products.php#L72, еще как вариант можете войти в демо версию админки симплы и сами увидите этот баг

Link to post
Share on other sites

То, что Вы описали - никакой не баг, работает правильно, именно так, как задумано.

Схема проста - есть товар, у него несколько вариантов, у вариантов есть количество (stock).

 

Количество для товара - формально не определено. Когда говорят про кол-во товара, обычно имеют в виду суммарное количество его вариантов. Поэтому товар с количеством =0 - это товар, у которого ВСЕ варианты имеют кол-во 0.

 

Если Вам хочется трактовать это иначе,  например, если для Вас товар с количеством 0 - это тот, у которого в одном варианте 0, а в других - произвольное число, то программируйте  указанный фрагмент по-своему.

Edited by Kors
Link to post
Share on other sites

То, что Вы описали - никакой не баг, работает правильно, именно так, как задумано.

Схема проста - есть товар, у него несколько вариантов, у вариантов есть количество (stock).

 

Количество для товара - формально не определено. Когда говорят про кол-во товара, обычно имеют в виду суммарное количество его вариантов. Поэтому товар с количеством =0 - это товар, у которого ВСЕ варианты имеют кол-во 0.

 

Если Вам хочется трактовать это иначе,  например, если для Вас товар с количеством 0 - это тот, у которого в одном варианте 0, а в других - произвольное число, то программируйте  указанный фрагмент по-своему.

Я с Вами не совсем согласен.

Я могу сказать как кол-во товара в общем, так и количество вариантов по товару.  Если мне дают возможность показать товары которые отсутствуют, то почему я не могу видеть вариант товара который закончился. Когда у меня магазин в 15 тысяч позиций или больше, как я должен отловить ту позицию, которая закончилась?

Link to post
Share on other sites

Когда у меня магазин в 15 тысяч позиций или больше, как я должен отловить ту позицию, которая закончилась?

Отловить можно, сделав экспорт.

Если это не подходит то, похоже, Вам надо что-то свое специфичное. Тогда это отдельной доработкой.

Если готовы оплачивать, обращайтесь...

Link to post
Share on other sites

 

Отловить можно, сделав экспорт.

 

Скажу честно, при 15 тысячах товара, экспорт работает очень медленно.

На счет отдельной доработки, я не вижу тут что-то глобальное дорабатывать. Ведь на самом деле, тут просто нужно изменить запрос.

Вот так он выглядит если нажать "Отсутствующие" 

SELECT p.id, p.url, p.brand_id, p.name, p.annotation, p.body, p.position, p.created as created, p.visible, p.partner, p.featured, p.meta_title, p.meta_keywords, p.meta_description, b.name as brand, b.url as brand_url FROM __products p LEFT JOIN __brands b ON p.brand_id = b.id WHERE 1 AND (SELECT count(*)>0 FROM s_variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = 0 ORDER BY p.position DESC LIMIT 0, 20

Я не понимаю что означает вот этот кусок 

WHERE 1 AND (SELECT count(*)>0 FROM s_variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = 0

вернее SELECT count(*)>0 

 

Тут вопрос более в помощи с запросом, а не доработкой 

Link to post
Share on other sites

На счет отдельной доработки, я не вижу тут что-то глобальное дорабатывать. Ведь на самом деле, тут просто нужно изменить запрос.

 

Изменить его можно тысячами способов. Вам все равно каким?

 

 

Я не понимаю что означает вот этот кусок

WHERE 1 AND (SELECT count(*)>0 FROM s_variants pv WHERE pv.product_id=p.id AND pv.price>0 AND (pv.stock IS NULL OR pv.stock>0) LIMIT 1) = 0
вернее SELECT count(*)>0

 

Вы вот даже не можете:

1. точно сформулировать свой вопрос,

2. точно сказать, какой кусок непонятен,

3. прочитать учебник по SQL, чтобы там получить ответ,

4. чуть-чуть поэкспериментировать с запросом в PhpMyAdmin, чтобы посмотреть на результат и попытаться понять смысл (который довольно прост и прозрачен).

 

Только можете утверждать, что тут, мол, все легко.

Сам я не знаю, но знаю, что им это легко.

А спецы, такие нехорошие, наперебой не кидаются отвечать...

 

Тут вопрос более в помощи с запросом, а не доработкой

 

Если б Вы еще могли ТОЛКОМ задать этот вопрос...

Link to post
Share on other sites

Если изменить запрос в указанном Вами месте так, как Вы желаете, то

1. В админке будет работать по Вашему желанию,

2. Но на сайте, скорее всего, исчезнет в показе львиная доля товаров,

3. И будете Вы потом писать негатив на того, кто Вам пытался помочь.

 

По-хорошему, чтобы достичь Ваших (туманно объясненных целей), надо проводить более сложные изменения в НЕСКОЛЬКИХ местах. Потому никто и не спешит изменить для Вас в запросе пару-тройку лексем...

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...