Тэг ‘oscommerce’

Oscommerce - выбираем модуль скидки для клиента или пишем свой.

Для OSCommerce существует несколько готовых решений для организации скидок на своем сайте. Самый простой способ найти большинство дополнений (addon) - обратиться на официальный сайт.

http://www.oscommerce.com/community?contributions=&search=discount&category=all

Одной из самых популярных в последнее время считается возможность предоставлять скидку по кодовому слову (или по купону) - т.н. Discount Code. Модули для создания купонов на скидку есть и для OSCommerce-магазинов.

Модули скидки для OSCommerce

Персональная скидка - Customer specific discount ot_customer discount.php - позволяет устанавливать персональную скидку каждому клиенту.

Скидка в зависимости от количества товаров - Quantity discount ot_qty_discount.php - скидка в зависимости от количества купленных товаров

Скидка в зависимости от группы, к которой относится пользователь - ot_lev_discount  - позволяет определять скидку для группы. Пользователя можно отнести к одной из групп.

Структура модуля скидок для OSCommerce

Большинство скидок сделаны в виде модулей order_total (префикс ot_). Это значит, что скидка (без “доработок”) проявляется лишь во время окончательного оформления заказа, а также в письме с подтверждением заказа. Каждый модуль оформляется в виде отдельного класса с несколькими обязательными методами - install, remove, check, process.

Методы install и remove, как несложно догадаться отвечают за установку и удаление модуля соответственно (как правило, содержат операции вставки и удаления строк в таблице конфигурации)

Метод process отвечает непосредственно за обсчет скидки (глобальная переменная $order содержит информацию о заказе.. ) и за её отображение:

function process() {
$od_amount = $this->calculate_discount(); // функция подсчета ссылки.
//при необходимости можно использовать, например global $customer_id
$this->output[]=array( //массив, по данным которого формируется строка таблицы "итого"
'title'=>$this->title.':', // название скидки (персональная скидка, скидка за количество)
'text'=>$currencies->format($od_amount), // форматированное число с обозначением валюты
'value'=>
$od_amount //сумма скидки
);
$order->info['total'] = $order->info['total'] - $od_amount; //считаем итог
$order->info['subtotal'] -= $od_amount;//считаем подитог;
}

Предусмотрена возможность указания порядка обсчета скидок (равно как и других модулей order_total - доставка, налог) - для этого в методе-конструкторе следует задать $this->sort_order (как правило, с правой стороны -  define-”константа” в таблице конфигурации,  редактируется в админке на странице свойств модуля)

Опубликовано Июль 29, 2011 | автор: levik  |  Нет комментариев »

OScommerce boxes - пишем свой бокс

Краткая инструкция по созданию своего бокса в OSCommerce. Составлена по мотивам заметок, поэтому может содержать некоторые неточности. Основной принцип, однако сохраняется

Бокс в OSCommerce - информационный блоки, который можно кэшировать отдельно и выводить в нужном месте шаблона. К примеру, перечень категорий или блок “текстовые страницы”, новинки каталога или хиты продаж. Создадим свой бокс, который для определенности назовем my_new_box.

1. определяемся с шаблоном бокса.

Скорее всего, тут сложностей не возникнет - обычно в шаблоне уже присутствуют боксы, которые внешне похожи на наш. Если же нет - совместными усилиями дизайнера+верстальщика (возможно, в одном лице вебмастера) сооружаем HTML код бокса. В общем виде что-то вроде:
Читать целиком »

Опубликовано Июль 2, 2011 | автор: levik  |  Нет комментариев »

OSCommerce отображает не все товары на главной странице

Столкнулся с тем, что OSCommerce отображает не все товары на главной странице, несмотря на то, что “в корень” они скопированы. Методом научного тыка довольно быстро удалось выяснить, что не отображаются товары с “пустым” (т.е. незаполненным) производителем.

Когда нашел - вспомнил, что и раньше сталкивался с проблемой отображения товаров на главной. При необходимости устраняется исправлением SQL запроса (INNER JOIN на LEFT JOIN).

ps. Версия Oscommerce не из последних…

Опубликовано Ноябрь 20, 2010 | автор: levik  |  Нет комментариев »

oscommerce - массовое удаление заказов.

Информация о заказах в OsCommerce хранится в нескольких таблицах (все они начинаются с oders…)

