Класс customer модуля emarket — различия между версиями
Williwaw (обсуждение | вклад) |
Williwaw (обсуждение | вклад) |
||
Строка 22: | Строка 22: | ||
= Методы = | = Методы = | ||
+ | |||
+ | == __construct() == | ||
+ | |||
+ | Экземпляр класса создается с помощью функции <span style="font-weight:bold">__construct()</span> | ||
+ | <p>'''Параметры:''' </p><br/> | ||
+ | iUmiObject<span style="font-weight:bold"> $object</span>: | ||
+ | содержит в себе либо объект "зарегистрированный пользователь" либо объект "незарегистрированный покупатель"<br/> | ||
+ | <p>'''Результат:''' экземпляр класса customer</p> | ||
+ | |||
+ | При создании объекта, методом определяется, какое значение будет хранить переменная $isAuth: | ||
+ | |||
+ | <source lang="php"> | ||
+ | |||
+ | public function __construct(iUmiObject $object) { | ||
+ | $permissions = permissionsCollection::getInstance(); | ||
+ | //получить id текущего пользователя | ||
+ | $userId = $permissions->getUserId(); | ||
+ | //получить id гостя | ||
+ | $guestId = permissionsCollection::getGuestId(); | ||
+ | // если id гостя равен id текущего пользователя записать в переменную $isAuth false, в противном | ||
+ | случае записать id текущего пользователя | ||
+ | $this->isAuth = ($userId == $guestId) ? false : $userId; | ||
+ | //создать экземпляр класса покупатель | ||
+ | parent::__construct($object); | ||
+ | } | ||
+ | </source> | ||
+ | |||
+ | |||
== get() == | == get() == | ||
Строка 53: | Строка 81: | ||
} else { | } else { | ||
//не авторизован - запишет в переменную $object объект покупателя-гостя, | //не авторизован - запишет в переменную $object объект покупателя-гостя, | ||
− | получает этот объект функция | + | получает этот объект функция getCustomerId() |
$object = self::getCustomerId(); | $object = self::getCustomerId(); | ||
− | // | + | //выполнить повторную проверку, это может быть полезно при конфликтах после перезагрузки сервера |
if($object === false) $object = self::getCustomerId(true); | if($object === false) $object = self::getCustomerId(true); | ||
} | } | ||
Строка 70: | Строка 98: | ||
</source> | </source> | ||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== IsUser() == | == IsUser() == | ||
Строка 113: | Строка 114: | ||
<p>'''Результат:''' объект "покупатель-гость", записанный в переменную $customer</p> | <p>'''Результат:''' объект "покупатель-гость", записанный в переменную $customer</p> | ||
+ | <source lang="php"> | ||
+ | protected static function getCustomerId($noCookie = false) { | ||
+ | static $customerId; | ||
+ | if(is_null($customerId)) { | ||
+ | $customerId = (int) getCookie('customer-id'); | ||
+ | } | ||
+ | $customer = selector::get('object')->id($customerId); | ||
+ | |||
+ | if($customer instanceof iUmiObject != false) { | ||
+ | $type = selector::get('object-type')->id($customer->getTypeId()); | ||
+ | |||
+ | if($type->getMethod() != 'customer') { | ||
+ | $customer = null; | ||
+ | } | ||
+ | } else { | ||
+ | $customer = null; | ||
+ | } | ||
+ | |||
+ | if(!$customer) { | ||
+ | $customerId = self::createGuestCustomer(); | ||
+ | $customer = selector::get('object')->id($customerId); | ||
+ | } | ||
+ | |||
+ | if(!$customerId) { | ||
+ | $customerId = self::createGuestCustomer(); | ||
+ | } | ||
+ | |||
+ | if (!defined('UMICMS_CLI_MODE') || !UMICMS_CLI_MODE) { | ||
+ | setcookie('customer-id', $customerId, (time() + self::$defaultExpiration), '/'); | ||
+ | } | ||
+ | |||
+ | $expirations = umiObjectsExpiration::getInstance(); | ||
+ | $expirations->set($customerId, self::$defaultExpiration); | ||
+ | |||
+ | return $customer; | ||
+ | } | ||
+ | </source> | ||
В теле функции объявлена переменная $customerId, в которую записывается id покупателя-гостя | В теле функции объявлена переменная $customerId, в которую записывается id покупателя-гостя | ||
Версия 15:20, 21 февраля 2014
Актуально для версии 2.9.5
Содержание
Описание
Одним из классов, который необходим для работы модуля "интернет-магазин" является класс customer. Данный класс предоставляет доступ к управлению объектами-покупателями интернет-магазина. Исходный код класса находится в файле classes\modules\emarket\classes\customer\customer.php
Переменные
В класса объявлены две переменные.
Переменная $defaultExpiration, которая будет использована при создании cookie для указания времени ее жизни
public static $defaultExpiration = 2678400; // 31 days
Переменная $isAuth будет хранить id пользователя, если покупатель - авторизованный пользователь, false в противном случае
protected $isAuth;
Методы
__construct()
Экземпляр класса создается с помощью функции __construct()
Параметры:
iUmiObject $object:
содержит в себе либо объект "зарегистрированный пользователь" либо объект "незарегистрированный покупатель"
Результат: экземпляр класса customer
При создании объекта, методом определяется, какое значение будет хранить переменная $isAuth:
public function __construct(iUmiObject $object) {
$permissions = permissionsCollection::getInstance();
//получить id текущего пользователя
$userId = $permissions->getUserId();
//получить id гостя
$guestId = permissionsCollection::getGuestId();
// если id гостя равен id текущего пользователя записать в переменную $isAuth false, в противном
случае записать id текущего пользователя
$this->isAuth = ($userId == $guestId) ? false : $userId;
//создать экземпляр класса покупатель
parent::__construct($object);
}
get()
Получить экземпляр класса можно с помощью функции get(), если покупатель не существует, то метод создаст новый экземпляр класса
Параметры:
bool $nocache:
не использовать данные кэша, по умолчанию false
Результат: экземпляр класса customer
public static function get($nocache = false) {
static $customer;
//Сначала функция get() проверит создан ли уже объект покупатель
if(!$nocache && !is_null($customer)) {
//вернет объект покупатель, если он существует
return $customer;
}
$objects = umiObjectsCollection::getInstance();
$permissions = permissionsCollection::getInstance();
// если объект не существует, проверит авторизован ли пользователь
if($permissions->isAuth()) {
$userId = $permissions->getUserId();
//авторизован - запишет в переменную $object(входной параметр для конструктора класса)
объект текущего пользователя
$object = $objects->getObject($userId);
} else {
//не авторизован - запишет в переменную $object объект покупателя-гостя,
получает этот объект функция getCustomerId()
$object = self::getCustomerId();
//выполнить повторную проверку, это может быть полезно при конфликтах после перезагрузки сервера
if($object === false) $object = self::getCustomerId(true);
}
if($object instanceof iUmiObject) {
//будет создан экземпляр класса customer, на основе объекта переданного в переменную $object
$customer = new customer($object);
//только что созданный экземпляр класса обратиться к функции tryMerge()
$customer->tryMerge();
return $customer;
}
}
IsUser()
Метод isUser() вернет значение типа boolean, 1 или 0, в зависимости от того является ли покупатель зарегистрированным пользователем, т.е. будет проверено содержит ли переменная $isAuth идентификатор пользователя, или же, содержит false
Параметры:
Результат: boolean
getCustomerId()
Метод getCustomerId() вернет объект покупателя-гостя, если объект не существует, обратится к методу createGuestCustomer(), который создаст нового покупателя-гостя
Параметры:
bool $noCookie:
"не использовать данные кук", по умолчанию false
Результат: объект "покупатель-гость", записанный в переменную $customer
protected static function getCustomerId($noCookie = false) {
static $customerId;
if(is_null($customerId)) {
$customerId = (int) getCookie('customer-id');
}
$customer = selector::get('object')->id($customerId);
if($customer instanceof iUmiObject != false) {
$type = selector::get('object-type')->id($customer->getTypeId());
if($type->getMethod() != 'customer') {
$customer = null;
}
} else {
$customer = null;
}
if(!$customer) {
$customerId = self::createGuestCustomer();
$customer = selector::get('object')->id($customerId);
}
if(!$customerId) {
$customerId = self::createGuestCustomer();
}
if (!defined('UMICMS_CLI_MODE') || !UMICMS_CLI_MODE) {
setcookie('customer-id', $customerId, (time() + self::$defaultExpiration), '/');
}
$expirations = umiObjectsExpiration::getInstance();
$expirations->set($customerId, self::$defaultExpiration);
return $customer;
}
В теле функции объявлена переменная $customerId, в которую записывается id покупателя-гостя
Сначала, метод проверит содержит ли данная переменная значение.
Если переменная пуста $customerId, получит id пользователя из кук. Кука в браузере пользователя создается этой же функцией при генерации объекта покупатель-гость, т.е. если пользователь уже заходил на сайт, то метод сразу же вернет объект покупателя-гостя в переменной $customer.
Если куки не существует($customer осталась пустой), то метод обратиться к функции createGuestCustomer(), которая создаст нового покупателя-гостя. Также, будет записана кука в браузер пользователя:
setcookie('customer-id', $customerId, (time() + self::$defaultExpiration), '/');