Встретилась сложная экзотическая ошибка, с которой боролся два дня.
Исходные данные:
1. У товара цена 0.
2. У этого товара имеется опция и какие-либо значения с ценами.
3. У этой опции в блоке "Показ опции" стоят галочки только "в списке товаров" и "на странице с детальным описанием".
4. Список товаров на странице результатов поиска отображается, как "Подробный список".
При расширенном поиске по значению опции вываливается страница с результатами поиска. На этой странице ставим галочку напротив какой-либо опции, сверху появляется правильная стоимость товара, но в корзину товар добавляется с нулевой (!!!) ценой без каких-либо ошибок и сообщений.
Ковырялся я довольно долго с этой проблемой, в итоге докопался до файла shopping_cart.php. В нем формируется такой запрос:
PHP код:
SELECT ip.property_type_id, ip.property_order, ip.usage_type, ip.property_id, ip.sub_item_id,
ip.property_name, ip.quantity, ip.quantity_action, ip.property_price_type,
ip.additional_price, ip.trade_additional_price, ip.control_type, ip.required,
ip.parent_property_id, ip.parent_value_id, ip.free_price_type,
ip.free_price_amount, ip.use_on_second
FROM (va_items_properties ip
LEFT JOIN va_items_properties_sites ips
ON ip.property_id=ips.property_id)
WHERE (ip.item_id=2000257 OR ip.item_type_id=9)
AND ip.sites_all=1 AND ip.use_on_table=1
ORDER BY ip.property_order, ip.property_id;
Результат запроса - пусто. Поэтому дальнейшая обработки опций (идет сразу после этого запроса) не происходит.
В запросе сразу увидел подозрительное условие:
PHP код:
ip.use_on_table=1
из которого следует, что опции будут обрабатываться только на странице с табличным видом, что немного странно, ведь в данном случае отображение товаров - "Подробный список".
Посмотрев выше, нашел такой код:
PHP код:
} elseif ($type == "table") {
$sql .= " AND ip.use_on_table=1 ";
из которого видно, откуда берется условие. Но здесь опять странность - получается, что у меня тип - "table", а ведь должен быть "list".
Глянув исходный код страницы результатов поиска убедился, что переменная type в форме имеет значение table:
Код HTML:
<input type="hidden" name="type" value="table" />
Теперь надо разобраться - почему table, а не list? Открываю block_products_list.html и вижу, что значение переменной type жестко прописано, как table. Это хорошо, а то я думал, что через переменную задается. Меняю на list, сохраняю, проверяю - теперь работает правильно.
Ну все, время позднее, пойду спать с чистой совестью.
PS: А в файле block_products_grid_view.html, я так понимаю, вместо table должно быть grid.
------------------------------------------------------
В админке не работает экспорт платежной системы в xml-файл.
Решение:
В файле admin_payment_system.html в строке 288 нужно заменить
на
Социальные закладки