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

enter image description here

Author: Partab Saifuddin Zakir, 2019-08-28

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"/>
.
.
.
 4
Author: Partab Saifuddin Zakir, 2019-08-29 12:56:05

Код был введен здесь: https://github.com/magento/magento2/pull/19305

В качестве исправления для: https://github.com/magento/magento2/issues/19292

Поэтому просто проверьте, перезаписали ли вы wishlist_index_index.xml и посмотрите, присутствует ли блок wishlist_item_pager.

Исходный код на: https://github.com/webkul-ratnesh/magento2/blob/4a149505a71c883a2c93740d3e4fb5c265a2d267/app/code/Magento/Wishlist/view/frontend/layout/wishlist_index_index.xml#L16

 3
Author: Morgy, 2019-08-29 11:31:37

Да, я решил свою проблему, возможно, это не лучший способ ее решить, но у меня нет лучшего варианта, если вы найдете лучший ответ, пожалуйста, дайте мне знать.

Таким образом, их файл в /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().

Спасибо.

 1
Author: Partab Saifuddin Zakir, 2019-08-29 11:25:11

Я должен был добавить недостающий блок

<block class="Magento\Theme\Block\Html\Pager" name="wishlist_item_pager"/>

В каждый блок с классом Magento\Wishlist\Block\Customer\Wishlist.

 0
Author: tokyodrift1993, 2020-12-16 13:45:00