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

Ubercart. Система хуков


Ёж 19 December 2008

Ubercart. Система хуков

Как нам всем известно - Уберкарт был построен как модуль Друпала, то есть он имеет такую же логическую архитектуру, соответственно без системы хуков ни шагу - ни влево, ни вправо. К примеру - какой-либо модуль Друпала должен ограничить доступ к своему управлению, и для этого используется хук hook_perm, который и определяет права доступа определённого пользователя. Тоже самое и здесь.

Например, файл uc_store.module использует hook_perm, чтобы ограничить доступ к администрированию магазином кому попало.

<?php
/**
* Реализация хука hook_perm().
*/
function uc_store_perm() {
  return array(
'administer store');  <em>/* Фyнкция возвращает массив с именем administer store, который будет добавлен в массив чекбоксов на странице Permissions - таким образом администратор сайта сможет выставлять разрешения для определённых ролей */</em>
}
?>

Уберкарт управляет доступом к любой функции магазина через создание и вызов своих собственных хуков. Это позволяет дополнительным модулям реализовывать требуемый функционал. Все эти хуки задокументированы, что упрощает разработку новых модулей или дополнение уже существующих - мол не нужно быть профессиональным программистом PHP, чтобы совладать со всей этой системой. Уберкарт пытается быть открытым как для пользователя, так и для разработчика - всё должно быть систематизировано, и не превращаться в такой беспорядок, каким является к примеру osCommerce (это не мои слова, так написано в официальной английской документации Уберкарта).

Рассмотрю один из хуков - hook_checkout_pane. Как можно догадаться из самого названия, этот хук определяет вид панели обработки заказа (/cart/checkout) и страницы просмотра (проверки) заказа перед подтверждением (/cart/checkout/review). Так же данный хук предоставляет возможность настраивать панели оформления заказа в админке. Используется в файле uc_cart.module (модуль Cart (Корзина) - один из обязательных модулей Уберкарта). Сама данная функция выглядит примерно таким образом:

<?php
/**
* Пример реализации hook_checkout_pane().
*/
function uc_cart_checkout_pane() {
 
$panes[] = array(
   
'id' => 'cart',
   
'callback' => 'uc_checkout_pane_cart',
   
'title' => t('Cart Contents'),
   
'desc' => t("Display the contents of a customer's shopping cart."),
   
'weight' => 1,
   
'process' => FALSE,
   
'collapsible' => FALSE,
  );
  ...
  return
$panes;
}
?>

Как видно, в данном примере функция создаёт массив "стёкол" (буду называть это так - на английском panes, или, если сказать по другому - панели настроек), используемый модулем Cart, и возвращает этот массив. Некоторые хуки возвращают определённое значение, другие же просто запускают выполнение какого-либо кода, например hook_order. Можно более подробно изучить каждый хук, и функцию, которую он выполняет. Здесь список всех хуков Уберкарта на английском - для каждого есть описание и приведены примеры кода - http://www.ubercart.org/docs/developer/243/ubercart_hook_index.

Благодарю за внимание.
Ёж.

]]>]]>

RSS-материал