38980

Усовершенствование системы администрирование cs-cart

Дипломная

Информатика, кибернетика и программирование

В этой функции изменяются значения массивов fields и join Контроллеры Базовая схема работы cscrt заключается в вызове одного из двух основных исполняемых PHP файловdmin.php и дальнейшего последовательного подключения PHP файлов реализующих функциональность программы. Для передачи в темплейтер данных для последующего отображения используется следующая конструкция: view ssign'templte_vr_nme' php_vr_nme; Здесь templte_vr_nme задает имя переменной доступной в темплейтере а php_vr_nme определяет содержимое этой переменной....

Русский

2013-09-30

161.35 KB

42 чел.

Содержание

  1.  Введение.
  2.  Описание структуры cs-cart и методов разработки модулей.
  3.  Общедоступные (глобальные) переменные и входящие данные.
  4.  Хуки программного кода (ХПК).
  5.  Контроллеры.
  6.  Преконтроллеры и постконтроллеры (ПРЕ, ПОСТ).
  7.  Функции.
  8.  Передача управления темлейтеру.
  9.  Аддоны.
  10.  AJAX.
  11.  Содержание и описание функционирования модуля
  12.  Адресня книга
  13.  Назначение к каждому продукты своего метода доставки
  14.  Статистика
  15.  Словарь терминов
  16.  Заключение


Введение

Данная дипломная работа нацелена на усовершенствование системы администрирование cs-cart. Основная задача упрощение процесса покупок для оптовых покупателей.
В рамках данной работы были добавлены следующие функции:

  1.  Адресная книга. Покупатель может сохранять/удалять/редактировать неограниченное количество адресов.
  2.  Назначение  методов доставки к каждому продукту. Покупатели смогут назначить свой собственный адрес доставки для каждого продукта отдельно.
  3.  Использование адресной книги непосредственно во время оформления заказа. Покупатели имеют возможность выбирать заказ из адресной книги.
  4.  Статистика использования адресной книги и возможности назначать свой метод доставки к каждому продукту. Администратор сможет посмотреть статистику использования адресной книги и возможности назначения каждому продукту свой метод доставки. Это позволит определить востребованность данных функций у покупателей.

Для выполнения работы была выбрана именно система cs-cart, так как она является очень функциональной, но в тоже время есть не реализованные функции в которых нуждаются потребители. Данная система имеет модульную структуру, все изменения можно выполнить в рамках отдельного модуля, с возможностью его переноса или отключения.

Функционал выполненный в данной работе позволяет вести оптовую торговлю в cms1 cs-cart. При этом покупателям будет максимально удобно закупать товары оптом.  

Помимо этого администратор сможет проверить востребованность новых возможностей благодаря статистике покупок.

Описание структуры CS-Cart и методов разработки модулей

Для разработки была выбрана именно cs-cart так как это наиболее гибкая в плане модернизации, но в тоже время обладающая широким функционалом система. Ниже следует описание функционала системы и основные понятия, необходимые для создания модуля.

Архитектура cs-cart разработана таким образом, чтобы разработчик имел возможность расширять возможности функционала без вмешательства или с минимальным вмешательством в код стандартной версии.

Идеология cs-cart предлагает использование аддонов (addons) для решения задач по расширению и дополнению функционала ПО.

В версии 2.0 были введены следующие базовые архитектурные инструменты, позволяющие дополнять существующие и реализовывать новые функции программы:

* Хуки программного кода (Code hooks)

* Преконтроллеры и постконтроллеры (Precontrollers, postcontrollers)

* Темплейтные хуки (Template hooks)

Также, в системе предусмотрены несколько дополнительных способов для расширения:

* Функции ядра (Core functions)

* Схемы (schemas)

Общедоступные (глобальные) переменные и входящие данные

Все входящие данные объединяются и складываются в массив $_REQUEST, который является «суперглобальным». Не смотря на то, что  массив $_REQUEST  доступен из любой части приложения, использовать его в функциях будет неправильно. Это связано с тем, что зависимость функции от каких-либо глобальных объектов может привести к путанице и сбоем в работе других функций, которые также используют эти объекты.

