Цель данной модификации - сделать точный рейтинг материалов, по месяцам,датам и даже времени.
Стандартная функция подсчета кликов ведет только кол-во кликов за все время, но в одном из проектов нам понадобилась статистика просмотров в разрезе месяца.
Что нам понадобится:
1.Создаем таблицу #__k2_hits:
CREATE TABLE `#__k2_hits` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`k2_id` varchar(100) COLLATE utf8_unicode_ci NOT NULL,
`insert_date` datetime COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2.Добавляем функцию, которая сохранит данные просмотра. Редактируем файл:
/public_html/components/com_k2/models/item.php
Дорабатываем функцию hit:
function hit($id)
{$row = JTable::getInstance('K2Item', 'Table');
$row->hit($id);
$db = JFactory::getDBO();
$query = "insert into #__k2_hits(k2_id,insert_date,type) values(".$id.",'".date("Y-m-d H:i:s")."','items');";
$db->setQuery($query);
$db->query();
}
3.Добавляем функцию обнуления рейтинга:
/public_html/administrator/components/com_k2/models/item.php
Обновляем функцию resetHits на :
function resetHits()
{
$mainframe = JFactory::getApplication();
$id = JRequest::getInt('id');
$db = JFactory::getDBO();
$query = "UPDATE #__k2_items SET hits=0 WHERE id={$id}";
$db->setQuery($query);
$db->query();
$query = "delete from #__k2_hits where k2_id={$id};";
$db->setQuery($query);
$db->query();
if ($mainframe->isAdmin())
$url = 'index.php?option=com_k2&view=item&cid='.$id;
else
$url = 'index.php?option=com_k2&view=item&task=edit&cid='.$id.'&tmpl=component';
$mainframe->enqueueMessage(JText::_('K2_SUCCESSFULLY_RESET_ITEM_HITS'));
$mainframe->redirect($url);
}
4. Выводим статистику в административной части
Самый простой способ - вывести построчно SQL запрос на одной из страниц:
$db = JFactory::getDbo();?>
<h1 id="stat_header">Самый популярный товар топ 20 </h1>
<table class="table table-striped" id="table_stat_long">
<tbody>
<tr id="table_header">
<td>Товар</td>
<td>Просмотры</td>
<td>% всего</td>
<td>Продаж</td>
</tr>
<?php
$db->setQuery('select k2h.k2_id,k2i.title,count(k2h.k2_id) as k2hits,count(k2h.k2_id)*100/((select count(*) from Yoo_k2_hits)) as total_proc,(select count(*) from #__k2store_orderitems where product_id=k2h.k2_id) as orders from #__k2_hits k2h,#__k2_items k2i where k2i.id=k2h.k2_id GROUP BY k2h.k2_id order by k2hits desc limit 20');
$res_item = $db->loadObjectList();
foreach ( $res_item as $row ) {
echo '<tr><td id="table_title">'.$row->title.'</td><td>'.$row->k2hits.'</td><td>'.$row->total_proc.'</td><td>'.$row->orders.'</td></tr>';
}?>
</tbody>
</table>