Класс customer модуля emarket — различия между версиями

Материал из Umicms
Перейти к:навигация, поиск
Строка 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 объект покупателя-гостя,  
                                 получает этот объект функция<span style="font-weight:bold"> getCustomerId()</span>
+
                                 получает этот объект функция getCustomerId()
 
$object = self::getCustomerId();
 
$object = self::getCustomerId();
  
//Second try may be usefull to avoid server after-reboot conflicts
+
//выполнить повторную проверку, это может быть полезно при конфликтах после перезагрузки сервера
 
if($object === false) $object = self::getCustomerId(true);
 
if($object === false) $object = self::getCustomerId(true);
 
}
 
}
Строка 70: Строка 98:
 
</source>
 
</source>
  
 
 
== __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>
 
  
 
== 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), '/');