Afficher le nombre de produits non mis à jour

11

Il y a 3 tableaux différents qui stockent le nombre de produits vus

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Si je veux obtenir le nombre de vues actuelles d'un produit, je peux l'obtenir à partir de l'une de ces tables. Mais le problème est, chaque fois que j'ouvre le produit sur le frontend, aucun de ces tableaux ne montre aucun résultat lié à ce produit.

Est-ce un problème intégré à Magento?

Je pensais que je devais configurer Magento cron pour mettre à jour ces tableaux instantanément lorsque l'utilisateur ouvre le produit, mais cela n'a pas fonctionné pour moi.

Muhammad Wasif
la source
Pas de réponse :(
Muhammad Wasif
Au début, je ne savais pas que ma réputation serait déduite après le début de la prime: D
Muhammad Wasif

Réponses:

10

Ces tables ne seraient pas mises à jour lors de l'exécution

Vous devez exécuter Actualiser les statistiques à partir de:

Rapports -> Statistiques -> Actualiser les statistiques

Si vous souhaitez l'exécuter à partir de cronjob, suivez ce lien: /magento//a/243187/31910

Shoaib Munir
la source
C'est vraiment satisfaisant. Merci pour la clarification :)
Muhammad Wasif
7

Accédez à Admin -> Reports -> Refresh Statistics, puis sélectionnez les rapports que vous souhaitez actualiser, puis appuyez sur le bouton Envoyer.

Une fois actualisé, revenez au rapport, sélectionnez les dates de début et de fin requises, puis cliquez sur le bouton Afficher les rapports.

Vous devriez voir le rapport comme requis.

S'il n'y a toujours rien, vous devrez peut-être fouiller dans les report_viewed_product_*tableaux et voir s'il y a effectivement des données.

Rk Rathod
la source
+1 pour votre temps et vos efforts.
Muhammad Wasif le
2

Après la réponse @Shoaib Munir & @Rk Rathod , ces tableaux ne sont pas mis à jour à l'exécution, vous devez donc exécuter Actualiser les statistiques à Reports -> Statistics -> Refresh Statisticschaque fois. mais si vous ne souhaitez pas actualiser les statistiques manuellement à chaque fois, vous pouvez définir cron pour cela afin qu'il actualise automatiquement les statistiques.

Tout d'abord, vous devez passer l' argument reportTypes à votre classe cron en utilisant di.xml comme ci-dessous (j'ai passé tous les arguments que vous pouvez passer selon vos besoins).

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

Ensuite, dans votre fichier cron devrait être comme ça.

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

J'espère que ça aide!

Chirag Patel
la source
+1 pour votre temps et vos efforts. J'ai corrigé la première réponse de Shoaib Munir
Muhammad Wasif
1
Merci pour votre appréciation :) +1 pour vous.
Chirag Patel