Данные, к которым нужен доступ из любой части приложения, хранятся в статическом классе Registry. К таким данным относятся:

config - конфигурационный массив из config.php

settings - настройки из базы

addons - настройки аддонов

view, view_mail, ajax, mailer - объекты темплейтного (базовый и для почты), аяксового и почтового движков

revisions - настройки и рабочие данные ревизий

navigation - структура табов на текущей странице (для всех зон) и меню (для админской зоны)

runtime - массив с изменяемыми во врем

При формировании запросов к базе данных в cs-cart используются так называемые  плейсхолдеры. Благодаря этому сильно повышается защита от несанкционированного доступа, потому что обращение к базе данных происходит не в явном виде.

Хуки программного кода (ХПК)

ХПК или просто хук - это специально обозначенное место в программном коде, которое может передавать управление аддону2. Хук заранее объявляется вызовом специальной функциии в нужном участке кода - fn_set_hook('hook_name', $params, [$param2], [$paramN]);.

Зная название хука, любой аддон может перехватить исполнение кода программы, произвести необходимые манипуляции и после этого вернуть процесс исполнения Основной программе (ОП). При вызове определенного хука, аддону становятся доступными все переменные явно объявленные в этом хуке.

Вызов хука внутри аддона, осуществляется определением функции, имя которой состоит из префикса "fn_", названия аддона, символа подчеркивания и полного имени вызываемого хука.

Например, с помощью стандартного хука расположенного в файле /core/fn.catalog.php

fn_set_hook('get_products', $params, $fields, $sortings, $condition, $join, $sorting, $group_by, $lang_code);

можно перехватить данные массива $fields, внести изменения в этот массив и потом вернуть его обратно программе.

Данный хук используется в аддоне SEO. Хук  «get_products» регистрируется в файле addons/seo/init.php. Затем используется в файле addons/seo/func.php в виде функции fn_seo_get_products. В этой функции изменяются значения массивов $fields и $join

Контроллеры

Базовая схема работы cs-cart заключается в вызове одного из двух основных исполняемых PHP файлов(admin.php или index.php) и дальнейшего последовательного подключения PHP файлов, реализующих функциональность программы.

1. index.php или admin.php -> 2.prepare.php -> 3. init.php -> 4. [controller_name].php

Файл, подключаемый под н.4 в терминах cs-cart называется контроллером. В нем осуществляется непосредственная работа с данными в программе - извлечение необходимых данных из базы, обработка данных, вычисления, трансформации и т.п. и подготовка данных для дальнейшего отображения.

Путь к контроллеру и его имя определяются программой автоматически на основании значения параметра "dispatch", переданного основному исполняемому файлу. Параметр "dispatch" всегда имеет вид "[controller_name].[mode_name]", где "[controller_name]" - имя контроллера, а "[mode_name]" - режим, в котором вызываемый контроллер будет работать. При этом имя вызываемого файла будет таким - "[controller_name].php".

Все контроллеры для зоны администрирования (исполняемый файл - admin.php) находятся в папке "/controllers/admin", для пользовательской зоны (index.php) путь к папке соответственно "/controllers/customer". Если вызываемый контроллер отсутствует в этих папках, то система переходит в папку "controllers/common" и пытается подключить его оттуда. Это сделано для ситуаций, когда один и тот же контроллер должен обслуживать и пользовательскую, и администраторскую зоны и при этом его функционал одинаков для обеих зон.

Подключение контроллера осуществляется функцией [/core/control.fn.php]/fn_dispatch(), которая не принимает параметров и выполняет следующие основные действия:

1. Проверяет на валидность параметра "dispatch".

2. Проверяет права доступа текущего пользователя к вызываемому контроллеру.

3. Обеспечивает переадресацию на безопасный протокол соединения (HTTPS) при необходимости.

4. Готовит упорядоченный список преконтроллеров и постконтроллеров от аддонов и ядра для подключения последовательного подключения в правильном порядке.

5. Автоматически определят темплейт для отображения.

Например

Имеем значение параметра "dispatch=products.manage" и исполняемый файл "admin.php" или другими словами набираем "http://cscart_dir/admin.php?dispatch=products.manage" в адресной строке браузера.

