Ver a contagem de produtos não está sendo atualizada

11

Existem 3 tabelas diferentes que armazenam a contagem de visualizações de produtos

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Se eu quiser obter a contagem atual de visualizações de um produto, posso obtê-lo em qualquer uma dessas tabelas. Mas o problema é que, sempre que abro o produto no front-end, nenhuma dessas tabelas mostra nenhum resultado relacionado a esse produto.

É uma questão interna do magento?

Eu pensei que precisava configurar o Magento cron para atualizar essas tabelas instantaneamente quando o usuário abrir o produto, mas também não funcionou para mim.

Muhammad Wasif
fonte
Não obtendo resposta :(
Muhammad Wasif
No começo eu não sabia a minha reputação irá deduzir após o início de recompensas: D
Muhammad Wasif

Respostas:

10

Essas tabelas não seriam atualizadas no tempo de execução

Você precisa executar Atualizar Estatísticas de:

Relatórios -> Estatísticas -> Atualizar estatísticas

Se você deseja executá-lo a partir do cronjob, siga este link: /magento//a/243187/31910

Shoaib Munir
fonte
Isso é realmente satisfatório. Obrigado pelo esclarecimento :)
Muhammad Wasif
7

Vá para Admin -> Reports -> Refresh Statistics, selecione os relatórios que deseja atualizar e pressione o botão Enviar.

Depois de atualizar, volte ao relatório e selecione as datas necessárias para e a partir de então clique no botão Mostrar relatórios.

Você deve ver o relatório conforme necessário.

Se ainda não houver nada, pode ser necessário procurar nas report_viewed_product_*tabelas e verificar se há realmente algum dado lá.

Rk Rathod
fonte
+1 por seu tempo e esforços.
Muhammad Wasif
2

Após a resposta @Shoaib Munir & @Rk Rathod , essas tabelas não atualizar em tempo de execução para que você precisa para executar Atualizar Estatísticas de Reports -> Statistics -> Refresh Statisticscada vezes. mas se você não deseja atualizar o Statistics manualmente todas as vezes, pode definir o cron para que ele atualize o Statistics automaticamente.

Primeiro, você precisa passar o argumento reportTypes para sua classe cron usando o di.xml como abaixo (eu passei todos os argumentos que você pode passar conforme o seu 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>

Então no seu arquivo cron deve ser assim.

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

Espero que ajude!

Chirag Patel
fonte
+1 por seu tempo e esforço. Eu marquei a primeira resposta correta de Shoaib Munir
Muhammad Wasif
1
Obrigado pela sua apreciação :) +1 por você.
Chirag Patel