2017-03-22 65 views
0

我正在努力與CMS頁面查看計數器。Prestashop CMS頁面視圖計數器

我添加新的功能,以類/控制器/ 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(工具::的getValue (「id_cms」))}

對於現在的計數器「工作」,但示出在所有的Prestashop CMS頁與ID = 15

網頁中的一個的相同的值增加10

enter image description here

+0

是的。我在MySQL查詢不好:(幫助非常感謝! – PrestaShark

回答

0

我看到你正在向你的函數傳遞一個CMS ID,但是我沒有看到你在任何地方使用它。您還可以通過與id_page和id_cms列進行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; 
} 

page持有任何網頁它在id_object列引用的ID,所以你要匹配的$id_cms你傳遞對p.id_object。通過匹配,sql可以直接從page_viewed表中返回計數。根本不需要加入cms表。