Wyświetl liczbę produktów nie aktualizuje się

11

Istnieją 3 różne tabele, które przechowują liczbę wyświetleń produktu

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Jeśli chcę uzyskać bieżącą liczbę wyświetleń produktu, mogę uzyskać go z dowolnej z tych tabel. Ale problem polega na tym, że ilekroć otwieram produkt na interfejsie użytkownika, żadna z tych tabel nie pokazuje żadnych wyników związanych z tym produktem.

Czy to problem z wbudowanym Magento?

Pomyślałem, że muszę ustawić Magento cron, aby natychmiast aktualizował te tabele, gdy użytkownik otworzy produkt, ale to również nie działało dla mnie.

Muhammad Wasif
źródło
Brak odpowiedzi :(
Muhammad Wasif
Początkowo nie wiedziałem, że moja reputacja potrąci po rozpoczęciu nagrody: D
Muhammad Wasif

Odpowiedzi:

10

Te tabele nie aktualizują się w czasie wykonywania

Musisz uruchomić Odśwież statystyki z:

Raporty -> Statystyki -> Odśwież statystyki

Jeśli chcesz uruchomić go z cronjob, skorzystaj z tego linku: /magento//a/243187/31910

Shoaib Munir
źródło
To naprawdę satysfakcjonujące. Dzięki za wyjaśnienia :)
Muhammad Wasif
7

Przejdź do Admin -> Reports -> Refresh Statistics, a następnie wybierz raporty, które chcesz odświeżyć, a następnie naciśnij przycisk przesyłania.

Po odświeżeniu wróć do raportu i wybierz wymagane daty do i od, a następnie kliknij przycisk pokaż raporty.

Powinieneś zobaczyć raport zgodnie z wymaganiami.

Jeśli nadal nic nie ma, być może będziesz musiał przekopać się w report_viewed_product_*tabelach i sprawdzić, czy faktycznie są tam jakieś dane.

Rk Rathod
źródło
+1 za Twój czas i wysiłki.
Muhammad Wasif
2

Po odpowiedź @Shoaib Munir & @Rk Rathod , tabele te nie będą aktualizować na starcie, więc trzeba uruchomić Odśwież Statystyki z Reports -> Statistics -> Refresh Statisticskażdych czasach. ale jeśli nie chcesz ręcznie odświeżać statystyk za każdym razem, możesz ustawić cron, aby automatycznie odświeżał statystyki.

Najpierw musisz przekazać argument reportTypes do swojej klasy cron, używając di.xml jak poniżej (przekazałem wszystkie argumenty, które możesz przekazać zgodnie z twoimi wymaganiami).

<type name="Vendor\Module\Cron\CronFile">
        <arguments>
            <argument name="reportTypes" xsi:type="array">
                <item name="sales" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Order</item>
                <item name="tax" xsi:type="string">Magento\Tax\Model\ResourceModel\Report\Tax</item>
                <item name="shipping" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Shipping</item>
                <item name="invoiced" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Invoiced</item>
                <item name="refunded" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Refunded</item>
                <item name="coupons" xsi:type="string">Magento\SalesRule\Model\ResourceModel\Report\Rule</item>
                <item name="bestsellers" xsi:type="string">Magento\Sales\Model\ResourceModel\Report\Bestsellers</item>
                <item name="viewed" xsi:type="string">Magento\Reports\Model\ResourceModel\Report\Product\Viewed</item>
            </argument>
        </arguments>
    </type>

Zatem w twoim pliku cron powinno być tak.

<?php
namespace Vendor\Module\Cron;
use Magento\Reports\Model\ResourceModel\Refresh\Collection;

class CronFile extends Collection
{
    protected $logger;
    protected $reportTypes;

    public function __construct(
        \Magento\Framework\Data\Collection\EntityFactory $entityFactory,
        \Magento\Framework\Stdlib\DateTime\TimezoneInterface $localeDate,
        \Magento\Reports\Model\FlagFactory $reportsFlagFactory,
        \Psr\Log\LoggerInterface $logger,
        array $reportTypes
    ) {
        $this->logger = $logger;
        $this->reportTypes = $reportTypes;
        parent::__construct($entityFactory,$localeDate,$reportsFlagFactory);
    }
    /**
     * @return $this
     */
    public function execute()
    {
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

        try {
            $codes = $this->loadData();

            foreach ($codes->_items as $codek=>$codev) {
                $objectManager->create($this->reportTypes[$codek])->aggregate();
            }
        } catch (\Magento\Framework\Exception\LocalizedException $e) {
            $this->logger->critical($e->getMessage());
        } catch (\Exception $e) {
           $this->logger->critical($e->getMessage());
        }
        return $this;
    }
}

Mam nadzieję, że to pomoże!

Chirag Patel
źródło
+1 za Twój czas i wysiłek. Mam poprawną pierwszą odpowiedź Shoaib Munir
Muhammad Wasif
1
Dziękujemy za uznanie :) +1 dla Ciebie.
Chirag Patel