Вызовите блок 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 в своей теме, просто чтобы проверить, правильно ли я выбрал пути. В результате описание во внешнем интерфейсе просто исчезло, независимо от того, что я написал в файле - даже если я просто скопировал исходный файл в файл переопределения. Я просто не могу понять, почему...
Кто-нибудь может помочь?
Спасибо, Валентин
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>