Xem số lượng sản phẩm không cập nhật


11

Có 3 bảng khác nhau lưu trữ số lượt xem sản phẩm

  • report_viewed_product_aggregated_daily
  • report_viewed_product_aggregated_monthly
  • report_viewed_product_aggregated_yearly

Nếu tôi muốn có được số lượng xem hiện tại của một sản phẩm, tôi có thể lấy nó từ bất kỳ một trong các bảng này. Nhưng vấn đề là, bất cứ khi nào tôi mở sản phẩm trên frontend, không có bảng nào trong số các bảng này hiển thị bất kỳ kết quả nào liên quan đến sản phẩm đó.

Đây có phải là một vấn đề dựng sẵn magento?

Tôi nghĩ rằng tôi cần phải thiết lập cron Magento để cập nhật các bảng này ngay lập tức khi người dùng mở sản phẩm, nhưng nó cũng không hoạt động với tôi.


Không nhận được bất kỳ phản hồi nào :(
Muhammad Wasif

Lúc đầu, tôi không biết danh tiếng của mình sẽ bị trừ sau khi bắt đầu tiền thưởng: D
Muhammad Wasif

Câu trả lời:


10

Các bảng này sẽ không cập nhật trong thời gian chạy

Bạn cần chạy Làm mới Thống kê từ:

Báo cáo -> Thống kê -> Làm mới Thống kê

Nếu bạn muốn chạy nó từ cronjob, hãy theo liên kết sau: /magento//a/243187/31910


Điều này thực sự thỏa mãn. Cảm ơn đã làm rõ :)
Muhammad Wasif

7

Đi đến Admin -> Reports -> Refresh Statistics, sau đó chọn các báo cáo bạn muốn làm mới, sau đó nhấn nút gửi.

Sau khi làm mới, hãy quay lại báo cáo và chọn yêu cầu đến và từ ngày, sau đó nhấp vào nút hiển thị báo cáo.

Bạn sẽ thấy báo cáo theo yêu cầu.

Nếu vẫn không có gì, bạn có thể cần phải tìm kiếm xung quanh các report_viewed_product_*bảng và xem trên thực tế có dữ liệu nào ở đó không.


+1 cho thời gian và nỗ lực của bạn.
Muhammad Wasif

2

Sau câu trả lời @Shoaib Munir & @Rk Rathod , các bảng này sẽ không cập nhật trong thời gian chạy nên bạn cần chạy Refresh kê từ Reports -> Statistics -> Refresh Statisticsmỗi lần. nhưng nếu bạn không muốn làm mới Thống kê theo cách thủ công mỗi lần để bạn có thể đặt cron cho điều đó để nó sẽ tự động làm mới Thống kê.

Trước tiên, bạn cần vượt qua báo cáoTypes đối số cho lớp cron của mình bằng cách sử dụng di.xml như bên dưới (Tôi đã chuyển tất cả các đối số bạn có thể vượt qua theo yêu cầu của bạn).

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

Sau đó, trong tập tin cron của bạn nên như thế này.

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

Tôi hy vọng nó sẽ giúp!


+1 cho thời gian và nỗ lực của bạn. Tôi đã đánh dấu đúng câu trả lời đầu tiên của Shoaib Munir
Muhammad Wasif

1
Cảm ơn sự đánh giá cao của bạn :) +1 cho bạn.
Chirag Patel
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.