Просмотр количества товаров не обновляется

11

Есть 3 разных таблицы, в которых хранится количество просмотров товаров

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Если я хочу получить текущее количество просмотров продукта, я могу получить его из любой из этих таблиц. Но проблема в том, что всякий раз, когда я открываю продукт во внешнем интерфейсе, ни в одной из этих таблиц не отображаются результаты, связанные с этим продуктом.

Это встроенная проблема в magento?

Я подумал, что нужно настроить Magento cron для немедленного обновления этих таблиц, когда пользователь открывает продукт, но он также не работал для меня.

Мухаммед Васиф
источник
Не получаю никакого ответа :(
Мухаммед Васиф
Сначала я не знал, что моя репутация будет снижаться после начального вознаграждения: D
Мухаммад Васиф

Ответы:

10

Эти таблицы не будут обновляться во время выполнения

Вам нужно запустить Обновить статистику из:

Отчеты -> Статистика -> Обновить статистику

Если вы хотите запустить его из cronjob, перейдите по этой ссылке: /magento//a/243187/31910

Шоаиб Мунир
источник
Это действительно сытно. Спасибо за разъяснения :)
Мухаммед Васиф
7

Перейдите Admin -> Reports -> Refresh Statistics, затем выберите отчеты, которые вы хотите обновить, и нажмите кнопку «Отправить».

После обновления вернитесь к отчету и выберите нужные даты до и после, затем нажмите кнопку «Показать отчеты».

Вы должны увидеть отчет по мере необходимости.

Если по-прежнему ничего нет, вам может понадобиться покопаться в report_viewed_product_*таблицах и посмотреть, есть ли там какие-либо данные.

Rk Rathod
источник
+1 за ваше время и усилия.
Мухаммед Васиф
2

После ответа @Shoaib Мунир & @rk Rathod , эти таблицы не обновляются во время выполнения , так что вам нужно запустить Обновить статистику от Reports -> Statistics -> Refresh Statisticsкаждого раза. но если вы не хотите каждый раз обновлять статистику вручную, вы можете установить для нее cron, чтобы она автоматически обновляла статистику.

Во-первых, вам нужно передать аргумент reportTypes вашему классу cron, используя di.xml, как показано ниже (я передал все аргументы, которые вы можете передать согласно вашему требованию).

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

Тогда в вашем файле cron должно быть так.

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

Я надеюсь, что это помогает!

Чираг Патель
источник
+1 за ваше время и усилия. Я правильно поставил первый ответ Шоаиба Мунира
Мухаммеда Васифа
1
Спасибо за вашу оценку :) +1 для вас.
Чираг Патель