Esempio n. 1
0
/**
 * 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());
}
Esempio n. 2
0
/**
 * 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);
}
Esempio n. 3
0
/**
 * 2016-01-11
 * @param int|string|null|bool|StoreInterface $store [optional]
 * @return int
 */
function df_store_id($store = null)
{
    return df_store($store)->getId();
}
Esempio n. 4
0
 /**
  * @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));
 }
Esempio n. 5
0
/**
 * 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;
}
Esempio n. 6
0
File: O.php Progetto: mage2pro/core
 /**
  * @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__};
 }
Esempio n. 7
0
 /** @return bool */
 public function storeInitialized()
 {
     /** @var bool $result */
     static $result = false;
     if (!$result) {
         try {
             df_store();
             $result = true;
         } catch (\Exception $e) {
         }
     }
     return $result;
 }
Esempio n. 8
0
/**
 * 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();
}
Esempio n. 9
0
/**
 * 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)]));
}