Ver el recuento de productos que no se actualiza

11

Hay 3 tablas diferentes que almacenan el conteo de productos vistos

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Si deseo obtener el recuento actual de un producto, puedo obtenerlo en cualquiera de estas tablas. Pero el problema es que, cada vez que abro el producto en la interfaz, ninguna de estas tablas muestra ningún resultado relacionado con ese producto.

¿Es un problema de magento incorporado?

Pensé que necesitaba configurar Magento cron para actualizar estas tablas instantáneamente cuando el usuario abre el producto, pero tampoco funcionó para mí.

Muhammad Wasif
fuente
No obtengo ninguna respuesta :(
Muhammad Wasif
Al principio no sabía que mi reputación se deduciría después de comenzar la recompensa: D
Muhammad Wasif

Respuestas:

10

Estas tablas no se actualizarán en tiempo de ejecución

Debe ejecutar Actualizar estadísticas desde:

Informes -> Estadísticas -> Actualizar estadísticas

Si desea ejecutarlo desde cronjob, siga este enlace: /magento//a/243187/31910

Shoaib Munir
fuente
Esto realmente satisfactorio. Gracias por la aclaración :)
Muhammad Wasif
7

Vaya a Admin -> Reports -> Refresh Statistics, luego seleccione los informes que desea actualizar, luego presione el botón Enviar.

Una vez actualizado, regrese al informe, seleccione las fechas requeridas para y desde, luego haga clic en el botón Mostrar informes.

Debería ver el informe según sea necesario.

Si todavía no hay nada, es posible que deba buscar en las report_viewed_product_*tablas y ver si de hecho hay datos allí.

Rk Rathod
fuente
+1 por tu tiempo y esfuerzo.
Muhammad Wasif
2

Después de la respuesta @Shoaib Munir y @Rk Rathod , estos cuadros no se actualice en tiempo de ejecución por lo que necesita para funcionar Actualizar estadísticas de Reports -> Statistics -> Refresh Statisticscada momento. pero si no desea actualizar las estadísticas manualmente cada vez, puede configurar cron para eso y actualizar las estadísticas automáticamente.

Primero, debe pasar el argumento reportTypes a su clase cron utilizando di.xml como se muestra a continuación (he pasado todos los argumentos que puede pasar según su 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>

Entonces en su archivo cron debería ser así.

<?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 ayude!

Chirag Patel
fuente
+1 por tu tiempo y esfuerzo. Tengo marca correcta la primera respuesta de Shoaib Munir
Muhammad Wasif
1
Gracias por tu apreciación :) +1 por ti.
Chirag Patel