Подключаемый контроллер будет располагаться по следующему пути - "/controllers/admin/products.php". Параметр "manage" будет использоваться внутри файла для определения действий, которые контроллер должен произвести с данными. В данном примере "manage" указывает на то, что контроллер должен выбрать из базы список продуктов для отображения на странице управления продуктов в администраторской панели.

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

Структура контроллера.

Каждый контроллер может содержать внутри следующие логические блоки:

1. Обработка POST запроса.

2. Обработка GET запроса.

3. Определение локальных функций, используемых только внутри контроллера.

Часть "[mode_name]" из параметра "dispatch" используется для назначения режима работы контроллера при обработке GET запроса.

POST запрос

Обработка POST запроса должна всегда происходить до обработки GET запроса и в конце блока содержать строку возврата управления из контроллера в функцию fn_dispatch():

return array(CONTROLLER_STATUS_OK, "$index_script?dispatch=controller_name$suffix");

Параметр CONTROLLER_STATUS_OK содержит константу со статусом успешности исполнения контроллера, второй параметр является строкой с URI для редиректа после отработки POST запроса.

Например

if ($_SERVER['REQUEST_METHOD'] == 'POST') {

if ($mode == 'add') {

// здесь идет код, который необходимо выполнить при отправке формы добавления продукта

}

return array(CONTROLLER_STATUS_OK, "$index_script?dispatch=products$suffix");

}

GET запрос

Секция обработки GET запроса всегда располагается после POST блока.

Например

if ($mode == 'manage') {

"http://cscart_dir/admin.php?dispatch=products.manage"

// здесь идет код, который необходимо выполнить при вызове

}

В этом примере представлен участок кода, который проверяет значение параметра "mode" (dispatch=controller.mode) и выполняет код внутри условного оператора, когда оно равно "manage". Выполнение данного кода произойдет при запросе методом GET.

В конце отработки GET режима, контроллер обычно выполняет одно из следующих завершающих действий:

1. Передача управления подсистеме отображения (представления) (темплейтеру).

2. Редирект методом GET.

3. Завершение выполнения контроллера и самой программы без дополнительных действий: exit;

В первом случае, управление передастся в функцию fn_dispatch() автоматически, если явно не указано, что необходимо выполнить действие из п.2 или п.3. Для передачи в темплейтер данных для последующего отображения используется следующая конструкция:

$view->assign('template_var_name', $php_var_name);

Здесь "template_var_name" задает имя переменной доступной в темплейтере, а "$php_var_name" определяет содержимое этой переменной.

Например.

if ($mode == 'manage') {

$product_name = 'Product 1';

$product_description = 'Product description';

$view->assign('tpl_product_name', $product_name);

$view->assign('tpl_product_description', $fproduct_description);

}

После отработки этого кода в контроллере, управление передастся в темплейтер, которому будут доступны две переменных $tpl_product_name и $tpl_product_description.

Преконтроллеры и постконтроллеры (ПРЕ, ПОСТ)

ПРЕ и ПОСТ - отдельные специальные PHP файлы аддона, которые в зависимости от их имен, а также от их расположения в структуре файлов аддона вызываются перед (ПРЕ) или после (ПОСТ) исполнения того или иного стандартного контроллера.

Аддон “attachments” имеет в своей структуре файл

/addons/attachments/controllers/products.post.php — Это ПОСТ для контроллера products.php

Аддон “age_verification” имеет в своей структуре файл

/addons/age_verification/controllers/admin/categories.pre.php — ЭТО ПРЕ для контроллера categories.php

* Папка controllers указывает на то, что файлы внутри нее являются либо собственными контроллерами аддона, либо ПРЕ/ПОСТ для стандартных контроллеров.

* Первая часть имени файла "products" определяет имя контроллера, и т.к. контроллер с именем "products" является стандартным, то модуль может только объявить ПРЕ или ПОСТ для него.

* Часть имени ".post" говорит о том, что файл будет подключен и исполнен после выполнения стандартного контроллера "products". Для подключения перед исполнением стандартного контроллера ".post" необходимо заменить на ".pre".

