Lihat jumlah produk tidak memperbarui

11

Ada 3 tabel berbeda yang menyimpan jumlah produk dilihat

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Jika saya ingin mendapatkan hitungan produk yang dilihat saat ini, saya bisa mendapatkannya dari salah satu tabel ini. Tetapi masalahnya adalah, setiap kali saya membuka produk di frontend, tidak ada tabel yang menunjukkan hasil apa pun yang terkait dengan produk itu.

Apakah ini masalah magento bawaan?

Saya pikir saya perlu mengatur cron Magento untuk memperbarui tabel ini secara instan ketika pengguna membuka produk, tetapi itu juga tidak berhasil untuk saya.

Muhammad Wasif
sumber
Tidak mendapat respons :(
Muhammad Wasif
Pada awalnya saya tidak tahu reputasi saya akan berkurang setelah memulai karunia: D
Muhammad Wasif

Jawaban:

10

Tabel ini tidak akan diperbarui saat runtime

Anda perlu menjalankan Refresh Statistics dari:

Laporan -> Statistik -> Refresh Statistik

Jika Anda ingin menjalankannya dari cronjob, ikuti tautan ini: /magento//a/243187/31910

Shoaib Munir
sumber
Ini sangat memuaskan. Terima kasih atas klarifikasi :)
Muhammad Wasif
7

Pergi ke Admin -> Reports -> Refresh Statistics, lalu pilih laporan yang ingin Anda segarkan, lalu tekan tombol kirim.

Setelah menyegarkan, kembali ke laporan, dan pilih tanggal yang diperlukan untuk dan dari, lalu klik pada tombol tampilkan laporan.

Anda harus melihat laporan sebagaimana diperlukan.

Jika tidak ada apa-apa, Anda mungkin perlu menggali di dalam report_viewed_product_*tabel dan melihat apakah sebenarnya ada data di sana.

Rk Rathod
sumber
+1 untuk waktu dan upaya Anda.
Muhammad Wasif
2

Setelah jawaban @Shoaib Munir & @Rk Rathod , Tabel ini tidak akan diperbarui saat runtime sehingga Anda perlu menjalankan Refresh Statistics dari Reports -> Statistics -> Refresh Statisticssetiap waktu. tetapi jika Anda tidak ingin menyegarkan Statistik secara manual setiap kali sehingga Anda dapat mengatur cron untuk itu sehingga akan menyegarkan Statistik secara otomatis.

Pertama, Anda harus meneruskan argumen ReportTypes ke kelas cron Anda dengan menggunakan di.xml seperti di bawah ini (saya telah melewati semua argumen yang dapat Anda berikan sesuai kebutuhan Anda).

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

Maka dalam file cron Anda harus seperti ini.

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

Saya harap ini membantu!

Chirag Patel
sumber
+1 untuk waktu dan usaha Anda. Saya telah menandai jawaban pertama yang benar dari Shoaib Munir
Muhammad Wasif
1
Terima kasih atas penghargaan Anda :) +1 untuk Anda.
Chirag Patel