<?php /** * Copyright © 2016 Ihor Vansach (ihor@magefan.com). All rights reserved. * See LICENSE.txt for license details (http://opensource.org/licenses/osl-3.0.php). * * Glory to Ukraine! Glory to the heroes! */ namespace Magefan\Blog\Block\Widget; /** * Blog recent posts widget */ class Recent extends \Magefan\Blog\Block\Post\PostList\AbstractList implements \Magento\Widget\Block\BlockInterface { /** * @var \Magefan\Blog\Model\CategoryFactory */ protected $_categoryFactory; /** * @var \Magefan\Blog\Model\Category */ protected $_category; /** * Construct * * @param \Magento\Framework\View\Element\Context $context * @param \Magento\Framework\Registry $coreRegistry * @param \Magento\Cms\Model\Template\FilterProvider $filterProvider * @param \Magefan\Blog\Model\ResourceModel\Post\CollectionFactory $postCollectionFactory * @param \Magefan\Blog\Model\Url $url * @param \Magefan\Blog\Model\CategoryFactory $categoryFactory * @param array $data */ public function __construct( \Magento\Framework\View\Element\Template\Context $context, \Magento\Framework\Registry $coreRegistry, \Magento\Cms\Model\Template\FilterProvider $filterProvider, \Magefan\Blog\Model\ResourceModel\Post\CollectionFactory $postCollectionFactory, \Magefan\Blog\Model\Url $url, \Magefan\Blog\Model\CategoryFactory $categoryFactory, array $data = [] ) { parent::__construct($context, $coreRegistry, $filterProvider, $postCollectionFactory, $url, $data); $this->_categoryFactory = $categoryFactory; } /** * Set blog template * * @return this */ public function _toHtml() { $this->setTemplate( $this->getData('custom_template') ?: 'widget/recent.phtml' ); return parent::_toHtml(); } /** * Retrieve block title * * @return string */ public function getTitle() { return $this->getData('title') ?: __('Recent Blog Posts'); } /** * Prepare posts collection * * @return void */ protected function _preparePostCollection() { $size = $this->getData('number_of_posts'); if (!$size) { $size = (int) $this->_scopeConfig->getValue( 'mfblog/sidebar/recent_posts/posts_per_page', \Magento\Store\Model\ScopeInterface::SCOPE_STORE ); } $this->setPageSize($size); parent::_preparePostCollection(); if ($category = $this->getCategory()) { $categories = $category->getChildrenIds(); $categories[] = $category->getId(); $this->_postCollection->addCategoryFilter($categories); } } /** * Retrieve category instance * * @return \Magefan\Blog\Model\Category */ public function getCategory() { if ($this->_category === null) { if ($categoryId = $this->getData('category_id')) { $category = $this->_categoryFactory->create(); $category->load($categoryId); $storeId = $this->_storeManager->getStore()->getId(); if ($category->isVisibleOnStore($storeId)) { $category->setStoreId($storeId); return $this->_category = $category; } } $this->_category = false; } return $this->_category; } /** * Retrieve post short content * @param \Magefan\Blog\Model\Post $post * * @return string */ public function getShorContent($post) { $content = $post->getContent(); $pageBraker = '<!-- pagebreak -->'; if ($p = mb_strpos($content, $pageBraker)) { $content = mb_substr($content, 0, $p); } $content = $this->_filterProvider->getPageFilter()->filter($content); $dom = new \DOMDocument(); $dom->loadHTML($content); $content = $dom->saveHTML(); return $content; } }