Функции

Функции внутри контроллера определяются в соответствии с общими правилами оформления функций. В случае, если функция контроллера требуется для вызова в другом контроллере, то такую функцию выносят в ядро программы или аддона.

Доступные данные.

В скрипте контроллера необходимо использовать следующие массивы для работы с данными.

1. $_REQUEST - содержит в себе все переменные пришедшие из GET или POST запроса. Все переменные в этом массиве специальным образом обработаны: вырезаны HTML теги и удалены слеши, автоматически добавляемые PHP, если у него включена соответствующая настройка.

2. $_SESSION - стандартный PHP массив, содержащий данные хранящиеся в сессии.

3. $Registry - специальный статический класс-хранилище для данных, к которым объективно требуется глобальный доступ в любом месте программы. Например, конфигурационные параметры программы, считанные при запуске заносятся в класс $Registry.

Особенность этого класса заключается в том, что любые данные, которые он хранит, могут быть закешированы, что позволяет, например, исключить повторные запросы к базе для редко обновляемой информации, сохранив ее в кеше класса $Registry.

Передача управления темлейтеру

После того, как контроллер отработал и вернул управление программой функции fn_dispatch(), она передает управление программой темплейтеру. Также функция  fn_dispatch() передают путь к определенному шаблону (темплейту), который должен быть обработан темплейтером и отображен в браузере.

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

По умолчанию путь к этому шаблону определяется автоматически по следующей схеме:

/[customer|admin|mail]/views/[controller_name]/[mode_name].tpl

Например.

http://cscart_dir/admin.php?dispatch=products.manage

Отображаемый темплейт будет находиться по пути: /admin/views/products/manage.tpl

Аддоны

Структура архива с аддоном

addons

  |______XXX

                |_____ lib (третьесторонние библиотеки)

                |_____ js (яваскрипт файлы)

                |_____ func.php (функции)

                |_____ config.php (конфигурация )

                |_____ init.php (инициализация хуков)

                |_____ addon.xml (XML схема аддона)

var

  |______skins_repository

                |_base

                    |_ customer (admin/mail)

                     |_ addons

                        |_XXX

  |_____ common_templates (общие темплейты аддона)

  |_____ hooks (хуки)

  |_____ overrides (оверрайды)

  |_____ views (отображения)

XML схема аддона

<?xml version="1.0"?>

<addon>

   <id>XXX</id> (идентификатор аддона, должен быть идентичен имени каталога, в котором находится аддон)

   <name>Order barcode</name> (название аддона)

   <description>Order barcode addon</description> (краткое описание аддона)

   <priority>1</priority> (приоритет подключения, чем выше, тем позже подключается)

   <status>active</status> (статус - устанавливается при инсталляции аддона)

