Вызовите блок CMS с именем категории в качестве идентификатора


Цель состоит в том, чтобы вызвать статический блок cms в нижней части страницы категории с идентификатором блока ==имя категории (чтобы я мог создать блок в бэкэнде администратора для каждой категории).

Поэтому я сначала подумал о том, чтобы просто добавить статический блок cms в catalog_category.xml в моей теме, но я думаю, что невозможно назвать имя категории внутри xml (или это так?)

Вторая попытка состояла в том, чтобы вызвать шаблон phtml в xml-файле. В табличке phtml я просто вызовите статический блок с именем категории. К сожалению, я не могу заставить XML работать:/

Это то, что я добавил в MyTheme/Magento_Catalog/layout/catalog_category_view.xml

            <block class="Magento\Catalog\Block\Category\View" name="category.bottom" template="Magento_Catalog::category/bottom.phtml"/>

И в каталоге шаблонов в разделе категория я добавил нижний.phtml. Но когда я открываю категорию сейчас, там написано "Путь к файлу запрещен по соображениям безопасности".

Поэтому я попытался просто вызвать шаблон, который уже есть (описание.phtml), но это не сработало либо.

Теперь это становится странным: я попытался переопределить файл description.phtml в своей теме, просто чтобы проверить, правильно ли я выбрал пути. В результате описание во внешнем интерфейсе просто исчезло, независимо от того, что я написал в файле - даже если я просто скопировал исходный файл в файл переопределения. Я просто не могу понять, почему...

Кто-нибудь может помочь?

Спасибо, Валентин

Author: Valentin PKStore, 2018-06-12

1 answers

Вам необходимо создать небольшое расширение для этого требования.

Сначала создайте класс блоков View.php, который генерирует для нижнего раздела cms который должен быть расположен по адресу app/code/Parkourstore/Catalog/Block/Category

<?php
/**
 * Created by Amit Bera.
 * User: Amit Kumar Bera
 * Email: [email protected]
 * Date: 13-06-2018
 * Time: 09:04
 */

namespace Parkourstore\Catalog\Block\Category;


class View extends \Magento\Catalog\Block\Category\View
{
    public  function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Catalog\Model\Layer\Resolver $layerResolver,
        \Magento\Framework\Registry $registry,
        \Magento\Catalog\Helper\Category $categoryHelper,
        array $data = [])
    {
        parent::__construct($context, $layerResolver, $registry, $categoryHelper, $data);
    }

    /**
     * @return mixed
     */
    public function getCmsBlockBottomHtml()
    {
        if (!$this->getData('cms_block_bottom_html')) {
            $html = $this->getLayout()->createBlock(
                \Magento\Cms\Block\Block::class
            )->setBlockId(
                $this->getCurrentCategory()->getName()
            )->toHtml();
            $this->setData('cms_block_bottom_html', $html);
        }
        return $this->getData('cms_block_bottom_html');
    }
}
  • Во-вторых, вы должны создать файл шаблона для этого блока по адресу app/code/Parkourstore/Catalog/view/frontend/templates/category/bottom-cms.phtml
 <?= $block->getCmsBlockBottomHtml() ?>
  • 3-й вы должны вызвать этот блок с помощью макета, поэтому создайте `catalog_category_view.xml

`

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="2columns-left" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <body>
        <referenceContainer name="content.bottom">
             <block class="{VendorName}\{ModuleName}\Block\Category\View" name="category.cms.bottom" template="{VendorName}_{ModuleName}::category/bottom-cms.phtml"/>
       </referenceContainer>
    </body> 
</page>      
 2
Author: Amit Bera, 2018-06-14 07:15:17