![]() Server : Apache System : Linux server2.corals.io 4.18.0-348.2.1.el8_5.x86_64 #1 SMP Mon Nov 15 09:17:08 EST 2021 x86_64 User : corals ( 1002) PHP Version : 7.4.33 Disable Function : exec,passthru,shell_exec,system Directory : /home/corals/cartforge.co/vendor/magento/module-catalog/Block/Widget/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Block\Widget; use Magento\CatalogUrlRewrite\Model\ProductUrlRewriteGenerator; use Magento\UrlRewrite\Model\UrlFinderInterface; use Magento\UrlRewrite\Service\V1\Data\UrlRewrite; /** * Render the URL of given entity */ class Link extends \Magento\Framework\View\Element\Html\Link implements \Magento\Widget\Block\BlockInterface { /** * Entity model name which must be used to retrieve entity specific data. * @var null|\Magento\Catalog\Model\ResourceModel\AbstractResource */ protected $_entityResource = null; /** * Prepared href attribute * * @var string */ protected $_href; /** * Prepared anchor text * * @var string */ protected $_anchorText; /** * Url finder for category * * @var UrlFinderInterface */ protected $urlFinder; /** * @param \Magento\Framework\View\Element\Template\Context $context * @param UrlFinderInterface $urlFinder * @param \Magento\Catalog\Model\ResourceModel\AbstractResource $entityResource * @param array $data */ public function __construct( \Magento\Framework\View\Element\Template\Context $context, UrlFinderInterface $urlFinder, \Magento\Catalog\Model\ResourceModel\AbstractResource $entityResource = null, array $data = [] ) { parent::__construct($context, $data); $this->urlFinder = $urlFinder; $this->_entityResource = $entityResource; } /** * Prepare url using passed id path and return it * * @throws \RuntimeException * @return string|false if path was not found in url rewrites. * @SuppressWarnings(PHPMD.NPathComplexity) */ public function getHref() { if ($this->_href === null) { if (!$this->getData('id_path')) { throw new \RuntimeException('Parameter id_path is not set.'); } $rewriteData = $this->parseIdPath($this->getData('id_path')); $href = false; $store = $this->hasStoreId() ? $this->_storeManager->getStore($this->getStoreId()) : $this->_storeManager->getStore(); $filterData = [ UrlRewrite::ENTITY_ID => $rewriteData[1], UrlRewrite::ENTITY_TYPE => $rewriteData[0], UrlRewrite::STORE_ID => $store->getId(), ]; if (!empty($rewriteData[2]) && $rewriteData[0] == ProductUrlRewriteGenerator::ENTITY_TYPE) { $filterData[UrlRewrite::METADATA]['category_id'] = $rewriteData[2]; } $rewrite = $this->urlFinder->findOneByData($filterData); if ($rewrite) { $href = $store->getUrl('', ['_direct' => $rewrite->getRequestPath()]); if ($this->addStoreCodeParam($store, $href)) { $href .= (strpos($href, '?') === false ? '?' : '&') . '___store=' . $store->getCode(); } } $this->_href = $href; } return $this->_href; } /** * Checks whether store code query param should be appended to the URL * * @param \Magento\Store\Model\Store $store * @param string $url * @return bool * @throws \Magento\Framework\Exception\NoSuchEntityException */ private function addStoreCodeParam(\Magento\Store\Model\Store $store, string $url): bool { return $this->getStoreId() && !$store->isUseStoreInUrl() && $store->getId() !== $this->_storeManager->getStore()->getId() && strpos($url, '___store') === false; } /** * Parse id_path * * @param string $idPath * @throws \RuntimeException * @return array */ protected function parseIdPath($idPath) { $rewriteData = explode('/', $idPath); if (!isset($rewriteData[0]) || !isset($rewriteData[1])) { throw new \RuntimeException('Wrong id_path structure.'); } return $rewriteData; } /** * Prepare label using passed text as parameter. * * If anchor text was not specified get entity name from DB. * * @return string */ public function getLabel() { if (!$this->_anchorText) { if ($this->getData('anchor_text')) { $this->_anchorText = $this->getData('anchor_text'); } elseif ($this->_entityResource) { $idPath = $this->_getData('id_path') !== null ? explode('/', $this->_getData('id_path')) : []; if (isset($idPath[1])) { $id = $idPath[1]; if ($id) { $this->_anchorText = $this->_entityResource->getAttributeRawValue( $id, 'name', $this->_storeManager->getStore() ); } } } } return $this->_anchorText; } /** * Render block HTML * * @return string empty string if url can't be prepared */ protected function _toHtml() { if ($this->getHref()) { return parent::_toHtml(); } return ''; } }