Php Prestashop CMS页面查看计数器

Php Prestashop CMS页面查看计数器,php,mysql,prestashop,prestashop-1.6,Php,Mysql,Prestashop,Prestashop 1.6,我正在努力与CMS页面浏览计数器 我正在向class/controller/FrontController.php添加新函数 如下 public static function getCMSViewed($id_cms){ $viewcms = Db::getInstance()->getRow('SELECT SUM(pv.counter) AS total FROM '._DB_PREFIX_.'page_viewed pv LEFT JOIN

我正在努力与CMS页面浏览计数器

我正在向class/controller/FrontController.php添加新函数 如下

public static function getCMSViewed($id_cms){
    $viewcms = Db::getInstance()->getRow('SELECT SUM(pv.counter) AS total 
        FROM '._DB_PREFIX_.'page_viewed pv
        LEFT JOIN '._DB_PREFIX_.'cms c ON pv.id_page = c.id_cms 
        LEFT JOIN '._DB_PREFIX_.'page p ON pv.id_page = p.id_page
        LEFT JOIN '._DB_PREFIX_.'page_type pt ON p.id_page_type = pt.id_page_type
        WHERE pt.name = \'cms\'');
        return isset($viewcms['total']) ? $viewcms['total'] : 0;
}
在cms.tpl文件中,我添加了{FrontController::getCMSViewed(Tools::getValue('id_cms'))}

目前,计数器正在“工作”,但在所有Prestashop CMS页面上显示ID=15的其中一个页面的相同增加值


我看到您正在将CMS id传递到函数中,但我没有看到您在任何地方使用它。您还可以将cms上的连接与id\u页面和id\u cms列匹配。这意味着您的查询不会获取您期望的计数。你想要更接近这个的东西

public static function getCMSViewed($id_cms){
$viewcms = Db::getInstance()->getRow('SELECT pv.counter AS total 
    FROM '._DB_PREFIX_.'page_viewed pv
    LEFT JOIN '._DB_PREFIX_.'page p ON pv.id_page = p.id_page
    LEFT JOIN '._DB_PREFIX_.'page_type pt ON p.id_page_type = pt.id_page_type
    WHERE pt.name = \'cms\' AND p.`id_object` = '.intval($id_cms) );
    return isset($viewcms['total']) ? $viewcms['total'] : 0;
}

页面
包含它在
id\u对象
列中引用的任何页面的id,因此您希望匹配您针对
p.id\u对象
传入的
$id\u cms
。通过匹配,sql可以直接从查看的
页面返回计数。根本不需要加入
cms
表。

是。我不擅长MySQL查询:(非常感谢您的帮助!