Проблема: Попытка переопределить файл phtml Magento по умолчанию, я получаю ошибку
Мне нужно получить эти: (нумерация страниц в нижнем колонтитуле, сортировщик)
Мои пользовательские модули:
1) Vendor/TglsSearch --> Override from Magento CatalogSearch
2) Vendor/Tglcatalog ---> from Magento Catalo
В теге app \ design \ frontend \ Vendor \
ОБНОВЛЕННЫЙ КОД:
УДАЛЕН ниже папка
В папке Magento_Catalog :
templates\product\list\toolbar.phtml
templates\product\list\toolbar\amount.phtml
templates\product\list\toolbar\limiter.phtml
templates\product\list\toolbar\sorter.phtml
templates\product\list\toolbar\viewmode.phtml
Это то, что я получаю пустую страницу без результатов на первой странице:
Добавлен упомянутый код в файл блока:
Производитель \ Модуль \ Block \ Продукт \ ListProduct.php
class ListProduct extends \Magento\Catalog\Block\Product\ListProduct
{
public function __construct(
/*passing all Constructors parameters to the parent class */
\Magento\Catalog\Block\Product\Context $context,
\Magento\Framework\Data\Helper\PostHelper $postDataHelper,
\Magento\Catalog\Model\Layer\Resolver $layerResolver,
CategoryRepositoryInterface $categoryRepository,
\Magento\Framework\Url\Helper\Data $urlHelper,
\Vendor\Module\Helper\Data $tglssearchHelper,
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $catalogResourceModelProductCollectionFactory,
\Magento\Catalog\Model\Config $catalogConfig,
\Magento\Store\Model\StoreManagerInterface $storeManager,
\Magento\Catalog\Model\ProductFactory $productFactory, //Pagination
array $data = []
) {
$this->tglssearchHelper = $tglssearchHelper;
$this->catalogResourceModelProductCollectionFactory = $catalogResourceModelProductCollectionFactory;
$this->catalogConfig = $catalogConfig;
$this->storeManager = $storeManager;
$this->_productFactory = $productFactory; //Pagination
$this->urlHelper = $urlHelper;
parent::__construct(
$context,
$postDataHelper,
$layerResolver,
$categoryRepository,
$urlHelper,
$data
);
//updated code
$collection= $this->_getProductCollection();
$this->setCollection($collection);
}
public function _prepareLayout(){
parent::_prepareLayout();
if ($this->_getProductCollection()) {
// create pager block for collection
$toolbar = $this->getToolbarBlock();
$pager = $this->getLayout()->createBlock(
'Magento\Theme\Block\Html\Pager', 'list.pager'
)->setCollection(
$this->_getProductCollection() // assign collection to pager
);
$toolbar->setChild('product_list_toolbar_pager', $pager); // set pager block in layout
// called prepare sortable parameters
$collection = $this->_getProductCollection();
// use sortable parameters
$orders = $this->getAvailableOrders();
if ($orders) {
$toolbar->setAvailableOrders($orders);
}
$sort = $this->getSortBy();
if ($sort) {
$toolbar->setDefaultOrder($sort);
}
$dir = $this->getDefaultDirection();
if ($dir) {
$toolbar->setDefaultDirection($dir);
}
$modes = $this->getModes();
if ($modes) {
$toolbar->setModes($modes);
}
$toolbar->setCollection($collection);
$this->setChild('toolbar', $toolbar);
$this->_getProductCollection()->load();
}
return $this;
}
protected function _getProductCollection()
{
$tagalys = $this->tglssearchHelper->getSearchData();
if($tagalys == false) {
return parent::_getProductCollection();
} else {
$searchResult = $tagalys;
if(empty($searchResult)) {
return parent::_getProductCollection();
}
$collection = $this->_productCollection = $this->catalogResourceModelProductCollectionFactory->create()
->addAttributeToSelect($this->catalogConfig->getProductAttributes())
->setStore($this->storeManager->getStore())
->addFieldToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH)
->addAttributeToFilter( 'entity_id', array( 'in' => $searchResult['results'] ) );
$orderString = array('CASE e.entity_id');
foreach($searchResult['results'] as $i => $productId) {
$orderString[] = 'WHEN '.$productId.' THEN '.$i;
}
$orderString[] = 'END';
$orderString = implode(' ', $orderString);
$collection->getSelect()->order(new \Zend_Db_Expr($orderString));
return $this->_productCollection;
}
}
public function getToolbarBlock()
{
$blockName = $this->getToolbarBlockName();
if ($blockName) {
$block = $this->getLayout()->getBlock($blockName);
if ($block) {
return $block;
}
}
$block = $this->getLayout()->createBlock($this->_defaultToolbarBlock, uniqid(microtime()));
return $block;
}
public function getMode() //Pagination
{
return $this->getChildBlock('toolbar')->getCurrentMode();
}
public function getToolbarHtml() //Pagination
{
return $this->getChildHtml('toolbar');
}
protected function getPriceRender()
{
return $this->getLayout()->getBlock('product.price.render.default');
}
protected function _getConfig()
{
return $this->_catalogConfig;
}
}
Для phtml :
\ Приложение \ дизайн \ внешний интерфейс \ Vendor \ тег \ Magento_Catalog \ Шаблоны \ продукт \ list.phtml
<?php
$_productCollection = $block->getLoadedProductCollection();
$_helper = $this->helper('Magento\Catalog\Helper\Output');
?>
<?php if (!$_productCollection->count()): ?>
<div class="message info empty"><div><?php /* @escapeNotVerified */ echo __('We can\'t find products matching the selection.') ?></div></div>
<?php else: ?>
<?php echo $block->getToolbarHtml() ?> //Have called here
....
....
<?php echo($iterator == count($_productCollection)+1) ? '</li>' : '' ?>
<?php endforeach; ?>
</ol>
</div>
<?php echo $block->getToolbarHtml() ?> //Have called here
....
Это то, что я получу, если я нажму на ссылку категории в веб-интерфейсе.
В Magento_CatalogSearch :
templates\result.phtml
В Magento_Theme :
templates\html\pager.phtml
layout\default.html
web\images\my_logo.png
ТЕПЕРЬ ошибка result.phtml, похоже, исчезла, но все же мои продукты не отображаются в интерфейсе с нумерацией страниц
В
Admin->Content->Design configuration-> Enabled my Custom Theme.
ПРИМЕЧАНИЕ. В моем пользовательском модуле я удалил папку просмотра, в которой были шаблоны и файлы макетов.
Проблема :
Я должен получить пейджер (нумерацию страниц), сортировщик и т. Д. Из вышеуказанных файлов phtml.
1) Но мои продукты не отображаются из result.phtml (но мой var / log имеет идентификаторы продуктов) ... внешний интерфейс не отображается
2) Нет нумерации страниц или сортировки
Ответы:
Похоже, вы должны установить пейджер и сортировку в своем файле phtml.
Я следовал ниже шагов pr добавить нумерацию страниц и сортировку.
В вашем файле блока добавьте код для добавления пагинации:
Также определите ниже свойство:
В phtml файле добавьте ниже код до и после листинга:
источник