0 Пользователей и 1 Гость просматривают эту тему.
  • 38 Ответов
  • 9743 Просмотров
*

grishin

  • Захожу иногда
  • 145
  • 0 / 0
Необходимо в карточке товара вывести количество просмотров пользователями данного товара.
Существует ли такое дополнение.
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Такой статистики VM не ведёт.
Но во флайпедж врезку сделать не сложно.
Создать таблицу в БД из двух колонок - id товара и колличество хитов.
При отображении флайпейджа вытягивать количество, выводить, добавлять и вставлять назад.

Скажем таблица
product_id  | hits

Код
// берём объект БД, чтобы далее с ним работать
$db =& JFactory::getDBO();
// выбираем запись нашего товара
$query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$product_id.'"';
// передаём в объёкт запрос
$db->setQuery($query);
// загружаем результаты запроса
$stats = $db->loadObject();

// выводим текст
echo "Количество хитов: ".$stats->hits;
// увеличиваем значение
$stats->hits = $stats->hits+1;
// запрос - удаляем старую запись
$query = 'DELETE FROM #__vm_mycounyter  WHERE product_id = "'.$product_id.'"';
// передаём в объёкт запрос
$db->setQuery($query);
// выполняем запрос на удаление
$db->query();
// создаём новую такую же, но больше
$query = "INSERT INTO #__vm_mycounyter (`product_id`, `hits`) VALUES ('".$product_id."', '".$stats->hits."')";
// передаём в объёкт запрос
$db->setQuery($query);
// выолняем запрос
$db->query();
// освобождаем память
unset($db);

Писал тут, так что могут быть ошибки. Поиграйся, чтобы исправить.
При включенном системном плагине кеширования может не учитываться, надо проверять. Тогда это надо в другом месте ставить, с использованием user_class.

При удалении товара таблица не будет уменьшаться, это тоже минус. Но плюс, что в ядро магазина лезть не надо.
« Последнее редактирование: 20.05.2011, 20:11:54 от Gruz »
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

grishin

  • Захожу иногда
  • 145
  • 0 / 0
Спасибо ОГРОМНОЕ за помощь.
А можно описать по шагам, модификацию?
1-Какой запрос SQL выполнить на создание таблиц? или с какими параметрами они должны быть?
2-Куда вставлять этот код
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
В phpMyAdmin несложно руками добавить, не надо для этого запросы писать.

Вот так создастся таблица