Для быстрого массового удаления информации о заказах можно использовать SQL-скрипт:

delete from orders_products where orders_id in (select orders_id from `orders` WHERE date_purchased<'2010-10-01');
delete from orders_products_attributes where orders_id in (select orders_id from `orders` WHERE date_purchased<'2010-10-01');
delete from orders_status_history where orders_id in (select orders_id from `orders` WHERE date_purchased<'2010-10-01');
delete FROM `orders_total` where orders_id in (select orders_id from `orders` WHERE date_purchased<'2010-10-01');
delete FROM `orders` WHERE 1 and date_purchased<'2010-10-01';

Да, самое главное.. не забудьте сделать резервную копию!
Удачи!

UPD Массовое удаление клиентов (кроме админов)

delete FROM `address_book` WHERE customers_id not in (select customers_id from admin_access); delete FROM `customers` WHERE customers_id not in (select customers_id from admin_access);
delete FROM `customers_info` WHERE customers_id not in (select customers_id from admin_access);

Опубликовано Ноябрь 11, 2010 | автор: levik  |  Нет комментариев »

Oscommerce: вывод лишних атрибутов товара в каталоге

В очередной раз порадовал OsCommerce - столкнулся с выводом лишних атрибутов товаров в листинге каталога. =)

В итоге выяснилось, что дело в том, что два модуля, которые работают по отдельности, могут влиять на работу друг друга. Особенность “модульности” магазинов на OsCommerce - как таковых “модулей” скорее нет. Есть файлик и куча инструкций к нему, какую строку и куда вставить… Это в лучшем случае.

Однако, тем не менее, магазин функциональный и довольно популярен… В частности, можно встретить множество сайтов на различных “сборках” OsCommerce. Именно в одной из таких сборок при выводе select-поля с атрибутами прямо в листинге товаров, появлялись “лишние” атрибуты (которых не было, например при просмотре карточки товара).

После непродолжительных поисков нашел, что всё из-за поля `attributes_hide_from_groups` таблицы  `products_attributes`, которое не проверялось при формировании массива products_options_array для функции tep_draw_pull_down_menu();

$products_options_query = tep_db_query(”select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from ” . TABLE_PRODUCTS_ATTRIBUTES . ” pa, ” . TABLE_PRODUCTS_OPTIONS_VALUES . ” pov where pa.products_id = ‘” . $listing[$x][’products_id’] . “‘ and pa.options_id = ‘” . $products_options_name[’products_options_id’] . “‘ and pa.options_values_id = pov.products_options_values_id and pa.attributes_hide_from_groups<>’0′ and pov.language_id = ‘” . $languages_id . “‘”);

Ещё один “бонус” в копилку OsCommerce.

Oscommerce пропадают атрибуты при заказе.

Магазин на Oscommerce, часть товаров в заказе проходят без атрибутов, хотя в каталоге они указаны с обязательным выбором атрибутов. Все страницы, с которых можно их добавить в корзину содержат Select с атрибутами, который корректно добавляет товар в корзину.

http://oscomm.biz/index.php?showtopic=13009

Option Type Feature в shopping_cart.php на 103 и 122 строках добавлял к имени hidden поля зачем-то “+++”.$id
удаляешь, и все работает…

Опубликовано Июль 6, 2010 | автор: levik  |  Нет комментариев »

OsCommerce - замеченные глюки-баги

Решил собрать некоторые глюки Oscommerce (версии и сборки различные) , потому как порой, как оказалось, они встречаются чаще одного раза.. А когда помнишь, что ты уже это делал.. и не помнишь, как.. а поиск выдает что-то не то..

Возможно, окажется полезным не только мне..

OsCommerce не отображает некоторые товары

Поскольку в этом SHOP-монстре куча всевозможных настроек, следует убедиться, что “скрытый” от глаз посетителя товар не отключен этими настройками. Естественно, если один товар отображается, а другой - нет, следует… сравнить атрибуты/параметры этих товаров в админ панели Oscommerce или непосредственно в базе. В моем случае, для не отображаемых товаров просто не был указан производитель.

OsCommerce не добавляет некоторые товары в корзину

Столкнулся с “чудесами” - все товары (все проверенные - порядка 30) в корзину добавляются нормально, один - ну никак не хочет. При попытке добавить в корзину происходит переход на пустую корзину.
Проблема оказалась в добавлении к атрибуту action в теге form дополнительного параметра &sid=id_sesion..