test

   <dependencies></dependencies> (зависимости - идентификаторы аддонов, через запятую, от которых зависит этот аддон)

   <translations> (переводы на другие языки, если парамер for = "name" - перевод для имени, for = "description" - перевод для описания. Параметр lang - код языка большими буквами)

       <item for="name" lang="ES">Códico de barras de pedido</item>

       <item for="description" lang="ES">Códico de barras de pedido addono babette</item>

   </translations>

   <opt_settings> (опции аддона)

       <section name="general"> (таб для опций, name -  название таба, нужно указывать языковую переменную)

           <item id="type"> (параметр id - идентификатор опции - обязателен для всех опций, у которых есть описание (кроме info))

               <name>Type</name> (название опции)

               <type>states list</type> (тип опции input, textarea, password, checkbox, selectbox, multiple select, multiple checkboxes, countries list, states list, file, info, header, template)

               <default_value>C128B</default_value> (значение по умолчанию)

               <template>opt.tpl</template>  (для опции типа template, путь относительно каталога  settings)

               <variants> (варианты - для типов selectbox, multiple select, multiple checkboxes)

                   <item id="C128A"> (id - идентификатор варианта)

                       <name>Code 128-A</name> (имя варианта)

                       <translations> (переводы варианта, то же самое что и для названия аддона, только параметр for не используется)

                           <item lang="ES">Code huyatto</item>

                       </translations>

                   </item>

               </variants>

               <translations> (переводы опции, то же самое что и для названия аддона, только параметр for не используется)

                   <item lang="ES">Tipo</item>

               </translations>

           </item>

           <item id="elm_specification"> (это заголовок, id обязателен, но нигде не используется кроме таблицы с описаниями)

               <name>Specification</name>

               <type>header</type>

               <translations>

                   <item lang="ES">Especificación</item>

                   <item lang="FR">Spécification</item>

               </translations>

           </item>

           <item> (это инфо поле - отображает результат, возвращаемый функцией указанной в ноде handler)

               <name></name>

               <type>info</type>

               <handler>fn_get_barcode_specification</handler>

           </item>

           <item> (набор опций, возвращаемых функцией указанной в поле custom_option_function)

               <custom_option_function>fn_recurring_billing_additional_settings</custom_option_function>

           </item>

       </section>

   </opt_settings>

   <opt_queries> (дополнительные запросы к базе данных)

       <item>ALTER TABLE ?:products ADD COLUMN test</item> (если параметр for="install" или его вообще нет - запрос выполняется во время установки)

       <item for="uninstall">ALTER TABLE ?:products DROP COLUMN test</item> (если параметр for="uninstall", запрос выполняется во время удаления)

   </opt_queries>

   <opt_language_variables> (добавляет языковые перменные)

       <item lang="EN" id="test123">Test</item> (id - имя переменной, lang - язык для которого она будет добавлена)

   </opt_language_variables>

</addon>

Подключение аддонов с помощью хуков

Для создания хука нужно произвести следующие действия:

1. В папке с аддоном создаем папку hooks (если её нет).

2. В папке hooks создаем папку, для которой в качестве названия указываем имя контроллера, где будет вызываться хук. (Например, если хук будет вызываться на детальной странице продукта в клиентской части то нужно создать папку products)

3. Далее в этой папке создаем шаблон по правилу: "имя_хука.действие_производимое_с_кодом_хука.tpl"

действие_производимое_с_кодом_хука может принимать три значения:

- post - результат вставляется после объявления хука

- pre - результат вставляется перед объявлением хука

- override - результат заменяет блок хука

AJAX3

CS-Cart 2.0 позволяет выполнять AJAX-запросы(АЗ), которые позволяют получить с сервера необходимые данные и при необходимости отобразить их без перезагрузки страницы.

Основное

Для работы с AJAX-запросами(АЗ), программа использует собственное расширение стандартной AJAX-функциональности библиотеки jQuery - /js/ajax.js. Класс имеет три основных метода:

* ajaxRequest - используется для отправления АЗ на сервер через URL.

* ajaxSubmit - используется для отправления АЗ на сервер через форму.

* ajaxResponse - используется для обработки ответа сервера и вывода результат на страницу.

Работа с данными ведется в формате JSON.

При выполнение АЗ на сервере происходит инициализация подсистемы обработки АЗ через функцию fn_init_ajax(/core/fn.init.php):

* создается объект класса Ajax(/core/class.ajax.php), который производит необходимые преобразование перед выполнением обработки АЗ и после отработки АЗ, а также формирует JSON массив для последующей передачи в ajaxResponse.

* устанавливается в значение true константа AJAX_REQUEST для использования в PHP коде

Используя константу AJAX_REQUEST внутри PHP файла можно обозначить код, который требуется выполнить только при АЗ.

Пример.

if (defined('AJAX_REQUEST')) {

   fn_set_notification('E', fn_get_lang_var('warning'), $msg, true, 'insecure_password');

}

При завершении исполнения скрипта AJAX запроса, либо при явном вызове функции завершения exit() происходит отработка деструктора класса Ajax (/core/class.ajax.php), который помещает информацию для отображения в документе в массив c данными в JSON формате и передает его в JS функцию ajaxResponse(/js/ajax.js).

АЗ через микроформат

Для того, чтобы ссылка при клике или форма при отправлении инициировали АЗ можно воспользоваться микроформатом cm-ajax.

Пример 1. АЗ по клику на ссылку (GET метод).

