Дополнительные характеристики товара в списках

Понадобилось мне использовать дополнительные характеристики товара в списках, которые можно создавать в админской части WebAsyst ShopScript. Вот есть у товар трех размеров, в списке товаров в категории показывается, что есть размеры S, M и L, а в списке новинок — нет. Обидно. Тем более, что кнопку «купить» я товарам в списке сделал, но надо же еще размер уточнить.

Чтобы, на скорую руку, исправить это недоразумение добавил в файл /published/SC/html/scripts/classes/class.productlist.php пару строк. В указанном файле надо найти метод getProducts() и перед последней строчкой return $products добавить следующий код:

Все, теперь у каждого товара в списке есть массив дополнительных характеристик product_extra, как у товаров при просмотре категории.

WebAsyst ShopScript убрать авиадоставку из почты

Раз уж я взялся за модули почты, то и до WebAsyst ShopScript руки дошли. Давно хотел убрать из ее «родного» модуля выбор типа доставки — «Наземная» или «Авиа». Все равно почта все по-своему делает, зачем клиента путать? оставим наземную и все. Тем более, что тут на 5 минут занятие.

Изменения надо вносить в файл /published/SC/html/scripts/modules/shiiping/class.russianpost.php. Все изменения вносятся только в метод calculate_shipping_rate()

  1. Закомментарить все присвоения переменной $AirCost. Необязательно, но пусть будет для полноты картины.
  2. Закомментарить все действия с массивом $Rates
  3. После проверки на наличие товара с бесплатной доставкой в заказе убрать все дополнительные проверки и просто вернуть стоимость доставки.

Читать далее WebAsyst ShopScript убрать авиадоставку из почты

Почтовые адреса

Рассматривая кучу платных и бесплатных скриптов для создания интернет-магазинов, обратил внимание на то, что у большинства процесс оформления заказа далек от идеала. Это очень важный этап, который должен быть очень простым для покупателя, с минимумом заполняемых полей.

Сейчас хочу остановиться конкретно на блоке данных с почтовым адресом. Обычно это адрес доставки, но также это может быть адресом плательщика и отличаться от адреса доставки. Платит один человек, получает другой или как-то так. Не важно.

Здесь также пользователь должен с минимумом усилий указать максимум полезной информации. Во всех скриптах обычно заполняются такие поля:

  1. Почтовый индекс
  2. Страна
  3. Регион, штат или другая территориальная единица (если есть)
  4. Город
  5. улица, дом, квартира и т.д.

Для крупных городов, например, для Москвы или Санкт-Петербурга можно дополнительно спросить ближайшую станцию метро. В Webasyst Shop-Script это реализуется дополнительным полем.

Применительно к России возникает вопрос к 3-му пункту, у нас весьма пестрое административное деление. Самое простое — воспользоваться списком кодов субъектов РФ из Википедии. Но тут надо иметь в виду, что некоторые субъекты могут входить в состав других — автономные округа могут входить в состав краев и областей. Большинство реализаций скриптов этого не предусматривают, а зря. Деление на регионы должно быть не плоским списком а древовидным!. Стоп, не надо бежать срочно добавлять поле «parent_id» в существующую базу. Надо сначала погуглить на тему nested sets и проникнуться.

При этом регион «Москва» не идентичен городу Москва. При заполнении списка регионов об этом тоже надо помнить, Зеленоград также входит в состав Москвы, а доставка туда, как правило, отличается ценой.

Также имеет смысл хранить список наиболее крупных населенных пунктов каждого региона, чтобы пользователь мог выбрать город из списка или написать, если в списке нет нужного населенного пункта. Минимум опечаток — максимум точности при определении стоимости доставки.

Update. Раз уж речь зашла о древовидном хранении, то список страны-регионы_(области, края и т.д.) можно хранить в единой таблице. В ней корневыми элементами или элементами первого уровня (корень тогда будет «World» :) ) будут страны. Для классификации можно воспользоваться стандартом ISO 3166 и его подразделами относительно административных единиц.

Множественные уязвимости Shop-Script

По привычке, время от времени, просматриваю сообщения об уязвимости скрипта Shop-Script. Компания Артикус, автор этого скрипта, уже давно перестала его поддерживать и продает теперь новую версию, более навороченную и красивую. Тем не менее этот скрипт разошелся по сети в миллионах копий, как легальных, так и нелегальных. А также породил великое множество продолжений и улучшений. Поэтому обнаруженный мною отчет, несмотря на то, что ему уже 2 месяца, будет интересен многим.

В отчете рассматривался Shop-Script Free — это как раз бесплатная версия того, что ходит по интернету огромным тиражом. На Free версии основана наиболее цельная и популярная доработка под названием «Shop-Script Free Lego Edition».

Вывод неутешительный. На 14 апреля в скрипте имелось 27 уязвимостей, позволяющих атакующему получить доступ к базе данных, манипулировать данными и скомпрометировать систему.

В частности ошибки, позволяющие выполнять команды SQL, в обработке параметров, передаваемых в скрипт: (1) add2cart, (2) c_id, (3) categoryID, (4) list_price, (5) name, (6) new_offer, (7) price, (8) product_code, (9) productID, (10) rating, and (11) save_product. Пруфлинк.