Oscommerce не дает войти в админ центр

Проблема оказалась в принудительной установке Cookies - поправил изменением значения в таблице configuration (непосредственно в базе). Искать в базе в таблице `configuration`
where configuration_key like '%cookie%'
менять с true на false и наоборот.

Oscommerce выдает ошибку при обновлении версии MySQL

При обновлении базы MySQL, используемой OsCommerce с версии 4 на версию 5, магазин “радует” нас англоязычными сообщениями об ошибках. Поиск по аглицким форумам помог решить проблему - в свое время  пару часов пришлось повозиться. Однако, сейчас уже и не вспомню… Если повторится - дополню…

На самом деле, несмотря на кажущуюся “громоздкость”, oscommerce , если разобраться, не такой уж сложный магазин. Наличие форумов, как русскоязычных, так и забугорных, дает возможность вникнуть и решить практически любую проблему.. (не путать с “проблему решат за тебя”.. хотя, обычно, вопрос цены…)

UPD
Oscommerce не добавляет товары в корзину

При попытке добавить товар в корзину (а также при регистрации) перебрасывает на страницу “включите Cookies” (cookie_usage.php) с сообщением:

Для работы с нашим магазином Вам необходимо включить поддержку cookies в Вашем браузере.

Из возможных вариантов:
1. неправильно указаны настройки в файле /includes/configure.php и admin/includes/configure.php (ситуация часто возникает при переездах oscommerce-магазина с одного хостинга на другой:
define('HTTP_SERVER', 'http://server.name'); // eg, http://localhost - should not be empty for productive servers
define('HTTPS_SERVER', 'https://server.name'); // eg, https://localhost - should not be empty for productive servers
define('ENABLE_SSL', false); // secure webserver for checkout procedure?
define('HTTP_COOKIE_DOMAIN', 'server.name');
define('HTTPS_COOKIE_DOMAIN', '');
define('HTTP_COOKIE_PATH', '/');

2. некоторые магазины на базе OSCommerce требуют включения директив php:
php_value register_globals on
php_value register_long_arrays on

3. если ситуация с cookies на локальном компьютере, то, возможно это из-за некорректного распознавания домена localhost некоторыми браузерами (они считают домен некорректным, если в нем нет точки). Или настраивать локальный web-сервер, или залезть в includes/application_top.php и подправить установку домена cookies: $cookie_domain = ” (при выкладке на сервер не забыть вернуть как было :)

Опубликовано Август 19, 2008 | автор: levik  |  Комментарии (4) »

оптимизация Oscommerce - уменьшаем нагрузку на сервер

OsCommerce - довольно известный движок для создания интернет-магазина. Широкие возможности, большое количество модулей-патчей - несомненный плюс. Однако, как и у всего, у Oscommerce имеются и минусы.

Одним из существенных недостатков, который зачастую оказывает решающее влияние при выборе движка для магазина является высокая требовательность к ресурсам (”громоздкость”, низкая производительность или “тормознутость” - термины не совсем корректные, однако, понятные каждому).

Похоже, что при разработке OScommerce вопросам производительности уделялось не так уж много внимания… Полностью переписывать OScommerce - решение далеко не оптимальное. Попробую собрать некоторые приемы, которые позволяют существенно снизить нагрузку на сервер со стороны OSCommerce.

Продолжение статьи про оптимизацию OsCommerce

Опубликовано Июнь 27, 2008 | автор: levik  |  Комментарий (1) »

easypopulate или импорт-экспорт в OsCommerce

EasyPopulate - хто этО?

EasyPopulate - плагин (или файл-модуль.. как угодно) для OsCommerce, который позволяет экспортировать товары из интернет-магазинов на базе OScommerce (например, в csv-формате), редактировать их (например, в Excel) и импортировать обратно в интернет-магазин. Кроме того, файл с информацией о товарах можно автоматически генерировать (часто удобно делать напрямую обработкой-выгрузкой из 1С).

Сомнений не возникает, что  EasyPopulate - штука полезная. Если сборка магазина OsCommerce более-менее солидная, то скорее всего, наличие сей “фичи” уже имеется. Если же нет - можно установить таковую и самостоятельно.

Как начать работу с Easypopulate

Проще всего сделать экспорт товаров (ищем в меню админки где-то в каталоге) из интернет-магазина и открыть получившийся файл любым редактором csv (скорее всего, это будет Excel). Если файл с расширением .txt, то придется пройти небольшую процедуру определения формата файла - табуляторы, строки, форматы ячеек.. Проблем возникнуть не должно.

Структура файла не слишком замысловата - первая строка, как и положено “заголовочная”. Значение большинства полей интуитивно понятно (v_products_id, v_products_model,v_products_image…). Для полной уверенности можно ознакомиться с форматом данных EasyPopulate. В последующих строках идут значения полей для каждого товара. Следует отметить, что при необходимости товар и категории будут добавлены автоматически. Глубина вложенности категорий ограничена шестью, но на практике этого вполне хватает.

Внутри easypopulate или “ручками”

При наличии некоторых знаний php беглый просмотр файла easypopulate.php прояснит некоторые детали,  изначально скрытые от глаз  пользователя. Документацию ведь читать некогда :) Да.. ещё, следует обратить внимание на версию файла… И не торопиться обновлять до последней - скорее всего в используемой версии/сборке магазина файл был отредактирован и довольно сильно отличается от оригинального (такова уж особенность OsCommerce) …

