<?php namespace NicolasBejean\CategoryWidget\Block\Widget; class CategoryWidget extends \Magento\Framework\View\Element\Template implements \Magento\Widget\Block\BlockInterface { /** * Category helper * * @var \Magento\Catalog\Helper\Category */ protected $_categoryHelper; /** * Category Flat Config * * @var \Magento\Catalog\Model\Indexer\Category\Flat\State */ protected $categoryFlatConfig; /** * Top Menu * * @var \Magento\Theme\Block\Html\Topmenu */ protected $topMenu; /** * Category factory * * @var \Magento\Catalog\Model\CategoryFactory */ protected $_categoryFactory; protected $widgetTitle; protected $widgetContent; /** * @param \Magento\Framework\View\Element\Template\Context $context * @param \Magento\Catalog\Helper\Category $categoryHelper * @param \Magento\Catalog\Model\Indexer\Category\Flat\State $categoryFlatState * @param \Magento\Catalog\Model\CategoryFactory $categoryFactory * @param \Magento\Theme\Block\Html\Topmenu $topMenu * @param \Magento\Framework\Image\AdapterFactory $imageFactory */ public function __construct( \Magento\Framework\View\Element\Template\Context $context, \Magento\Catalog\Helper\Category $categoryHelper, \Magento\Catalog\Model\Indexer\Category\Flat\State $categoryFlatState, \Magento\Catalog\Model\CategoryFactory $categoryFactory, \Magento\Theme\Block\Html\Topmenu $topMenu, \Magento\Framework\Image\AdapterFactory $imageFactory ) { $this->_categoryHelper = $categoryHelper; $this->categoryFlatConfig = $categoryFlatState; $this->_categoryFactory = $categoryFactory; $this->topMenu = $topMenu; $this->_imageFactory = $imageFactory; parent::__construct($context); } /** * Return categories helper */ public function getCategoryHelper() { return $this->_categoryHelper; } public function getCategoryModel($id) { $_category = $this->_categoryFactory->create(); $_category->load($id); return $_category; } /** * Retrieve current store categories * * @param bool|string $sorted * @param bool $asCollection * @param bool $toLoad * @return \Magento\Framework\Data\Tree\Node\Collection|\Magento\Catalog\Model\Resource\Category\Collection|array */ /** * Récupère le titre du widget */ public function getWidgetTitle() { return $this->getData('widget_title'); } /** * Récupère le contenu du widget */ public function getWidgetContent() { return $this->getData('widget_content'); } /** * Récupère la sélection de catégories */ public function getCategorySelection() { $rootCat = $this->getData('category_selection'); $category = $this->_categoryFactory->create(); $collection = $category ->getCollection() ->addAttributeToSelect('image') ->addIdFilter($rootCat); return $collection; } /** * Récupère le template du widget */ public function getTemplate() { return $this->getData('template'); } /** * Récupère la largeur de l'image du widget */ public function getCategoryImageWidth() { return $this->getData('category_image_width'); } /** * Récupère la hauteur de l'image du widget */ public function getCategoryImageHeight() { return $this->getData('category_image_height'); } /** * Permet d'optimiser les images de la catégorie */ public function getResizeImage($image, $width = null, $height = null) { if ($image) : if (is_string($image)) : $isRelativeUrl = substr($image, 0, 1) === '/'; if ($isRelativeUrl) : $image = ltrim($image, '/media/'); else : $image = 'catalog/category/' . $image; endif; endif; endif; if (is_null($width)) : if (is_null($this->getCategoryImageWidth())) : $width = 450; else: $width = $this->getCategoryImageWidth(); endif; endif; if(is_null($height)): if (is_null($this->getCategoryImageHeight())) : $height = 450; else: $height = $this->getCategoryImageHeight(); endif; endif; $absolutePath = $this->_filesystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath('').$image; $imageResized = $this->_filesystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath('resized/'.$width.'/').$image; /** * Créé imageFactory */ $imageResize = $this->_imageFactory->create(); $imageResize->open($absolutePath); $imageResize->constrainOnly(TRUE); $imageResize->keepTransparency(TRUE); $imageResize->keepFrame(FALSE); $imageResize->keepAspectRatio(TRUE); $imageResize->resize($width,$height); /** * Enregistre l'image dans le dossier de destination */ $destination = $imageResized ; $imageResize->save($destination); $resizedURL = $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA).'resized/'.$width.'/'.$image; return $resizedURL; } }