/** * 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\Object 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\Object $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) { // Prepare data $productHelper = $this->_catalogProduct; if (!$params) { $params = new \Magento\Framework\Object(); } // 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()); $this->initProductLayout($resultPage, $product, $params); if ($controller instanceof \Magento\Catalog\Controller\Product\View\ViewInterface) { $resultPage->getLayout()->initMessages($this->messageGroups); } else { throw new \Magento\Framework\Exception\LocalizedException(__('Bad controller interface for showing product')); } 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\Object 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 int $productId * @param \Magento\Framework\App\Action\Action $controller * @param null|\Magento\Framework\Object $params * * @return \Magento\Catalog\Helper\Product\View * @throws \Magento\Framework\Model\Exception */ public function prepareAndRender($productId, $controller, $params = null) { // Prepare data $productHelper = $this->_catalogProduct; if (!$params) { $params = new \Magento\Framework\Object(); } // Standard algorithm to prepare and render product view page $product = $productHelper->initProduct($productId, $controller, $params); if (!$product) { throw new \Magento\Framework\Model\Exception(__('Product is not loaded'), $this->ERR_NO_PRODUCT_LOADED); } $buyRequest = $params->getBuyRequest(); if ($buyRequest) { $productHelper->prepareProductOptions($product, $buyRequest); } if ($params->hasConfigureMode()) { $product->setConfigureMode($params->getConfigureMode()); } $this->_eventManager->dispatch('catalog_controller_product_view', array('product' => $product)); $this->_catalogSession->setLastViewedProductId($product->getId()); $this->initProductLayout($product, $controller, $params); if ($controller instanceof \Magento\Catalog\Controller\Product\View\ViewInterface) { $this->_view->getLayout()->initMessages($this->messageGroups); } else { throw new \Magento\Framework\Model\Exception(__('Bad controller interface for showing product'), $this->ERR_BAD_CONTROLLER_INTERFACE); } $this->_view->renderLayout(); 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); return $this; }