![]() 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/old/vendor/magento/module-catalog/Helper/Product/ |
<?php /** * Copyright © Magento, Inc. All rights reserved. * See COPYING.txt for license details. */ namespace Magento\Catalog\Helper\Product; use Magento\Catalog\Model\Product\Attribute\LayoutUpdateManager; use Magento\Framework\App\ObjectManager; use Magento\Framework\View\Result\Page as ResultPage; /** * Catalog category helper * * @SuppressWarnings(PHPMD.CouplingBetweenObjects) * @SuppressWarnings(PHPMD.CookieAndSessionMisuse) */ class View extends \Magento\Framework\App\Helper\AbstractHelper { /** * List of catalog product session message groups * * @var array */ protected $messageGroups; /** * @var \Magento\Framework\Registry */ protected $_coreRegistry = null; /** * @var \Magento\Catalog\Helper\Product */ protected $_catalogProduct = null; /** * @var \Magento\Catalog\Model\Design */ protected $_catalogDesign; /** * @var \Magento\Catalog\Model\Session */ protected $_catalogSession; /** * @var \Magento\Framework\Message\ManagerInterface */ protected $messageManager; /** * @var \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator */ protected $categoryUrlPathGenerator; /** * @var \Magento\Framework\Stdlib\StringUtils */ private $string; /** * @var LayoutUpdateManager */ private $layoutUpdateManager; /** * Constructor * * @param \Magento\Framework\App\Helper\Context $context * @param \Magento\Catalog\Model\Session $catalogSession * @param \Magento\Catalog\Model\Design $catalogDesign * @param \Magento\Catalog\Helper\Product $catalogProduct * @param \Magento\Framework\Registry $coreRegistry * @param \Magento\Framework\Message\ManagerInterface $messageManager * @param \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator * @param array $messageGroups * @param \Magento\Framework\Stdlib\StringUtils|null $string * @param LayoutUpdateManager|null $layoutUpdateManager * @SuppressWarnings(PHPMD.ExcessiveParameterList) */ public function __construct( \Magento\Framework\App\Helper\Context $context, \Magento\Catalog\Model\Session $catalogSession, \Magento\Catalog\Model\Design $catalogDesign, \Magento\Catalog\Helper\Product $catalogProduct, \Magento\Framework\Registry $coreRegistry, \Magento\Framework\Message\ManagerInterface $messageManager, \Magento\CatalogUrlRewrite\Model\CategoryUrlPathGenerator $categoryUrlPathGenerator, array $messageGroups = [], \Magento\Framework\Stdlib\StringUtils $string = null, ?LayoutUpdateManager $layoutUpdateManager = null ) { $this->_catalogSession = $catalogSession; $this->_catalogDesign = $catalogDesign; $this->_catalogProduct = $catalogProduct; $this->_coreRegistry = $coreRegistry; $this->messageGroups = $messageGroups; $this->messageManager = $messageManager; $this->categoryUrlPathGenerator = $categoryUrlPathGenerator; $this->string = $string ?: ObjectManager::getInstance()->get(\Magento\Framework\Stdlib\StringUtils::class); $this->layoutUpdateManager = $layoutUpdateManager ?? ObjectManager::getInstance()->get(LayoutUpdateManager::class); parent::__construct($context); } /** * Add meta information from product to layout * * @param \Magento\Framework\View\Result\Page $resultPage * @param \Magento\Catalog\Model\Product $product * @return $this */ private function preparePageMetadata(ResultPage $resultPage, $product) { $pageLayout = $resultPage->getLayout(); $pageConfig = $resultPage->getConfig(); $metaTitle = $product->getMetaTitle(); $pageConfig->setMetaTitle($metaTitle); $pageConfig->getTitle()->set($metaTitle ?: $product->getName()); $keyword = $product->getMetaKeyword(); $currentCategory = $this->_coreRegistry->registry('current_category'); if ($keyword) { $pageConfig->setKeywords($keyword); } elseif ($currentCategory) { $pageConfig->setKeywords($product->getName()); } $description = $product->getMetaDescription(); if ($description) { $pageConfig->setDescription($description); } else { $productDescription = is_string($product->getDescription()) ? $this->string->substr(strip_tags($product->getDescription()), 0, 255) : ''; $pageConfig->setDescription($productDescription); } if ($this->_catalogProduct->canUseCanonicalTag()) { $pageConfig->addRemotePageAsset( $product->getUrlModel()->getUrl($product, ['_ignore_category' => true]), 'canonical', ['attributes' => ['rel' => 'canonical']] ); } $pageMainTitle = $pageLayout->getBlock('page.main.title'); if ($pageMainTitle) { $pageMainTitle->setPageTitle($product->getName()); } return $this; } /** * Init layout for viewing product page * * @param \Magento\Framework\View\Result\Page $resultPage * @param \Magento\Catalog\Model\Product $product * @param null|\Magento\Framework\DataObject $params * @return \Magento\Catalog\Helper\Product\View * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function initProductLayout(ResultPage $resultPage, $product, $params = null) { $settings = $this->_catalogDesign->getDesignSettings($product); $pageConfig = $resultPage->getConfig(); if ($settings->getCustomDesign()) { $this->_catalogDesign->applyCustomDesign($settings->getCustomDesign()); } // Apply custom page layout if ($settings->getPageLayout()) { $pageConfig->setPageLayout($settings->getPageLayout()); } $urlSafeSku = rawurlencode($product->getSku()); // Load default page handles and page configurations if ($params && $params->getBeforeHandles()) { foreach ($params->getBeforeHandles() as $handle) { $resultPage->addPageLayoutHandles(['type' => $product->getTypeId()], $handle, false); $resultPage->addPageLayoutHandles(['id' => $product->getId(), 'sku' => $urlSafeSku], $handle); } } $resultPage->addPageLayoutHandles(['type' => $product->getTypeId()], null, false); $resultPage->addPageLayoutHandles(['id' => $product->getId(), 'sku' => $urlSafeSku]); if ($params && $params->getAfterHandles()) { foreach ($params->getAfterHandles() as $handle) { $resultPage->addPageLayoutHandles(['type' => $product->getTypeId()], $handle, false); $resultPage->addPageLayoutHandles(['id' => $product->getId(), 'sku' => $urlSafeSku], $handle); } } // Apply custom layout update once layout is loaded $update = $resultPage->getLayout()->getUpdate(); $layoutUpdates = $settings->getLayoutUpdates(); if ($layoutUpdates) { if (is_array($layoutUpdates)) { foreach ($layoutUpdates as $layoutUpdate) { $update->addUpdate($layoutUpdate); } } } if ($settings->getPageLayoutHandles()) { $resultPage->addPageLayoutHandles($settings->getPageLayoutHandles()); } $currentCategory = $this->_coreRegistry->registry('current_category'); $controllerClass = $this->_request->getFullActionName(); if ($controllerClass != 'catalog-product-view') { $pageConfig->addBodyClass('catalog-product-view'); } $pageConfig->addBodyClass('product-' . $product->getUrlKey()); if ($currentCategory instanceof \Magento\Catalog\Model\Category) { $pageConfig->addBodyClass('categorypath-' . $this->categoryUrlPathGenerator->getUrlPath($currentCategory)) ->addBodyClass('category-' . $currentCategory->getUrlKey()); } return $this; } /** * Prepares product view page - inits layout and all needed stuff * * $params can have all values as $params in \Magento\Catalog\Helper\Product - initProduct(). * Plus following keys: * - 'buy_request' - \Magento\Framework\DataObject holding buyRequest to configure product * - 'specify_options' - boolean, whether to show 'Specify options' message * - 'configure_mode' - boolean, whether we're in Configure-mode to edit product configuration * * @param \Magento\Framework\View\Result\Page $resultPage * @param int $productId * @param \Magento\Framework\App\Action\Action $controller * @param null|\Magento\Framework\DataObject $params * @throws \Magento\Framework\Exception\LocalizedException * @throws \Magento\Framework\Exception\NoSuchEntityException * @return \Magento\Catalog\Helper\Product\View */ public function prepareAndRender(ResultPage $resultPage, $productId, $controller, $params = null) { /** * Remove default action handle from layout update to avoid its usage during processing of another action, * It is possible that forwarding to another action occurs, e.g. to 'noroute'. * Default action handle is restored just before the end of current method. */ $defaultActionHandle = $resultPage->getDefaultLayoutHandle(); $handles = $resultPage->getLayout()->getUpdate()->getHandles(); if (in_array($defaultActionHandle, $handles)) { $resultPage->getLayout()->getUpdate()->removeHandle($resultPage->getDefaultLayoutHandle()); } if (!$controller instanceof \Magento\Catalog\Controller\Product\View\ViewInterface) { throw new \Magento\Framework\Exception\LocalizedException( __('Bad controller interface for showing product') ); } // Prepare data $productHelper = $this->_catalogProduct; if (!$params) { $params = new \Magento\Framework\DataObject(); } // Standard algorithm to prepare and render product view page $product = $productHelper->initProduct($productId, $controller, $params); if (!$product) { throw new \Magento\Framework\Exception\NoSuchEntityException(__('Product is not loaded')); } $buyRequest = $params->getBuyRequest(); if ($buyRequest) { $productHelper->prepareProductOptions($product, $buyRequest); } if ($params->hasConfigureMode()) { $product->setConfigureMode($params->getConfigureMode()); } $this->_eventManager->dispatch('catalog_controller_product_view', ['product' => $product]); $this->_catalogSession->setLastViewedProductId($product->getId()); if (in_array($defaultActionHandle, $handles)) { $resultPage->addDefaultHandle(); } $this->initProductLayout($resultPage, $product, $params); $this->preparePageMetadata($resultPage, $product); return $this; } }