<a class="underlined-bold cm-ajax" href="index.php?subcats=Y&amp;dispatch=products.search&amp;

sort_by=product&amp;sort_order=desc" coords="my_div" rel="nofollow">Product</a>

Параметр coords содержит список ID HTML элементов (через запятую, если несколько), содержимое которых этот запрос обновит.

АЗ через ajaxRequest

Если по событию перед отправкой АЗ необходимо выполнить какой-либо дополнительный JS код, то можно осуществить АЗ непосредственно через функцию ajaxRequest.

Пример.

<input id="enable_block_1" type="checkbox" name="enable_block_1" value="Y"

onclick="jQuery.ajaxRequest('{$index_script}?dispatch=block_manager.enable_disable&amp;block_id=1&amp;enable=' +

(this.checked ? this.value : 'N'), {literal}{method: 'POST', cache: false}{/literal});" />

Прямое использование метода ajaxSubmit также возможно, но на практике не применяется.

Дополнительно

Для форм имеется возможность задать pre-call и callback (только для аяксовых) функции. Для этого в документе необходимо объявить функцию, имя которой задается по правилам:

1. Pre-call: 'fn_form_pre_имя_формы'. Функция должна возвращвть true/false. Если вернется false - форма не будет засабмичена.

2. Call-back: 'fn_form_post_имя_формы'. В качестве параметра в функцию передается объект response.data

Pre-call функция вызывается по событию onSumbit, но до фактического отправления данных. Callback функция вызовется после того, как пришел ответ от АЗ.

 Содержание и описание функционирования модуля.

Адресня книга

 Для реализации функционала адресной книги активно использовался AJAX. Все операции производимые с алресами происходят без перезагрузки страницы. Основной целью оправдывающей полный отказ от обычных запросов перезагружающих страниц было максимальное удобство покупателей. Для добавления или редактирования адреса использовались всплывающие окна. Пользователю не выводились громоздкие формы для заполнения, вся необходимая информация была размещена в одно окно.

Поля которые требовалось заполнить для создания адреса задаются в админ панели магазина. Администратор может изменять существующие или создавать новые поля. Таким образом достигается универсальность данного функционала.

Для того чтобы воспользоваться адресной книгой пользователю необходимо авторизоваться или зарегистрироваться, если он не имеет аккаунта в магазине. Это обуславливается необходимостью привязки конкретного адреса к конкретному пользователю. Если привязывать записи адресной книги к ip адресу, то большинство пользователей не смогли бы иметь доступ к раннее созданным адресам, так как чаще всего простые пользователи не имеют выделенного ip адреса.

При оформление заказа пользователь может использовать адреса из адресной книги непосредственно выбирая их из списка. Для этого была реализована аякс система, которая обращалась к контроллеру адресной книги со страницы оформления заказа, при этом процесс оформления заказа не прерывался.


Ниже изображена схема работы данной системы:

Создание нового адреса

Выбор адреса из адресной книги

Первый шаг, контактные данные

Второй шаг, адрес доставки

Оформление заказа

Редактирование существующего адреса

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

Основной проблемой при реализации этой системы была ее громоздкость. Поместить все данные во всплывающие окошки, при этом давать покупателям возможность создания не ограниченного числа адресов, при необходимости компактности и хорошего вида всей системы – задача не из простых. Решение этой проблемы использование аякса и всплывающих окон. Покупатель получает только ту информацию, которая ему нужна на данный момент, во всплывающих окошках нет лишней информации, например меню категорий, или информацию о корзине. Так если покупатель хочет добавить адрес в книгу, то при клике на соответствующую кнопку он получает только окно с полями, необходимыми для заполнения. А если покупатель хочет выбрать один из адресов, т он получит только сам писок адресов с их минимальным описанием. Так же вывод только необходимого контента позволяет избежать долгой загрузки данных.

Таблица в базе данных

Для хранения адресов была создана таблица в базе mysql. Так как в основном запрашиваются либо конкретные адреса, либо адреса для конкретного пользователя, было добавлено два ключа. Первый ключ – это уникальное поле id, которое является первичным кличем. Так же, для оптимизации запросов на выдачу адресов для конкретного пользователя был добавлен ключ для поля user_id.