Встречался с версиями, у которых “всё в одном” - html (+php, куда ж без него) код, импорт и экспорт в одном файле. Первая половина отвечает за экспорт, (блок if download…) , потом - импорт в Oscommerce ($localfile or is_uploaded_file), импорт с разбиением на части (if (is_uploaded_file($usrfl) && $split==1) …) - что-то похожее реализовано в импорте для virtuemart (joomla) , дальше - вывод HTML (форма для импорта), чуть ниже - функции обработки.

Основная обработка производится функциями ep_create_filelayout() и walk() (импорт)

Импорт в Oscommerce дополнительных полей

Добавить в файл  импорта дополнительные поля (не забыть заголовки) и обработать их в easypopulate (в функции walk). В общем-то всё :)

Импорт в Oscommerce товаров и атрибутов в одном файле

Вообще, в файле easypopulate реализован импорт-экспорт атрибутов отдельным файлом (для экспорта выбрать файл экспорта - атрибуты товаров). Т.е. товары загружаем файлом товаров, а атрибуты - файлом атрибутов. И экспорт реализован слегка.. скажем так неудобно - в результате много “пустых” данных (а-ля представляем граф матрицей или почти  таблица пифагора - на пересечениях строки и столбца, если для товара имеется атрибут, то в графе “Цена” указывается значение разницы от основной. И независимо от того, есть атрибут или нет - его id и значение атрибута)

v_attribute_options_id_1 v_attribute_options_name_1_4 v_attribute_values_id_1_1 v_attribute_values_price_1_1 v_attribute_values_name_1_1_4 v_attribute_values_id_1_2 (… и тд для всех значений атрибута _1, потом _2)

Строчки присутствуют для всех товаров, столбцы - для всех атрибутов и значений атрибутов*3

Конечно, это не всегда удобно - например вариант экспорта атрибутов, когда в магазине ~6 тыс. товаров и НЕКОТОРЫЕ товары имеют один атрибут на vps генерировался несколько минут и весил в итоге 1.5 Мб. Импорт такого файла - тоже процедура довольно затратная.. :)

Как вариант - импорт в Oscommerce товаров и атрибутов одним файлом - добавляем столбец (к примеру, v_my_attribute_1) и помещаем туда значения (или предварительно сформированные ID, соответствующие внутренним ID магазина) и обрабатываем в функции walk.

Если предусмотреть автоматическое создание отсутствовавших ранее атрибутов и обработку для исключения дублирования (из-за пробелов, больших букв и тд.. можно как при импорте данных, так и на этапе формирования выгрузки.. или ещё раньше - “правильное” хранение данных в основной базе), то такой вариант вполне имеет право на сущесвование.

Приходилось сталкиваться с импортом OsCommerce? Нашли ошибку? Есть что добавить?  - Добро пожаловать в комментарии.

Опубликовано Апрель 17, 2008 | автор: levik  |  Нет комментариев »

easypopulate - описание формата данных (Oscommerce)

Easypopulate используется для экспорта-импорта данных (csv файлы - открываются в Excel) в магазинах на базе OScommerce. Краткое описание формата данных и некоторая полезная информация собрана в таблице ниже. Поля отмеченные звездочкой являются обязательными для заполнения. Остальные при необходимости можно оставлять пустыми.

