Пример #1
0
 /**
  * @magentoAppIsolation enabled
  * @magentoAppArea frontend
  */
 public function testInitProductLayout()
 {
     $uniqid = uniqid();
     /** @var $product \Magento\Catalog\Model\Product */
     $product = $this->objectManager->create('Magento\\Catalog\\Model\\Product');
     $product->setTypeId(\Magento\Catalog\Model\Product\Type::DEFAULT_TYPE)->setId(99)->setUrlKey($uniqid);
     /** @var $objectManager \Magento\TestFramework\ObjectManager */
     $objectManager = $this->objectManager;
     $objectManager->get('Magento\\Framework\\Registry')->register('product', $product);
     $this->_helper->initProductLayout($this->page, $product);
     /** @var \Magento\Framework\View\Page\Config $pageConfig */
     $pageConfig = $this->objectManager->get('Magento\\Framework\\View\\Page\\Config');
     $bodyClass = $pageConfig->getElementAttribute(\Magento\Framework\View\Page\Config::ELEMENT_TYPE_BODY, \Magento\Framework\View\Page\Config::BODY_ATTRIBUTE_CLASS);
     $this->assertContains("product-{$uniqid}", $bodyClass);
     $handles = $this->page->getLayout()->getUpdate()->getHandles();
     $this->assertContains('catalog_product_view_type_simple', $handles);
 }
Пример #2
0
 /**
  * {@inheritdoc}
  */
 public function getLayout()
 {
     $pluginInfo = $this->pluginList->getNext($this->subjectType, 'getLayout');
     if (!$pluginInfo) {
         return parent::getLayout();
     } else {
         return $this->___callPlugins('getLayout', func_get_args(), $pluginInfo);
     }
 }
Пример #3
0
 /**
  * Init layout for viewing product page
  *
  * @param \Magento\Framework\View\Result\Page $resultPage
  * @param \Magento\Catalog\Model\Product $product
  * @param null|\Magento\Framework\Object $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(['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()], $handle);
         }
     }
     $resultPage->addPageLayoutHandles(['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()]);
     if ($params && $params->getAfterHandles()) {
         foreach ($params->getAfterHandles() as $handle) {
             $resultPage->addPageLayoutHandles(['id' => $product->getId(), 'sku' => $urlSafeSku, 'type' => $product->getTypeId()], $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);
             }
         }
     }
     $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;
 }
Пример #4
0
 /**
  * Get Breadcrumbs for current controller action
  *
  * @param \Magento\Framework\View\Result\Page $resultPage
  * @return void
  */
 public function getBreadcrumbs(\Magento\Framework\View\Result\Page $resultPage)
 {
     $breadcrumbs = $resultPage->getLayout()->getBlock('breadcrumbs');
     $breadcrumbs->addCrumb('home', ['label' => __('Home'), 'title' => __('Go to Home Page'), 'link' => $this->_storeManager->getStore()->getBaseUrl()]);
     $breadcrumbs->addCrumb('cms_page', ['label' => __('Order Information'), 'title' => __('Order Information')]);
 }
Пример #5
0
 /**
  * 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;
 }
Пример #6
0
 /**
  * Retrieve current layout object
  *
  * @return \Magento\Framework\View\LayoutInterface
  */
 public function getLayout()
 {
     return $this->page->getLayout();
 }