Работы системы выбора адресов в процессе оформления заказа.

При оформлении заказа покупатель может выбрать несколько вариантов доставки:

  1.  Весь заказ доставляется по адресу плательщика.
  2.  Весь заказ доставляется не по адресу плотильщика, тогда покупатель может выбрать адрес доставки вручную.
  3.  Адрес доставки выбирается для каждого продукта.

На этапе выбора адреса доставки, выводится кнопка, нажав на которую всплывает окно с адресами данного покупателя. При нажатии на кнопку выбора адресов отправляется POST запрос на сервер. На сервере происходит выборка адресов для данного пользователя и их обработка. Затем с помощью специальной функции fn_set_notification происходит отрисовка окна. Одним из параметров данной функции является шаблон окна. У каждого адреса имеется кнопка «Use this address», нажав которую покупатель выбирает нужный ему адрес. Чтобы не дать покупателю выбрать уже выбранный адрес, id выбранного адреса сохраняется в сессии до момента выбора другого адреса. У выбранного адреса вместо кнопки «Use this address» кнопка «Selected», при нажатии на которую ни чего не происходит, она нужна лишь для того чтобы показать какой адрес выбран на данный момент. Окно выбора адреса имеет следующий вид

Помимо выбора адреса из данного окна можно перейти на создание нового адреса. Если нажать на кнопку «Add new address», окно выбора будет закрыто, а окно создания адреса будет открыто. Так же, при создании адреса таким способом, по завершении создания, созданный адрес автоматически выбирается.

Назначение к каждому продукты своего метода доставки

 Многие оптовые покупатели закупаются относительно редко, но крупными партиями. При этом не всегда необходимо доставить весь заказ по одному адресу. Так, например владелец сети магазинов розничной торговли вынужден был оформлять несколько заказов на поставку конкретного товара в каждый из его магазинов розничной торговли. Если покупатель может указать несколько адресов доставки в одном заказе, то ему будет достаточно лишь распределить заказ по конкретным адресам, без необходимости создания нескольких заказов.

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

Стандартный процесс оформления заказа разбит на 4 шага:

  1.  Авторизация, либо регистрация покупателя
  2.  Адрес доставки.
  3.  Выбор метода доставки
  4.  Выбор метода оплаты, оплата.

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

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

Если покупатель выберет один адрес для всего заказа, на третьем шаге он сможет выбрать адрес доставки из адресно книги.

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

Так как стоимость доставки рассчитывается с учетом множества параметров, таких как стоимость всего заказа, или вес всего заказа, для расчета стоимости доставки для каждого продукта проводились следующие операции

  1.  Создавалась копия корзины.
  2.  Из корзины удалялись все продукты, кроме расчётного.
  3.  Адрес доставки изменялся на адрес, выбранный для данного продукта.
  4.  Если для продукта нет выбранного адреса, берется первый из списка адресов покупателя.
  5.  Происходил расчет стоимости доставки с помощью стандартной функции cs-cart: «fn_calculate_cart_content».

При смене адреса, для какого либо продукта, происходил перерасчет стоимости доставки.

Третий шаг оформления заказа, при выборе адреса доставки для каждого продукта выглядит следующим образом:

 В базе данных cs-cart имеется таблица с дополнительной информацией о заказах, для хранения информации о назначенных к продуктам методах доставки использовалась именно эта таблица. Вся информация о методах доставки хранится сериализованном4 виде, в поле с типом текст.

Статистика

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

На странице просмотра заказов, в блоке «Total» было добавлено поле «Total percent». В этом поле выводится процентное соотношение оптовых заказов к обычным.

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


Словарь терминов

  1.  CMS(content manage system)  - Система управления контентом.
  2.  Addon – дополнение основной программы, имеющие завершенную структуру, свободно переносимое и отключаемое без потери работоспособности основной программы.
  3.  AJAX - подход к построению интерактивных пользовательских приложений, заключающийся в «фоновом» обмене данными браузера с веб-сервером.
  4.  Сериализация — процесс перевода какой-либо структуры данных в последовательность битов. Обратной к операции сериализации является операция десериализации (структуризации) — восстановление начального состояния структуры данных из битовой последовательности.


