Разница между «URL_TYPE_WEB» и «URL_TYPE_LINK» (а также «URL_TYPE_SKIN», «URL_TYPE_JS», «URL_TYPE_MEDIA») при программном формировании веб-адресов

[10 ноября 2016 г.]    Российская сборка Magento 2.49.12
Magento 2: модули и услуги
#1 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

22.10.2016 03:54

Во многих случаях применение констант Mage_Core_Model_Store::URL_TYPE_WEB и Mage_Core_Model_Store::URL_TYPE_LINK при программном формировании веб-адресов даёт одни и те же результаты, поэтому многие начинающие программисты Magento не понимают разницу между ними.
Более того, многие начинающие программисты Magento даже не знают о существовании этих констант, потому что во многих случаях Magento применяет их неявно (в частности, «URL_TYPE_LINK» неявно применяется при вызове Mage::getBaseUrl() без параметров).

Однако разница между этими константами есть, и она может проявиться в неожиданный для начинающего программиста Magento момент: при изменении значений некоторых административных опций, причём он даже не поймёт, в чём дело.

Разницу можно увидеть в следующем фрагменте кода ядра:
https://github.com/O...e.php#L591-L601
case self::URL_TYPE_WEB:
    $secure = is_null($secure) ? $this->isCurrentlySecure() : (bool)$secure;
    $url = $this->getConfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_url');
    break;

case self::URL_TYPE_LINK:
    $secure = (bool) $secure;
    $url = $this->getConfig('web/' . ($secure ? 'secure' : 'unsecure') . '/base_link_url');
    $url = $this->_updatePathUseRewrites($url);
    $url = $this->_updatePathUseStoreView($url);
    break;

Здесь видно, что при значении «URL_TYPE_LINK» система выполняет 2 дополнительных действия:
  • Добавляет в формируемый адрес index.php при необходимости (если администратор не отключил эту опцию, она по умолчнию включена)
  • Добавляет в формируемый адрес код текущего магазина необходимости (если администратор включил эту опцию)

Таким образом, правило применения «URL_TYPE_LINK» и «URL_TYPE_WEB» можно сформуировать так:
  • используйте «URL_TYPE_LINK» для веб-адресов, которые должны обрабатываться серверной частью Magento (интерпретатором PHP)
  • используйте «URL_TYPE_WEB» для веб-адресов, которые не должны обрабатываться серверной частью Magento (например, если Вы формируете ссылку на уже готовый (статичный) файл, который надо просто отдать браузеру без работы интерпретатора PHP).

Для второго случая, кстати, есть ещё и другие константы: «URL_TYPE_SKIN», «URL_TYPE_JS» и «URL_TYPE_MEDIA»: они хороши для наиболее популярных вариантов второго случая:
  • «URL_TYPE_SKIN»: когда надо сформировать ссылку на файл в папке skin (уже готовый (статичный) файл оформительской темы)
  • «URL_TYPE_JS»: когда надо сформировать ссылку на файл в папке js
  • «URL_TYPE_MEDIA»: когда надо сформировать ссылку на файл в папке media (уже готовый (статичный) файл товарного изображения (и некоторых других видов изображений))


#2 Дмитрий Федюк
  • Администратор
  • Иконка
  • Группа: Администратор
  • Сообщений: 8885
  • Регистрация: 20.02.2010

22.10.2016 10:35

Документация к настройкам HTTP и HTTPS в Российской сборке Magento.

Поделиться темой: