Здравствуйте.
Если вам надо собирать статистику по детальному просмотру товаров VirtueMart 2.0(делал в VM 2.0.18a), то для этого надо:
1. Создать таблицу в БД, например так:
CREATE TABLE ВАШПРЕФИКС_prod_viewing_stats(
product_id int(11) PRIMARY KEY,
hits int(11)
)
2. Добавить в представлении карточка товара код(сайт/templates/ваш_шаблон/html/com_virtuemart/productdetails/default.php), не считающий ботов:
function is_bot(){
$botlist = array("Yahoo Slurp", "WebAlta", "Yandex", "StackRambler",
"Teoma", "alexa", "froogle", "Gigabot", "inktomi",
"looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory",
"Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot",
"crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp",
"msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz",
"Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot",
"Mediapartners-Google", "Sogou web spider", "WebAlta Crawler","TweetmemeBot",
"Butterfly","Twitturls","Me.dium","Twiceler");
foreach($botlist as $bot){
if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)
return true; // Is a bot
}
return false; // Not a bot
}
if (!is_bot()) {
$db =& JFactory::getDBO();
$query = 'SELECT IFNULL(hits, 0) as hits FROM #__prod_viewing_stats WHERE product_id="'.$this->product->virtuemart_product_id.'"';
$db->setQuery($query);
$stats = $db->loadObject();
if (!is_null($stats->hits)){
$stats->hits = $stats->hits+1;
$query = 'DELETE FROM #__prod_viewing_stats WHERE product_id = "'.$this->product->virtuemart_product_id.'"';
$db->setQuery($query);
$db->query();
}
else {
$stats->hits = 1;
}
//echo "Просмотрено: $stats->hits<br/>";
$query = "INSERT INTO #__prod_viewing_stats (`product_id`, `hits`) VALUES ('".$this->product->virtuemart_product_id."', '".$stats->hits."')";
$db->setQuery($query);
$db->query();
unset($db);
}
Я добавлял после кода
if (empty($this->product)) {
echo JText::_('COM_VIRTUEMART_PRODUCT_NOT_FOUND');
echo '<br /><br /> ' . $this->continue_link_html;
return;
}
Направления по совершенствованию(если не прав поправьте)
1. заменить delete + insert на update с созданием триггера на таблицу products, инициализирующий строку товара в таблице учета посещений prod_viewing_stats
2. уменьшить размер поля hits до int(?)
3. может проиндексировать таблицу prod_viewing_stats как-то получше(не силен в индексации)?