Magento 2.3.2: Неперехваченная ошибка: Вызов функции-члена setUseContainer() в логическом
Я сталкиваюсь с этой ошибкой, когда пытаюсь войти в систему как клиент, но когда я возвращаюсь или дома, я вошел в систему, но каждый раз, когда я выхожу из системы и снова вхожу, я сталкиваюсь с этой ошибкой, также когда я вошел в систему и перехожу к My Account
я получаю эту ошибку, не знаю почему.
Неустранимая ошибка: Неперехваченная ошибка: Вызов функции-члена setUseContainer() на логическом в /var/www/html/поставщике/magento/модуле-список пожеланий/Блок/Клиент/Список пожеланий.php:127 Трассировка стека: #0 /var/www/html/vendor/magento/framework/View/Element/AbstractBlock.php (283): Magento\Список желаний\Блок\Клиент\Список желаний ->_preparelayout() #1/var/www/html/vendor/magento/framework/View/Layout/Generator/Block.php (149): Magento\Framework\View\Element\AbstractBlock->setLayout(Object(Magento\Framework\View\Layout\Interceptor)) № 2/var/www/html/vendor/magento/framework/View/Layout/GeneratorPool.php (81): Magento\Framework\View\Layout\Generator\Block->process(Object(Magento\Framework\View\Layout\Reader\Context), Объект (Magento\Фреймворк\Представление\Макет\Генератор\Контекст))#3/var/www/html/vendor/magento/framework/View/Layout.php (343): Magento\Framework\View\Layout\GeneratorPool->process(Object(Magento\Framework\View\Layout\Reader\Context), Объект (Magento\Фреймворк\Представление\Макет\Генератор\Контекст))#4/var/www/html/поставщик/magento/фреймворк/Представление/Макет/Конструктор.ph в /var/www/html/vendor/magento/module-wishlist/Block/Customer/Wishlist.php в строке 127
4 answers
Я думаю, что мне следует добавить еще один ответ и оставить предыдущий ответ таким, как он есть, в целях получения знаний. Я понял, что мне чего-то не хватает. очень простой способ решить эту проблему.
У меня есть два переопределенных файла, которые вызывают эту ошибку customer_account_index.xml
& wishlist_index_index.xml
, я просто добавляю блок wishlist_item_pager
в нужное место. Вот оно:
app/design/frontend/Magestore/theme/Magento_Customer/layout/customer_account_index.xml
.
.
.
<block class="Magento\Wishlist\Block\Customer\Wishlist" name="customer.wishlist" template="customer_account_view.phtml" cacheable="false">
<block class="Magento\Theme\Block\Html\Pager" name="wishlist_item_pager"/>
.
.
.
app/design/frontend/Magestore/theme/Magento_Wishlist/layout/wishlist_index_index.xml
.
.
.
<block class="Magento\Wishlist\Block\Customer\Wishlist" name="customer.wishlist" template="view.phtml" cacheable="false">
<block class="Magento\Theme\Block\Html\Pager" name="wishlist_item_pager"/>
.
.
.
Код был введен здесь: https://github.com/magento/magento2/pull/19305
В качестве исправления для: https://github.com/magento/magento2/issues/19292
Поэтому просто проверьте, перезаписали ли вы wishlist_index_index.xml
и посмотрите, присутствует ли блок wishlist_item_pager
.
Да, я решил свою проблему, возможно, это не лучший способ ее решить, но у меня нет лучшего варианта, если вы найдете лучший ответ, пожалуйста, дайте мне знать.
Таким образом, их файл в /vendor/magento/module-wishlist/Block/Customer/Wishlist.php
, в этом файле их метод _prepareLayout()
, в основном перед Magento 2.3.1
их только этот код.
protected function _prepareLayout()
{
parent::_prepareLayout();
$this->pageConfig->getTitle()->set(__('My Wish List'));
return $this;
}
После этого этот метод превратился в следующее:
protected function _prepareLayout()
{
parent::_prepareLayout();
$this->pageConfig->getTitle()->set(__('My Wish List'));
// $this->getChildBlock('wishlist_item_pager')
// ->setUseContainer(
// true
// )->setShowAmounts(
// true
// )->setFrameLength(
// $this->_scopeConfig->getValue(
// 'design/pagination/pagination_frame',
// \Magento\Store\Model\ScopeInterface::SCOPE_STORE
// )
// )->setJump(
// $this->_scopeConfig->getValue(
// 'design/pagination/pagination_frame_skip',
// \Magento\Store\Model\ScopeInterface::SCOPE_STORE
// )
// )->setLimit(
// $this->getLimit()
// )
// ->setCollection($this->getWishlistItems());
return $this;
}
И ошибка выше вызвана этим кодом добавления, поэтому я прокомментировал код добавления, и моя ошибка исчезла, я знаю, что это нехорошо изменения в поставщике, также у меня есть переопределенный файл /app/design/frontend/Magestore/theme/Magento_Customer/layout/customer_account_index.xml
, в этом файле их код:
some code above...
<block class="Magento\Wishlist\Block\Customer\Wishlist" name="customer.wishlist" template="customer_account_view.phtml" cacheable="false">
<block class="Magento\Wishlist\Block\Rss\Link" name="wishlist.rss.link" template="rss/wishlist.phtml"/>
<block class="Magento\Wishlist\Block\Customer\Wishlist\Items" name="customer.wishlist.items" as="items" template="item/list.phtml" cacheable="false">
<block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Image" name="customer.wishlist.item.image" template="item/column/image.phtml" cacheable="false"/>
<block class="Magento\Wishlist\Block\Customer\Wishlist\Item\Column\Info" name="customer.wishlist.item.name" template="item/column/name.phtml" cacheable="false"/>
</block>
</block>
some code below...
Этому коду нужен $this->getChildBlock('wishlist_item_pager')
, которого нет в customer_account_index.xml
, и если я попытаюсь добавить или удалить (<referenceBlock name="wishlist_item_pager" remove="true"/>
) этот блок =wishlist_item_pager
, но при этом моя пользовательская тема испортилась, поэтому я решил использовать старый метод _prepareLayout()
.
Спасибо.
Я должен был добавить недостающий блок
<block class="Magento\Theme\Block\Html\Pager" name="wishlist_item_pager"/>
В каждый блок с классом Magento\Wishlist\Block\Customer\Wishlist
.