123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- <?php
- namespace Smartwave\Porto\Block;
- class CategoryCollection extends \Magento\Framework\View\Element\Template
- {
- protected $_categoryHelper;
- protected $categoryFlatConfig;
- protected $topMenu;
- /**
- * @param \Magento\Framework\View\Element\Template\Context $context
- * @param \Magento\Catalog\Helper\Category $categoryHelper
- * @param array $data
- */
- public function __construct(
- \Magento\Framework\View\Element\Template\Context $context,
- \Magento\Catalog\Helper\Category $categoryHelper,
- \Magento\Catalog\Model\Indexer\Category\Flat\State $categoryFlatState,
- \Magento\Theme\Block\Html\Topmenu $topMenu
- ) {
- $this->_categoryHelper = $categoryHelper;
- $this->categoryFlatConfig = $categoryFlatState;
- $this->topMenu = $topMenu;
- parent::__construct($context);
- }
- /**
- * Return categories helper
- */
- public function getCategoryHelper()
- {
- return $this->_categoryHelper;
- }
- /**
- * Return categories helper
- * getHtml($outermostClass = '', $childrenWrapClass = '', $limit = 0)
- * example getHtml('level-top', 'submenu', 0)
- */
- public function getHtml()
- {
- return $this->topMenu->getHtml();
- }
- /**
- * 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
- */
- public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true)
- {
- return $this->_categoryHelper->getStoreCategories($sorted , $asCollection, $toLoad);
- }
- /**
- * Retrieve child store categories
- *
- */
- public function getChildCategories($category)
- {
- if ($this->categoryFlatConfig->isFlatEnabled() && $category->getUseFlatResource()) {
- $subcategories = (array)$category->getChildrenNodes();
- } else {
- $subcategories = $category->getChildren();
- }
- return $subcategories;
- }
-
- public function getChildCategoryHtml($category, $icon_open_class="porto-icon-plus-squared", $icon_close_class="porto-icon-minus-squared") {
- $html = '';
- if($childrenCategories = $this->getChildCategories($category)) {
- $html .= '<ul>';
- $i = 0;
- foreach($childrenCategories as $childrenCategory) {
- if (!$childrenCategory->getIsActive()) {
- continue;
- }
- $i++;
- $html .= '<li><a href="'.$this->_categoryHelper->getCategoryUrl($childrenCategory).'">'.$childrenCategory->getName().'</a>';
- $html .= $this->getChildCategoryHtml($childrenCategory, $icon_open_class, $icon_close_class);
- $html .= '</li>';
- }
- $html .= '</ul>';
- if($i > 0)
- $html .= '<a href="javascript:void(0)" class="expand-icon"><em class="'.$icon_open_class.'"></em></a>';
- }
- return $html;
- }
-
- public function getCategorySidebarHtml($icon_open_class="porto-icon-plus-squared", $icon_close_class="porto-icon-minus-squared") {
- $html = '';
- $categories = $this->getStoreCategories(true,false,true);
- $html .= '<ul class="category-sidebar">';
- foreach($categories as $category) {
- if (!$category->getIsActive()) {
- continue;
- }
- $html .= '<li>';
- $html .= '<a href="'.$this->_categoryHelper->getCategoryUrl($category).'">'.$category->getName().'</a>';
- $html .= $this->getChildCategoryHtml($category, $icon_open_class, $icon_close_class);
- $html .= '</li>';
- }
- $html .= '</ul>';
- $html .= '<script type="text/javascript">
- require([
- \'jquery\'
- ], function ($) {
- $(".category-sidebar li > .expand-icon").click(function(){
- if($(this).parent().hasClass("opened")){
- $(this).parent().children("ul").slideUp();
- $(this).parent().removeClass("opened");
- $(this).children(".'.$icon_close_class.'").removeClass("'.$icon_close_class.'").addClass("'.$icon_open_class.'");
- } else {
- $(this).parent().children("ul").slideDown();
- $(this).parent().addClass("opened");
- $(this).children(".'.$icon_open_class.'").removeClass("'.$icon_open_class.'").addClass("'.$icon_close_class.'");
- }
- });
- });
- </script>';
- return $html;
- }
- }
|