You are hereБлоги / Ёж's blog / Ubercart. Система хуков, часть 2

Ubercart. Система хуков, часть 2


Ёж 19 December 2008

Ubercart. Система хуков, часть 2

В этой статье начну с краткого описания хуков, определяемых в модулях Уберкарта. Для начала вкратце пройдусь по всему списку:

hook_add_to_cart - хук позволяет модулям выполнить какое-либо действие, когда некоторая единица была добавлена в корзину (cart) и остановить выполнение кода в случае, если это необходимо.
hook_add_to_cart_data - позволяет модулям копировать дополнительные данные для продукта тогда, когда данный продукт добавлен в корзину.
hook_cart_item - действие над единицей, добавленной в корзину покупателя.
hook_cart_pane - добавление информации при отображении корзины.
hook_checkout_pane - определяет панели ("стёкла"), которые будут появляться в процессе оформления заказа.
hook_download_authorize - определяет дополнительную проверку перед тем, как позволить покупателю загрузить файл.
hook_file_action - создаёт новые действия для работы с файлами, найденными в каталоге загрузок.
hook_file_transfer_alter - изменение файла перед тем, как покупатель его загрузит.
(Последние три хука применяются при организации торговли электронным контентом).
hook_line_item - определяет пункты заказа, которые будут отображаться в корзине и на вкладке управления заказами.
hook_order - запускает выполнение определённого кода в тот момент, когда Уберкарт загружает, сохраняет или выполняет какой-либо заказ.
hook_order_pane - определяет "стёкла" настроек, которые отображаются на вкладке управления заказами - данные настройки управляют отображением и редактированием заказов.
hook_payment_gateway - определяет возможности оплаты в процессе осуществления оплаты.
hook_payment_method - определяет способы оплаты, доступные покупателю для оплаты заказа.
hook_shipping_method - определяет способы доставки.
hook_shipping_type - для физических продуктов данный хук определяет настройки их физических параметров.
hook_store_status - добавляет единицы товаров в таблицу рабочего статуса магазина.
hook_uc_message - обеспечивает выдачу на экран различных сообщений о работе магазина.

Ещё раз повторюсь, вот здесь находится описание и примеры для всех этих хуков.

Давайте рассмотрим один пример - хук hook_cart_item.

Функция hook_cart_item в файле uc_cart.module:

<?php
hook_cart_item($op, &$item)
?>

Более подробное описание:

Товары, которые добавляются в корзину покупателя, ассоциируются как единицы (items) до тех пор, пока процесс продажи не завершён. hook_cart_item() отвечает за управление единицами товара, когда они были добавлены в корзину, загружены, сохранены и до того момента, когда заказ оформлен покупателем. Зачем вообще нужен этот хук? Например, покупатель давным-давно (если сильно утрировать - можно предположить, что год назад) добавил некий товар в корзину. Но ведь за этот год цена товара (либо что-нибудь ещё) вполне могла измениться. Так вот, данный хук и нужен для того, чтобы внести соответствующие изменения в корзину - чтоб покупатель не покупал товар по прошлогодней цене.

Параметры, которые передаются в функцию:

$op - параметр действия при появлении товара в корзине. Может иметь два значения:

  • load - передаётся для каждой единицы, которая была загружена в корзину в функции uc_cart_get_contents(). Позволяет модулям корректировать информацию о товарах, загруженных в корзину, до того, как будет оформлен заказ. Для данного параметра нет возвращаемых значений.
  • can_ship - при передаче этого параметра функция возвращает значение TRUE или FALSE в зависимости от того, является данный товар физическим объектом или нет.

$item - ссылка на добавляемый в корзину товар.

Пример реализации данного хука:

<?php
function uc_manufacturer_cart_item($op, &$item) {
switch ($op) {
case 'load':
$term = array_shift(taxonomy_node_get_terms_by_vocabulary($item->nid, variable_get('uc_manufacturer_vid', 0)));
$arg1->manufacturer = $term->name;
break;
}
}
?>

Раз уж я написал этот код тут, объясню что значит строка array_shift(taxonomy_node_get_terms_by_vocabulary($item->nid, variable_get('uc_manufacturer_vid', 0))) - с остальными строками вроде всё более-менее ясно. Ссылающаяся функция taxonomy_node_get_terms_by_vocabulary вернет массив термов данной ноды, а array_shift откусит первый элемент от этого массива и вернет его. То есть в итоге мы получим первый попавшийся терм данного нода в том порядке, в котором возвращает их функция taxonomy_node_get_terms_by_vocabulary.

Игорю спасибо за правку статьи.

Ну что ж, продолжение следует, куда ж без него...

Спасибо за внимание.

Ёж (правка статьи - Игорь).

]]>]]>
ССылки

RSS-материал