Удалить отключенный продукт из списка желаний - PullRequest
0 голосов
/ 22 мая 2019

Мне нужно удалить все отключенные продукты из списка желаний, и для этого я записываю проверку статуса продукта в Magento_Wishlist/templates/item/list.phtml следующим образом:

if($product->getStatus() == \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED):
------------
endif;

Я также добавляю плагин для обновления списка пожеланий в заголовкечасть как показано ниже:

/ etc / di.xml:

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Wishlist\CustomerData\Wishlist">
        <plugin name="vendor-customer-wishlist"
                type="Vendor\Customer\Plugin\WishlistPlugin" sortOrder="1" />
    </type>
</config>

Поставщик / Клиент / Плагин / WishlistPlugin

<?php
namespace Vendor\Customer\Plugin;

use Magento\Catalog\Model\Product\Attribute\Source\Status;

/**
 * Class WishlistPlugin
 * @package Vendor\Customer\Plugin
 */
class WishlistPlugin
{
    /**
     * @var \Magento\Wishlist\Helper\Data
     */
    protected $wishlistHelper;

    /**
     * @param \Magento\Wishlist\Helper\Data $wishlistHelper
     */
    public function __construct(
        \Magento\Wishlist\Helper\Data $wishlistHelper
    ) {
        $this->wishlistHelper = $wishlistHelper;
    }

    /**
     * Plugin function after get section data
     *
     * @param \Magento\Wishlist\CustomerData\Wishlist $subject
     * @param $result
     * @return mixed
     */
    public function afterGetSectionData(\Magento\Wishlist\CustomerData\Wishlist $subject, $result)
    {
        $disabledProductsCount = 0;

        foreach ($this->wishlistHelper->getWishlistItemCollection() as $item) {
            if($item->getProduct()->getStatus() == Status::STATUS_DISABLED) $disabledProductsCount++;
        }

        $counterNumber = $this->wishlistHelper->getItemCount();

        if($disabledProductsCount) {
            $counterNumber -= $disabledProductsCount;
        }

        $result['counter'] = $counterNumber;

        return $result;
    }


}

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

1 Ответ

0 голосов
/ 23 мая 2019

Это зависит от вас, где вы добавите это, вероятно, лучшее место для вызова этого - в нижнем колонтитуле (это приведет к тому, что количество пожеланий для этого клиента будет обновляться на каждой странице).

Нет простогоспособ аннулировать данные из вашего плагина (бэкэнда), так что для того, что вы делаете, так как вы никогда не знаете, когда вы отключаете продукт во внешнем интерфейсе, поэтому мы можем предположить, что обновление данных списка желаний при каждой загрузке страницы - лучший вариант..

Например (добавьте это в нижний колонтитул, измените ваши требования):

require([
   ....
   'Magento_Customer/js/customer-data'
], function (...,customerData) {
   "use strict";
   ...
   var sections = ['wishlist'];
   customerData.invalidate(sections);
   customerData.reload(sections, true);
   ...
});
...