Заголовок Описание формата EasyPopulate
v_products_id ID товара (из базы в магазине). Для новых товаров ставим 0 (ноль)
v_products_model* Код товара (артикул)
v_products_image Адрес основного изображения товара (относительно каталога images/). Файлы предварительно закачиваются по FTP (или в админке) Отображается как в листинге товаров, так и в popup изображении
v_products_image_med Основная картинка товара (при просмотре описания товара).
v_products_image_lrg Основная картинка товара (pop-up).
v_products_image_sm_1
v_products_image_xl_1
v_products_image_sm_2
v_products_image_xl_2
v_products_image_sm_3
v_products_image_xl_3
v_products_image_sm_4
v_products_image_xl_4
v_products_image_sm_5
v_products_image_xl_5
v_products_image_sm_6
v_products_image_xl_6
v_products_name_1* Название товара (максимальная длина - не больше 255 символов - см. длину поля products_name).
v_products_description_1 Описание товара (разрешается использовать HTML тэги)
v_products_info_1 Краткая информация о товаре.
v_products_url_1 Внешняя ссылка на товар(сайт производителя и тд.; указывается без http://)
v_products_head_title_tag_1 HTML-тэг Meta Title (заголовок) для страницы товара.
v_products_head_desc_tag_1 HTML-тэг Meta Description (описание) тэг для страницы товара.
v_products_head_keywords_tag_1 HTML-тэг Meta Keywords (ключевые слова) для страницы товара.
v_products_price* Цена товара в валюте по умолчанию (см. Админка -> Локализация -> Валюты). Разделитель дробной части - ТОЧКА!
v_products_weight Вес товара в килограммах (используется для расчета стоимости доставки). Если не используется - пропускаем.
v_date_avail Ожидаемая дата “доступности” товара (проще оставлять пустой)
v_date_added* Дата добавления товара в магазин в формате YYYY-MM-DD HH:mm:ss (формат строгий!)
v_products_quantity Количество единиц товара на складе. Если не используется, вводим “заведомо большое” - 99999
v_products_quantity_order_min Минимальное количество товара для заказа. Если товар “поштучно” - пропускаем (пусто)
v_products_quantity_order_units Количество единиц в “упаковке” товара (полезно при оптовой торговле)
v_products_sort_order Номер для сортировки (чем меньше, тем выше товар в списке)
v_manufacturers_name Производитель
v_categories_name_1 * Категория, в которую добавляется товар. При необходимости, можно указать полный путь (с подкатегориями) до седьмого уровня вложенности. Неиспользуемые уровни оставляем пустыми.
v_categories_name_2
v_categories_name_3
v_categories_name_4
v_categories_name_5
v_categories_name_6
v_categories_name_7
v_tax_class_title* Название налога. (см. Админка - Места/Налоги - Типы налогов).Скорее всего лучше оставить “–нет–”.
v_status* Статус товара (Active/Inactive - соответственно доступен/недоступен). Пропускать нельзя!
v_action Для удаления товара указать “delete”. Если товар удалять не нужно - пропускаем.
EOREOR* EOREOR - символ “конца строки”

Если Вы считаете, что данная информация о формате данных EasyPopulate неполная - отписывайтесь в комментариях. Будем дополнять вместе!

Опубликовано Март 30, 2008 | автор: levik  |  Комментарии (7) »

Oscommerce - шаблоны по умолчанию

В некоторых версиях OScommerce шаблон товара по умолчанию ( все шаблоны для страницы товара располагаются в каталоге /templates/шаблон_магазина_/module/product_info/)  выбирается как первый открытый файл (opendir)

При изменении даты/времени редактирования, сохранения старых файлов шаблона можно оказаться в неожиданной ситуации - когда товары, в которых шаблон для отображения товаров не указан, будут отображаться иначе, чем до редактирования :))

Варианты решения:
1. перезалить шаблоны в нужном порядке (все файлы из каталога переносим, и первым заливаем нужный “дефолтный” шаблон)
2. в базе прописать для всех товаров со значением product_template = ‘default’ нужный нам шаблон.
3. если необходимости нет, оставить один единственный нужный шаблон для товара.

Опубликовано Март 12, 2008 | автор: levik  |  Нет комментариев »