Visualizza il conteggio dei prodotti non aggiornato


11

Esistono 3 diverse tabelle che memorizzano il conteggio dei prodotti visualizzati

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Se desidero ottenere il conteggio visualizzato corrente di un prodotto, posso ottenerlo da una di queste tabelle. Ma il problema è che ogni volta che apro il prodotto sul frontend, nessuna di queste tabelle mostra alcun risultato correlato a quel prodotto.

È un problema con Magento?

Ho pensato di dover impostare Magento cron per aggiornare queste tabelle all'istante quando l'utente apre il prodotto, ma non ha funzionato anche per me.


Non ricevo alcuna risposta :(
Muhammad Wasif,

All'inizio non sapevo che la mia reputazione si sarebbe detratta dopo l'inizio della generosità: D
Muhammad Wasif,

Risposte:


10

Queste tabelle non si aggiornano in fase di esecuzione

Devi eseguire Aggiorna statistiche da:

Rapporti -> Statistiche -> Aggiorna statistiche

Se vuoi eseguirlo da cronjob segui questo link: /magento//a/243187/31910


Questo è davvero soddisfacente. Grazie per il chiarimento :)
Muhammad Wasif,

7

Vai a Admin -> Reports -> Refresh Statistics, quindi seleziona i rapporti che desideri aggiornare, quindi premi il pulsante di invio.

Una volta aggiornato, torna al rapporto e seleziona le date richieste da e verso, quindi fai clic sul pulsante Mostra rapporti.

Dovresti vedere il rapporto come richiesto.

Se non c'è ancora nulla, potrebbe essere necessario scavare nelle report_viewed_product_*tabelle e vedere se ci sono effettivamente dei dati lì.


+1 per il tuo tempo e i tuoi sforzi.
Muhammad Wasif,

2

Dopo la risposta @Shoaib Munir & @Rk Rathod , queste tabelle non sarebbero aggiornare il runtime, quindi è necessario eseguire Refresh statistiche da Reports -> Statistics -> Refresh Statisticsogni volte. ma se non si desidera aggiornare le statistiche manualmente ogni volta, quindi è possibile impostare cron per quello in modo che aggiornerà automaticamente le statistiche.

Innanzitutto, devi passare l' argomento reportTypes alla tua classe cron usando di.xml come di seguito (ho passato tutti gli argomenti che potresti passare secondo il tuo requisito).

<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>

Quindi nel tuo file cron dovrebbe essere così.

<?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;
    }
}

Spero possa essere d'aiuto!


+1 per il tuo tempo e fatica. Ho contrassegnato come corretta la prima risposta di Shoaib Munir
Muhammad Wasif il

1
Grazie per il tuo apprezzamento :) +1 per te.
Chirag Patel,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.