Заключение

Основной задачей владельцев интернет магазинов является привлечение покупателей. При прочих равных критериях покупатель совершит покупку в магазине с более дружественным и удобным интерфейсом. Максимально упрощение процесса покупки является глобальной задачей электронной коммерции.

Функционал, выполненный в рамках этой дипломной работы, существенно упрощает процесс покупки в cms cs-cart. Возможность для покупателей иметь адресную книгу пригодится всем покупателям, даже если пользователь захочет купить только один продукт, а не целую партий. Возможность назначать к каждому продукту свой способ и метод доставки выводит cs-cart на новый уровень в оптовой торговле.


Список литературы

  1.  База Знаний CS-Cart. http://kbrus.cs-cart.com/.
  2.  Кристиан Дари, Богдан Бринзаре, Филипп Черчез-Тоза, Михай Бусика. AJAX и PHP. Разработка динамических веб-приложений. Кристиан Дари, Богдан Бринзаре, Филипп Черчез-Тоза, Михай Бусика. AJAX и PHP. Разработка динамических веб-приложений. .: Символ-Плюс, 2006.
  3.  Сейд М.М., Хью Е.Вильямс. Руководство по MySql. .: Русская редакция, 2012. С.331-337.


 

А также другие работы, которые могут Вас заинтересовать

4722. Тяговый расчет автомобиля 5.14 MB
  Целью данной курсовой работы является поверочный тяговый расчет автомобиля и конструкторский расчет механизма сцепления. Расчет производятся для автомобиля с заданными параметрами (в качестве учебного задания) или существующего автомобиля...
4723. Інформаційні системи та технології в фінансах 368 KB
  Вступ Мета викладання дисципліни Інформаційні системи та технології в фінансах: надання необхідних теоретичних основ організації та функціонування інформаційних систем обліку та менеджменту в різних галузях господарства та комерційних структурах у...
4724. Физические основы электроники: активные электронные компоненты и компоненты оптоэлектроники 1.75 MB
  В учебном пособии рассматриваются общие вопросы, связанные с физическим принципом действия активных компонентов электронной техники, а именно: биполярные и полевые транзисторы, а также элементы оптоэлектронной техники. Введение За последние сорок ле...
4725. Виды конфликтов в организации 110 KB
  У каждого человека в жизни есть свои цели, связанные с различными областями приложения. Каждый стремится достичь чего-то своего или по-своему. Но часто люди, связанные узами совместной деловой активности сталкиваются...
4726. Анализ организации устройства планирования и оборудования торгового предприятия на примере конкретного магазина - № 19 Борисовского ГПТ 480.5 KB
  Торговля Республики Беларусь, как одна из важных отраслей народного хозяйства на пути рыночных преобразований в настоящее время столкнулась с рядом проблем, которые привели эту отрасль в состояние глубокого кризиса. Кризис экономики в РБ за...
4727. Расчет электрического освещения 2.21 MB
  В цехе используется технологическое оборудование, которое и является основным потребителем электроэнергии, но в цехе есть и цепь освещения, которая потребляет сравнительно малое количество электроэнергии. На территории медногорского, термического отделений и в сварочном посту...
4728. Кривая производственных возможностей. Схема экономического кругооборота 68.5 KB
  Кривая производственных возможностей: содержание и графическое изображение. Нарисовать схему экономического кругооборота в рыночной экономике. Раскрыть содержание внутреннего и внешнего круга кругооборота. Экономическая теория изучает деятельнос...
4729. Социальная структура и социальная стратификация общества 135 KB
  Социальная структура и социальная стратификация общества. Понятие социальной структуры и социальной стратификации общества. Причины социальной стратификации. Методологические подходы к анализу социальной стратификации (марксистское учени...
4730. Соотношения между допусками размеров, формы и расположения поверхностей 155 KB
  Соотношения между допусками размеров, формы и расположения поверхностей Допуски размеров фактически полностью определяют точность формы и расположения поверхностей. Поскольку разнотолщинности призматической детали ограничена размерами...