Код
CREATE TABLE IF NOT EXISTS `jos_vm_mycounyter` (
  `product_id` int(11) NOT NULL,
  `hits` int(11) NOT NULL,
  PRIMARY KEY (`product_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

« Последнее редактирование: 20.05.2011, 20:12:12 от Gruz »
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

grishin

  • Захожу иногда
  • 145
  • 0 / 0
А код в шаблон вывода товара в таком виде вставить?
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Не имеет значения.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

grishin

  • Захожу иногда
  • 145
  • 0 / 0
БД добавил
Вставил в flypage.tpl
Код
<?php echo 
 // берём объект БД, чтобы далее с ним работать
$db =& JFactory::getDBO();
// выбираем запись нашего товара
$query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$product_id.'"';
// передаём в объёкт запрос
$db->setQuery($query);
// загружаем результаты запроса
$stats = $db->loadObject();

// выводим текст
echo "Количество хитов: ".$stats->hits;
// увеличиваем значение
$stats->hits = $stats->hits+1;
// запрос - удаляем старую запись
$query = 'DELETE FROM #__vm_mycounyter  WHERE product_id = "'.$product_id.'"';
// передаём в объёкт запрос
$db->setQuery($query);
// выполняем запрос на удаление
$db->query();
// создаём новую такую же, но больше
$query = "INSERT INTO #__vm_mycounyter (`product_id`, `hits`) VALUES ('".$product_id."', '".$stats->hits."')";
// передаём в объёкт запрос
$db->setQuery($query);
// выолняем запрос
$db->query();
// освобождаем память
unset($db);?>

Полностью слетело форматирование и выдало ошибку
Catchable fatal error: Object of class JDatabaseMySQL could not be converted to string in Z:\home\site\www\components\com_virtuemart\themes\default\templates\product_details\flypage.tpl.php on line 63
Вот эта строчка $db =& JFactory::getDBO();
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Знаешь сказку про кашу из топора?

У тебя в коде в первой строчке лишнее echo
Код
<?php echo 
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

grishin

  • Захожу иногда
  • 145
  • 0 / 0
Все получилось)) спасибо огромное, количество хитов(просмотров выводит)
Можно ещё спросить?)
А как в разделе вывести десятку самых просматриваемых товаров этого раздела или всего магазина? под надписью "Недавно просмотренные товары"
1 - Товар1 - 9566 просмотров
2 - Товар4 - 8654 просмотров
3 - Товар5 - 3211 просмотров
.....
Это сложно реализовать?
« Последнее редактирование: 21.05.2011, 00:24:13 от grishin »
*

grishin

  • Захожу иногда
  • 145
  • 0 / 0
А если в таблице от 1000товаров это сильно нагрузит БД, сервер?
*

grishin

  • Захожу иногда
  • 145
  • 0 / 0
И ещё возник вопрос, а как избежать накруток и что бы за один сеанс (сессию) только один просмотр засчитывался
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Да, видимо про кашу из топора ты сказку знаешь отлично.

Далее уже не каша, а сервированный стол требуется с блюдами из кухонь разных народов.

Всё это можно реализовать, но уже не так просто. Я сходу не знаю. Копай сам по поводу сессии.
http://docs.joomla.org/JSession/1.5
В сессию добавлять значение, что уже был просмотр. И потом проверять, есть ли такое значение в сессии.

По поводу модуля, то, скорее всего, надо свой написать модуль. Вобщем-то не сложно, но и не 5 минут.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Нужно тоже самое что ТС, но в админке. Пробовал нифига не получилось. Подскажите правильный код в адмику.
Надо в файл administrator\components\com_virtuemart\html\product.product_list.php
прописать вывод, а в файл карточки товара на сайте код сбора статистики, так?
Можно подробней?
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Отложил в закладки. По свободе, может, гляну.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Для вывода только цифры нужно вот так прописать, да?
Код
// берём объект БД, чтобы далее с ним работать
$db =& JFactory::getDBO();
// выбираем запись нашего товара
$query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$product_id.'"';
// передаём в объёкт запрос
$db->setQuery($query);
// загружаем результаты запроса
$stats = $db->loadObject();
// выводим текст
echo "Количество хитов: ".$stats->hits;
// освобождаем память
unset($db);

Я пытаюсь это вывести в админке, файлы administrator\components\com_virtuemart\html\product.product_list.php
Не получается. Не знаю, как правильно прописать?
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Для вывода только цифры нужно вот так прописать, да?
Код
// берём объект БД, чтобы далее с ним работать
$db =& JFactory::getDBO();
// выбираем запись нашего товара
$query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$product_id.'"';
// передаём в объёкт запрос
$db->setQuery($query);
// загружаем результаты запроса
$stats = $db->loadObject();
// выводим текст
echo "Количество хитов: ".$stats->hits;
// освобождаем память
unset($db);

Я пытаюсь это вывести в админке, файлы administrator\components\com_virtuemart\html\product.product_list.php
Не получается. Не знаю, как правильно прописать?


А слова "Количество хитов" выводятся?
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
А слова "Количество хитов" выводятся?
Неа. Выдает ошибку
Код
Fatal error: Call to undefined method JDatabaseMySQL::f() in administrator\components\com_virtuemart\html\product.product_list.php on line 342
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Код
// берём объект БД, чтобы далее с ним работать
$db1 =& JFactory::getDBO();
// выбираем запись нашего товара
$query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$product_id.'"';
// передаём в объёкт запрос
$db1->setQuery($query);
// загружаем результаты запроса
$stats = $db1->loadObject();
// выводим текст
echo "Количество хитов: ".$stats->hits;
// освобождаем память
unset($db1);

Так попробуй.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Так попробуй.
Теперь без ошибок выводит. Но выводит число просмотров товара с product_id 0
В таблицы vm_mycounyter от куда-то появился такой продукт сразу после ее создания.
Надо чтобы выводилось число просмотров каждого продукта.
product_id видимо неправильно получает. Или не там прописан код.
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
только не удивляйтесь цифрам - боты тоже будут считаться
Да. Но это можно исправить. Это потом.
Сейчас надо сделать так, чтобы все работало!
Как прописать product_id чтобы правильно выводилось - для каждого товара свое число просмотров?
« Последнее редактирование: 27.01.2012, 18:16:51 от baloon »
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Не получает id товара видимо.
Вот эта строка
$query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$product_id.'"';
Вот как получает id ниже по коду в файле administrator\components\com_virtuemart\html\product.product_list.php
$listObj->addCell( $db->f('product_id') );

Можно ли привести первую строку кода в соответствие со второй?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Вот так работает
$query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$db->f('product_id').'"';
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
А можно код вывода количества просмотров сделать проще, меньше?
Сейчас у меня такой код работает.
      $db1 =& JFactory::getDBO();
      $query = 'SELECT * from #__vm_mycounyter WHERE product_id="'.$db->f('product_id').'"';
      $db1->setQuery($query);
      $stats = $db1->loadObject();
      $tmp_cell .= 'Просмотров:' .$stats->hits;
      unset($db1);
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
А можно код вывода количества просмотров сделать проще, меньше?

Нет. Вынеси код в функцию и её вызывай, будет нагляднее, возможно. Но строк кода от этого минимум на 3 прибавится в файле.

Код
		$tmp_cell .= 'Просмотров:' .$stats->hits;

Это вряд ли нужно.
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Нет. Вынеси код в функцию и её вызывай, будет нагляднее, возможно. Но строк кода от этого минимум на 3 прибавится в файле.
Тогда не надо. Спасибо за код! :)  Я php не знаю, долго мучился бы.
Это вряд ли нужно.
Иначе число выводиться где-то не там где надо. Там структура файла такая, все через $listObj и $tmp_cell выводится.

А против ботов не дописывали код?

*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
Нет.
http://www.google.com.ua/search?q=php+check+if+bot&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:uk-UA:official&client=firefox-a

Найти функцию проверки, и на странице товара запись в БД загнать в условие - если не бот.

По-моему, первый линк самое оно: http://neo22s.com/function-to-check-if-visitor-is-a-bot/

С рекомендацие в коментах считать ботом, если $_SERVER['HTTP_USER_AGENT'] пусто.

Кроме того реализовать, то, что описано здесь: http://joomlaforum.ru/index.php/topic,165454.msg893338.html#msg893338

Да-да, ты не знаешь PHP. На таких задачах легче всего и научиться.
« Последнее редактирование: 27.01.2012, 19:51:24 от Gruz »
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Много там ботов перечислено, а яндекса вроде нету.
Вот такой нашел, здесь (http://wp-kama.ru/id_55/schitaem-kolichestvo-posescheniy-stranits-na-wordpress.html)
Вот антибот от туда
Код
        if(){  
            $useragent = $_SERVER['HTTP_USER_AGENT']; 
            $notbot = "Mozilla|Opera"; //Chrome|Safari|Firefox|Netscape - все равны Mozilla 
            $bot = "Bot/|robot|Slurp/|yahoo"; //Яндекс иногда как Mozilla представляется 
            if ( !preg_match("/$notbot/i", $useragent) || preg_match("!$bot!i", $useragent) ) 
        } 
Нормальный?
Только я не знаю как его прикрутить. Если бы можно было сразу проверить...

А сессии пока думаю не надо. Да и... покупатель посмотрел товар, потом другие, потом опять вернулся к этому товару, а его не засчитает, но ведь раз вернулся, значит понравился, значит надо еще +1. Счетчик ведь надо для определения какие товары больше смотрят.

Кстати в Joomla есть ведь счетчик, показывает хиты просмотров статей. Наверное достаточно было бы его прикрутить к товарам. Я попробовал быстренько копнуть, но нифига не понял и оставил.
*

Gruz

  • Завсегдатай
  • 1275
  • 167 / 3
  • gruz@jabber.org | gruz.org.ua
В эту функцию не сложно добавить яндекс: http://neo22s.com/function-to-check-if-visitor-is-a-bot/

Как узнать Яндекс?
http://www.google.com/search?q=php+%D1%83%D0%B7%D0%BD%D0%B0%D1%82%D1%8C+yandex&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:uk-UA:official&client=firefox-a

http://zalex.info/script/post1187914199-6.html


В коде ставляешь ту функцию, из первого линка. Но смотри, чтобы у тебя функция не был в середине другой функции. Можешь её сделать методом класса. Это основы синтаксиса PHP, не сложно понять.

Тогда  в коде, если функция глобальна, проверяшь
Код
if (!is_bot()) {
  //тут код, который заганяет в БД +1
}

Если ты функцию is_bot сделал методом класса, то
Код
if (!$this->is_bot()) {
  //тут код, который заганяет в БД +1
}
Життя має дві форми - горіння і гниття!
-
Со мной на "ты" - Вам лень развёрнуто формулировать вопрос? Нам лень отвечать. Правильный вопрос: - Версии J! и проблемного расширения? - Что хотел? - Что пробовал? - Что получилось и что не получилось? - Какие были ошибки?
*

baloon

  • Захожу иногда
  • 369
  • 13 / 0
Вот так написал, правильно?
Вместо имени бота поставил Opera и при посещение страницы через оперу счетчик не засчитывает.

Код
<?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 * from #__vm_mycounyter WHERE product_id="'.$product_id.'"';
$db->setQuery($query);
$stats = $db->loadObject();
$stats->hits = $stats->hits+1;
$query = 'DELETE FROM #__vm_mycounyter  WHERE product_id = "'.$product_id.'"';
$db->setQuery($query);
$db->query();
$query = "INSERT INTO #__vm_mycounyter (`product_id`, `hits`) VALUES ('".$product_id."', '".$stats->hits."')";
$db->setQuery($query);
$db->query();
unset($db);
}
?>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Не выводит списком Настраиваемое поле в VirtueMart 5.0

Автор ЛюдмилаМир

Ответов: 2
Просмотров: 1678
Последний ответ 25.08.2019, 16:27:04
от ЛюдмилаМир
Joomla VirtueMart помощь в переводе

Автор akkord31

Ответов: 0
Просмотров: 1647
Последний ответ 21.05.2019, 09:14:02
от akkord31
Миграция с Joomla 1.5 на 3 с VirtueMart 1.1.9 stable на свежую. Кто поможет?

Автор Гриша-Десантник

Ответов: 7
Просмотров: 1822
Последний ответ 23.04.2019, 10:22:25
от draff
Переход на https VirtueMart 1.1.4 проблемы с фото

Автор Sergey1984

Ответов: 4
Просмотров: 1965
Последний ответ 25.10.2018, 20:56:54
от Sergey1984
VirtueMart 1.1.4 и https дополнительные фото товаров

Автор Sergey1984

Ответов: 0
Просмотров: 1652
Последний ответ 23.10.2018, 19:58:44
от Sergey1984