Форум русской поддержки Joomla!® CMS
09.12.2016, 02:08:26 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

Сбор статистики по детальному просмотру товаров

 (Прочитано 931 раз)
0 Пользователей и 1 Гость смотрят эту тему.
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1161


желаю вам счастья


« : 16.08.2013, 16:07:10 »

Здравствуйте.

Если вам надо собирать статистику по детальному просмотру товаров 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 как-то получше(не силен в индексации)?
Записан
ChaosHead
Профи
********

Репутация: +382/-10
Offline Offline

Пол: Мужской
Сообщений: 4396



« Ответ #1 : 09.12.2013, 11:35:35 »

Спасибо добрый человек. Скажи, а с кешированием я так понимаю уже не будет работать?
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1161


желаю вам счастья


« Ответ #2 : 09.12.2013, 13:30:43 »

Спасибо добрый человек. Скажи, а с кешированием я так понимаю уже не будет работать?
Здравствуйте, я всего лишь скопировал и адаптировал вариант, выложенный здесь на форуме для VM1. Не силен в кэшировании. Если кэширование не предполагает запроса к серверу(не будет запускаться скрипт построения карточки товара), то учёта не будет правильного. Насколько знаю есть возможности отключить кэширование в браузере, правда по советам Фёдора у меня не получилось этого настроить, может чего недопонял Azn Ищущий до обрящет, вопрошающему отворят
« Последнее редактирование: 09.12.2013, 13:34:26 от borro » Записан
andrew_puma
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #3 : 16.09.2015, 18:50:42 »

Помогите вставить код на сайт, а то вставляю а он не выводится!
в базе нет проблем.
а вот код который вставляю выходит весь на сайте!
Записан
gartes
Живу я здесь
******

Репутация: +63/-3
Offline Offline

Сообщений: 827


Е = mс²


« Ответ #4 : 17.09.2015, 04:34:40 »

Помогите вставить код на сайт, а то вставляю а он не выводится!
в базе нет проблем.
а вот код который вставляю выходит весь на сайте!

Вам нужно код вставлять в <?php  ?> такие скобочки ))))) тогда будет работать ...
Записан
andrew_puma
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #5 : 17.09.2015, 11:37:37 »

Я так и сделал, но не отображается!
Записан
andrew_puma
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #6 : 17.09.2015, 11:42:02 »

И как сделать, чтобы счетчик считал, а даная информация выводилась в админке?
Записан
ChaosHead
Профи
********

Репутация: +382/-10
Offline Offline

Пол: Мужской
Сообщений: 4396



« Ответ #7 : 17.09.2015, 18:24:37 »

Я так и сделал, но не отображается!
Лучше обратитесь к специалисту, он разберется на месте.
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1161


желаю вам счастья


« Ответ #8 : 17.09.2015, 18:26:53 »

Лучше обратитесь к специалисту, он разберется на месте.
Добрый вечер. Позвольте узнать, как вы решили вопрос подсчёта при кэшировании?
Записан
gartes
Живу я здесь
******

Репутация: +63/-3
Offline Offline

Сообщений: 827


Е = mс²


« Ответ #9 : 17.09.2015, 20:38:54 »

Не... Что то не то...
1 просмотрев код .. Дак там по моему вывода нет.. так как
Код:
//echo "Просмотрено: $stats->hits<br/>";
Эта строка коммент.. и вроде единственное что что либо выводит.

2
Цитировать
borro
А зачем создавать таблицу это поле есть в уже в таблице продуктов.
Код:
$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();
и если мы в носим именно в таблицу продуктов то  это что с верху не нужно

разве я не прав ?
Записан
ChaosHead
Профи
********

Репутация: +382/-10
Offline Offline

Пол: Мужской
Сообщений: 4396



« Ответ #10 : 18.09.2015, 00:01:19 »

Добрый вечер. Позвольте узнать, как вы решили вопрос подсчёта при кэшировании?
Я давно отказался от VirtueMart, но теоретически можно скриптом записывать. Можно у Kunena подсмотреть, он это обходит, да и в последних версиях Joomla кол-во просмотров учитывается при включенном кэшировании.
Записан
Jukov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 99



« Ответ #11 : 18.09.2015, 09:07:50 »

Доброго дня!
Цитировать
borro
Спасибо за решение, все работает отлично! + в репутацию!

Сейчас хочу отобразить количество просмотров товара в самой категории, пока без результата, если есть ответ подскажите!?
« Последнее редактирование: 18.09.2015, 09:36:45 от Jukov » Записан
Jukov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 99



« Ответ #12 : 18.09.2015, 09:20:26 »

Я так и сделал, но не отображается!
Код вставляем:
<?php  
вот сюда
?>
И убираем комментирование, палочки // т.е. должно получится так:
echo "Просмотрено: $stats->hits<br/>";
Записан
andrew_puma
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 21


« Ответ #13 : 18.09.2015, 09:36:31 »

Отлично, заработало.
Теперь осталось вставить в таблицу товаров в админке, сегодня буду пилить.
Записан
Jukov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 99



« Ответ #14 : 18.09.2015, 09:38:47 »

Отлично, заработало.
Теперь осталось вставить в таблицу товаров в админке, сегодня буду пилить.
Найдешь решение отпишись, может тоже сделаю. Сейчас хочу вывести количество просмотров товара в категорию, пока без результата.
Записан
Jukov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 99



« Ответ #15 : 18.09.2015, 12:32:48 »

Решение для того что бы количество просмотров отображалось в категории товаров:
1) Открываем файл templates\ВАШ ШАБЛОН\html\com_virtuemart\category\default.php, если нету то файл \components\com_virtuemart\views\category\tmpl\default.php
2) Выбираем место где хотим что бы отображалось
3) Вставляем код вывода:
Код:
<div>
<?php
$db =& JFactory::getDBO();
$query = 'SELECT IFNULL(hits, 0) as hits FROM #__prod_viewing_stats WHERE product_id="'.$product->virtuemart_product_id.'"';
$db->setQuery($query);
$stats = $db->loadObject();
echo $stats ? ('Просмотров '. $stats->hits . ''): 'Просмотров нет';
unset($db);
  ?>
</div>
4) Сохраняем и проверяем.
Записан
Jukov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 99



« Ответ #16 : 25.09.2015, 12:20:23 »

Всем привет!
И у меня теперь задача:
Сделать Сортировку по количеству просмотров, ну или По популярности!?
Кто ни будь сталкивался с похожим вопросом?
Записан
borro
Живу я здесь
******

Репутация: +21/-0
Offline Offline

Пол: Мужской
Сообщений: 1161


желаю вам счастья


« Ответ #17 : 25.09.2015, 14:08:47 »

Всем привет!
И у меня теперь задача:
Сделать Сортировку по количеству просмотров, ну или По популярности!?
Кто ни будь сталкивался с похожим вопросом?
можете построить sql-запрос и вывести в эксель, если не надо сразу в админке так сортировать Azn
Записан
Jukov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 99



« Ответ #18 : 25.09.2015, 14:12:33 »

можете построить sql-запрос и вывести в эксель, если не надо сразу в админке так сортировать Azn
Нет, нет, мне нужно это сделать на сайте, в категории магазина (на странице с товарами). В самой сортировке. Сортировать по: ....
Записан
Jukov
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 99



« Ответ #19 : 29.09.2015, 13:48:16 »

И все же, вопрос остается открытым:
Сделать сортировку по количеству просмотров товара, в категории товаров?
« Последнее редактирование: 06.10.2015, 07:33:11 от Jukov » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet