/** * 2016-03-09 * Портировал из РСМ. * @param int|string|null|bool|StoreInterface $store [optional] * @return string|null */ function df_domain($store = null) { return dfcf(function ($store = null) { /** @var string $result */ $store = df_store($store); /** @var string|null $baseUrl */ // Может вернуть null, если в БД отсутствует значение соответствующей опции. $baseUrl = $store->getBaseUrl(); if ($baseUrl) { try { $result = df_zuri($baseUrl)->getHost(); df_assert_string_not_empty($result); } catch (Exception $e) { } } if (!$result) { /** @var \Zend_View_Helper_ServerUrl $helper */ $helper = new \Zend_View_Helper_ServerUrl(); /** @var string|null $result */ // Может вернуть null, если Magento запущена с командной строки ( // например, планировщиком задач) $result = $helper->getHost(); } return $result; }, func_get_args()); }
/** * 2015-12-01 * https://mage2.pro/t/topic/153 * @param string $path [optional] * @return string */ function df_media_url($path = '') { return df_store()->getBaseUrl(UrlInterface::URL_TYPE_MEDIA) . df_media_path_relative($path); }
/** * 2016-01-11 * @param int|string|null|bool|StoreInterface $store [optional] * @return int */ function df_store_id($store = null) { return df_store($store)->getId(); }
/** * @param string|array(object, string) $method * @param string|string[]|null $params [optional] * @return string */ public function makeKey($method, $params = null) { /** * Иногда первым параметром вместо __METHOD__ передаётся array($this, __FUNCTION__). * Это позволяет сохранить уникальность ключа, * когда вызов makeKey() производится в родительском классе. * Ведь в таком случае __METHOD__ не будет уникальным значением, * ибо будет содержать имя родительского класса, а не класса-потомка. * А вот значение implode('::', array(get_class($this), __FUNCTION__)) останется уникальным, * ибо будет содержать название класса-потомка, а не родителя. */ if (is_array($method)) { $method = df_cc_method($method[0], $method[1]); } /** @var string[] $keyParts */ $keyParts = []; if ($this->type()) { $keyParts[] = $this->type(); } $keyParts[] = $method; $keyParts[] = df_store()->getCode(); if ($params) { if (is_array($params)) { ksort($params); $params = http_build_query($params); } $keyParts[] = $params; } /** * Обратите внимание, * что ключ кэширования не должен содержать русские буквы и некоторые другие символы, * потому что когда кэш хранится в файлах, * то русские буквы и недопустимые символы будут заменены на символ «_», * и имя файла будет выглядеть как «mage---b26_DF_LOCALIZATION_MODEL_MORPHER________». * Чтобы избавиться от русских букв и других недопустимых символов * при сохранении уникальности ключа, используем функцию @uses md5(). */ return md5(df_ckey($keyParts)); }
/** * 2016-04-04 * @param AA|CA|QA|OA $a * @return StoreInterface|Store */ function df_address_store($a) { /** @var Customer|Quote|null $owner */ $owner = df_address_owner($a); return $owner ? df_store($owner->getStore()) : null; }
/** * @used-by cacheLoad() * @used-by cacheSave() * @return string */ private function cacheKeyPerStore() { if (!isset($this->{__METHOD__})) { if (!\Df\Core\State::s()->storeInitialized()) { df_error('При кэшировании в разрезе магазина для объекта класса «%s» произошёл сбой,' . ' потому что система ещё не инициализировала текущий магазин.', get_class($this)); } $this->{__METHOD__} = $this->cacheKeyGlobal() . '[' . df_store()->getCode() . ']'; } return $this->{__METHOD__}; }
/** @return bool */ public function storeInitialized() { /** @var bool $result */ static $result = false; if (!$result) { try { df_store(); $result = true; } catch (\Exception $e) { } } return $result; }
/** * 2016-08-08 * http://magento.stackexchange.com/a/108013 * В отличие от @see df_currency_base() здесь мы вынуждены использовать не $scope, а $store, * потому что учётную валюту можно просто считать из настроек, * а текущая валюта может меняться динамически (в том числе посетителем магазина и сессией). * @param int|string|null|bool|StoreInterface $store [optional] * @return Currency */ function df_currency_current($store = null) { return df_store($store)->getCurrentCurrency(); }
/** * 2015-11-28 * @param string|null $path [optional] * 2016-12-01 * If $path is null, '', or '/', then the function will return the frontend root URL. * @param array(string => mixed) $params [optional] * @param Store|int|string|null $store [optional] * @return string * 2016-12-01 * On the frontend side, the @see df_url() behaves identical to df_url_frontend() */ function df_url_frontend($path = null, array $params = [], $store = null) { return df_url_frontend_o()->getUrl($path, df_adjust_route_params($params) + (is_null($store) ? [] : ['_store' => df_store($store)])); }