Virtuemart уведомить меня или как смотреть waiting_list
В Virtuemart (движок для интернет-магазина) есть такая функция «Уведомить меня», когда товара нет в наличии пользователю предлагается ввести свой e-mail чтобы как только товар появится ему пришло уведомление об этом. Но в версии virtuemart 1.1.5 по умолчанию нет функции посмотреть список уведомляемых потенциальных покупателей, что плохо, так как мы не можем узнать какой товар пользователи хотят купить.
Как же сделать удобную панель управления списком уведомляемых?
Для начала посмотрим в базу и увидим что все данные хранятся в таблице jos_vm_waiting_list.
Далее рассмотрим пошагово как сделать в админке virtuemart удобную панель управления для функции уведомить меня или waiting_list
1. Создадим файл /administrator/components/com_virtuemart/html/product.waiting_list.php
И положим туда следующий код:
<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' ); global $ps_product, $ps_product_category; $title="Notify List"; function random_letters ($numofletters=10) { $v=""; for($i=0;$i<$numofletters;$i++) $v.=chr(rand(65,90)); return $v; } //Remove products from the list $task = $_POST["task"]; if ($task == 'NULL'){ $task = "display"; } if ($task == "remove"){ $items = $_POST["items"]; foreach ($items as $product){ $q = "DELETE FROM `jos_vm_waiting_list` WHERE `waiting_list_id` = '" .$product."'"; $results = mysql_query($q); } } $q = "SELECT waiting_list_id, notify_email, notify_phone, product_name, product_desc , product_publish, product_sku, product_thumb_image, notify_date FROM jos_vm_waiting_list JOIN jos_vm_product ON jos_vm_waiting_list.product_id = jos_vm_product.product_id WHERE notified = '0' ORDER BY notify_date DESC"; $results = mysql_query($q); //Use the MD5 algorithm to generate a random hash $random_hash = md5(date('r', time())); //define the body of the message. ob_start(); //Turn on output buffering ?> <!-- table styling --> <style type="text/css"> table.sample { width:100%; border-width: 0px 0px 0px 0px; border-spacing: 1px; border-style: solid solid solid solid; border-color: black black black black; border-collapse: separate; background-color: grey; } table.sample th { border-width: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border-style: none none none none; border-color: gray gray gray gray; background-color: white; } table.sample td { border-width: 0px 0px 0px 0px; padding: 5px 5px 5px 5px; border-style: none none none none; border-color: gray gray gray gray; background-color: white; font-size: 12px; text-align: left; text-align: top; } </style> <form action="<?php echo $PHP_SELF;?>" method="post"> <table class="sample"> <tbody> <tr> <td></td> <td><b><?php echo $VM_LANG->_('PHPSHOP_SHOPPER_FORM_EMAIL')?></b></td> <td><b><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_LIST_SKU')?></b></td> <td><b><?php echo $VM_LANG->_('PHPSHOP_PRODUCT_NAME_TITLE')?></b></td> <!-- uncomment the following line to show the product description --> <!-- this can be very large, so I uncommented it by default --> <!-- <td><b>Produkt beschrijving</b></td> --> <td><b><?php echo $VM_LANG->_('PHPSHOP_WAITING_LIST_DATE')?></b></td> <td><b><?php echo $VM_LANG->_('PHPSHOP_WAITING_LIST_IMAGE')?></b></td> <td><b><?php echo $VM_LANG->_('CMN_PUBLISHED')?></b></td> </tr> <?php while ($row = mysql_fetch_array ($results)){ echo ("<tr> <td><input type=checkbox name=items[] value=".$row[waiting_list_id]."></td> <td>".$row[notify_email]."<br />".$row[notify_phone]."</td> <td>".$row[product_sku]."</td> <td>".$row[product_name]."</td> <!-- uncomment the following line to show the product description --> <!-- <td>".$row[product_desc]."</td> --> <td>".$row[notify_date]."</td> <!-- show product image - change the URL! --> <td><img src='http://ВАШ ДОМЕН/components/com_virtuemart/show_image_in_imgtag.php?filename=". $row[product_thumb_image]."&newxsize=30&newysize=30&fileout='></td> <td>".$row[product_publish]."</td> </tr>"); } ?> </tbody> </table> <br> <input name="task" value="remove"type="hidden"> <input value="remove" type="submit"></form> <p></p> <p></p> <br> <p> </p> <hr> <?php //copy current buffer contents into $message variable and delete current output buffer $message = ob_get_clean(); echo $message; mysql_close; ?> |
2. Заходим в файл /components/com_virtuemart/js/extlayout.js.php и добавляем следующие строки примерно на 324 строчку.
$modules[$module]['links'][] = array('iconCls' => 'vmicon vmicon-16-content', 'href' => 'page=product.waiting_list', 'text' => $VM_LANG->_('PHPSHOP_WAITING_LIST_MNU') ); |
3. Заходим в файл /administrator/components/com_virtuemart/header.php и добавляем строки примерно на 296 строчку
<li class="item-smenu vmicon vmicon-16-content"> <a href="<?php $sess->purl($_SERVER['PHP_SELF']."?pshop_mode=admin&page=product.waiting_list") ?>"> <?php echo $VM_LANG->_('PHPSHOP_WAITING_LIST_MNU')?> </a> </li> |
4. Заходим в файл /administrator/components/com_virtuemart/languages/common/english.php и добавляем строки в любое место, куда-нибудь в середину
'PHPSHOP_WAITING_LIST_MNU' => 'Show Waiting list', 'PHPSHOP_WAITING_LIST_EMAIL' => 'Email address', 'PHPSHOP_WAITING_LIST_DATE' => 'Date', 'PHPSHOP_WAITING_LIST_IMAGE' => 'Image', |
Проделываем тоже самое, но уже с файлом /administrator/components/com_virtuemart/languages/common/russian.php
Мы же хотим чтобы все было на родном языке
'PHPSHOP_WAITING_LIST_MNU' => 'Показать лист уведомлений', 'PHPSHOP_WAITING_LIST_EMAIL' => 'Email адрес', 'PHPSHOP_WAITING_LIST_DATE' => 'Дата', 'PHPSHOP_WAITING_LIST_IMAGE' => 'Картинка', |
Теперь открыв панель управления virtuemart можно будет увидеть следующее:
Как добавить еще одно поле с информацией о покупателе и отправлять уведомление на почту админа о заказе можно прочитать во второй части
Для пользователя mp выкладываю файл product.waiting_list.rar
Virtuemart 1.5.22
После того, как исправил все апострофы при копировании текста из статьи, скрипт product.waiting_list.php стал запускаться. Но при попытке открыть вкладку «Показать лист уведомлений» выдается ошибка:
Warning: mysql_query() [function.mysql-query]: Can’t connect to MySQL server on ‘xxx.xxx.ru’ (13) in /site/www/administrator/components/com_virtuemart/html/product.waiting_list.php on line 33
….продвинулся… надо в начало добавить
mysql_connect(«locahost»,»имя пользователя»,»пароль»);
указанная ошибка исчезла, но теперь ошибку выдает mysql_fetch_array($results) 🙁
@mp
Строку mysql_connect(“locahost”,”имя пользователя”,”пароль”); добавлять не нужно, так как подключение к базе уже должно быть
Покажи свой листинг кода
Внизу статьи выложил свой рабочий product.waiting_list.php, может поможет
Также исправил статью, теперь можно копировать с кавычками нормально, спасибо за конструктивную критику
А у меня пустая эта таблица! пункт есть таблица с заголовками выводиться и все ! данных нет! хотя я сам оставлял заявку.
VirtueMart 1.1.8 где копать не подскажите?
@Артем
Сложно быть экстрасенсом, но все же постараюсь. Скорее всего ошибка в файле
«/administrator/components/com_virtuemart/html/product.waiting_list.php»
У меня была подобная проблема, оказалось стоял лишний перевод строки на какойто строчке. Посмотрите внимательнее код, попробуйте подставить тот который здесь выложен внизу статьи (не забудьте в нем подставить свои данные)
да там данные подставляются где он только картинки тягает!
файл снизу скачал!
все равно пустая таблица! где рыть?
Скрипт работает, спасибо, но в админке выводятся только 16 заявок, в базе же их 69. Как вывести все?
@Артем
Если я правильно понял, саму таблицу он рисует, значит скрипт все таки отрабатывает, попробуйте выполнить запрос выборки в самой базе, может в версии 1.1.8 чтото поменялось. Заодно посмотрите в таблице jos_vm_waiting_list есть ли там записи
@42
Тоже самое что и к предыдущему комментарию: Попробуйте выполнить этот запрос в базе что он выдает? Также 16 или все? Посмотрите на условия в запросе по которым происходит выборка:
Сам Запрос вот он:
SELECT waiting_list_id, notify_email, product_name, product_desc , product_publish, product_sku,
product_thumb_image, notify_date FROM jos_vm_waiting_list JOIN jos_vm_product ON
jos_vm_waiting_list.product_id = jos_vm_product.product_id WHERE notified = 0 ORDER BY notify_date
DESC
В таблице записи есть! это я в самом начале смотрел
На запрос выдало #1054 — Unknown column ‘??™0???’ in ‘where clause’
что бы это значило? В самом virtuemart таблица пустая, в php my admin все адреса указаны. Пока вопрос решился тем что уведомления приходят на мыло благодаря второй статье за которую тоже спасибо!
@Артем
Если в таблице jos_vm_waiting_list записи есть, значит смотрим на выполнение запроса, выполняем запрос в базу из файла product.waiting_list.php («Select…. ит.д. я его выше в комментариях приводил «) и смотрим на его выполнение (выполняем к примеру через phpMyadmin). Если ошибка смотрим какая и соответсвенно делаем выводы, если просто ничего не выводит значит смотрим условия в запросе, сравниваем с полями и опять же делаем выводы:)
@Slava
Если копировали запрос из комментария выше, значит скорее всего ошибка была из-за кавычек этих WHERE notified = ’0? (wordpress почему то так преобразовал текст), уже убрал ошибку, пробуйте снова. А лучше для чистоты эксперимента скопируйте запрос из файла со скриптом
MySQL вернула пустой результат (т.е. ноль строк). ( запрос занял 0.0022 сек. )
SELECT waiting_list_id, notify_email, product_name, product_desc, product_publish, product_sku, product_thumb_image, notify_date
FROM jos_vm_waiting_list
JOIN jos_vm_product ON jos_vm_waiting_list.product_id = jos_vm_product.product_id
WHERE notified =0
ORDER BY notify_date DESC
LIMIT 0 , 30
вот что он вернул в пхп админе
запрос вроде правильный! — я не очень большой специалист поэтому ошибку не вижу— помогайте други
Други, в notified=0, нолик все таки должен быть заключен в кавычки, чтобы запрос корректно отработал. вот снизу рабочий запрос, только что проверил у себя
Значит что мы имеем оно выводит данные из 2ух таблиц jos_vm_waiting_list (уведомления) и jos_vm_product (здесь хранятся данные о товарах), если в таблице jos_vm_product есть запись у которого значение поля product_id соответствует значению product_id в jos_vm_waiting_list (грубо говоря если товар есть в базе) и поле notified равно 0, то запись выводится.
Последний запрос работает! респект и уважуха тебе Игорь!
Здраствуйте админ. Сделал все как у вас написано не помогает , в админке не показывает кнопочки «показать лист уведомлений.» у меня версия VM 1.1.6 stable помогите очень прошу.
@Андрей
Обратите внимание на пункт №3 файл /administrator/components/com_virtuemart/header.php
Все ли там правильно? в этом файле выводится список меню, попробуйте поиграться и написать вместо положеного кода такой:
Если пункт появится значит идем в сторону других файлов, если нет значит проблема в этом файле.
Все поставил как в инструкция пишет ошибку в фале product.waiting_list.php строка 91.
Помогите плиз
Версия у меня VirtueMart 1.1.9
Все сделал!!!!!!!!! Большое Вам спасибо…..
Напиши как исправил а то такая же проблема.
@Тимофей
Подробней что за строчка и какая ошибка?
Добрый день.
Все сделал как написано но в итоге в админ панели при входе в Вертумарт ошибка 500!
Не подскажите почему?
спасибо
@Борис
Работало ли все раньше? ошибка при входе в virtuemart или все таки в лист уведомлений, описывайте проблему подробнее. Попробуйте сделать так: http://itfound.ru/39-vkluchit-seo-joomla-500.html
Добрый день! Все сделала как по инструкции, но после манипуляций с файлом russian.php сайт не работает (белая страница), тоже самое в админке на вкладке виртуамарт. После совершения первых 4 действий в админке, там где должна быть строчка «Показать лист уведомлений» — пустая строчка. Помогите, разобраться в проблеме, плиз
@Лена
По вашим описаниям проблема как я понял в файле russian.php, быть может вы допустили там синтаксическую ошибку? Проверьте все ли запятые на своих местах.
при вызове в virtuemart «показать лист уведомлений» появляется ошибка
Parse error: syntax error, unexpected T_STRING in /home/c/cl13767/tokyocosmetic.ru/public_html/administrator/components/com_virtuemart/html/product.waiting_list.php on line 2
в чем ошибка? подскажите
версия 1.1.7
@Евген
Синтаксическая ошибка, попробуйте написать функцию if в одну строчку
обратился к англоязычному источнику, да в синтаксисе ошибка была
нужна помощь — вирт 1.1.9
Таблица есть в админке, база на запрос отвечает, но сама таблица пустая — вот такая ошибка
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in homelocalhostwwwadministratorcomponentscom_virtuemarthtmlproduct.waiting_list.php on line 88
сама строчка ;
88 <?php while ($row = mysql_fetch_array ($results)) {
89 echo ("
90
91
92
93 «.$row[notify_email].»».$row[notify_phone].»
94 «.$row[product_sku].»
95 «.$row[product_name].»
96
97
98 <!— «.$row[product_desc].» —>
99
100 «.$row[notify_date].»
101
102
103
104 «.$row[product_publish].»
105 «);
106 } ?>
Все заработало!!!)))
А ларчик то прост — я скачал и забросил файл, а там уже есть поле notify_phone.
Как только я пошел дальше и прописал его в базу — все работает.
СПАСИБО!!!!!!)))))))))
можно добавить ссылку для удобства
в product.waiting_list.php строка 96
<a href=»index.php?page=product.product_form&product_id=».$row[waiting_list_id].»&option=com_virtuemart»>».$row[product_name].»</a>
для быстрого перехода к товару
Спасибо Автору! Очень полезная штука!
Огромное спасибо! Но!
выдоло ошибку :
Parse error: syntax error, unexpected ‘;’ in Z:homelocalhostwwwinternetmagazin.ruadministratorcomponentscom_virtuemarthtmlproduct.waiting_list.php on line 2
Заменил
if( !defined( ‘_VALID_MOS’ ) && !defined( ‘_JEXEC’ ) ) die( ‘Direct Access to ‘.basename(__FILE__).’ is not allowed.’ );
на
if( !defined( ‘_VALID_MOS’ ) && !defined( ‘_JEXEC’ ) ) die( ‘Direct Access to ‘.basename(__FILE__).’ is not allowed.’ );
И появилось окно просмотра уведомлений. Только внизу строки появилось вот это:
Что это такое и как убрать?
Внизу страницы появилось ( )
& n b s p ; (вставил пробелы так как целиком не отображается в сообщении)
& nbsp — это спецсимвол означающий неразрывный пробел
Так как все таки решить эту проблему? Уже сутки бьюсь.
@vanikon
Проверь выполняется ли запрос напрямую в базе, если да то копай в сторону соединения скрипта с базой, если нет то значит дело в запросе, разбери запрос все ли поля существуют и т.д.
Выдает следующую ошибку: Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /administrator/components/com_virtuemart/html/product.waiting_list.php on line 91
что не так?
Возможно у вас нет ни одной записи в таблице jos_vm_waiting_list
У меня Virtuemart 1.1.9 В таблице (jos_vm_waiting_list) есть одна запись, но таблицу открывает пустой и вверху пишет Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in Z:homelocalhostwwwiskyshenieadministratorcomponentscom_virtuemarthtmlproduct.waiting_list.php on line 91 подскажите в чем проблема, тут такую ошибку уже обсуждали ,Ю но решение так и не выложили
Вопрос снят все сделал
Доброго времени суток!
Очень полезную функцию показал мне автор поста — давно искала что-то подобное. Я сделала вроде все как тут написано, но заходя в админку и нажав на пункт «показать лист уведомлений» у меня открывается пустая таблица, а над ней надпись
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/hobbimix/public_html/administrator/components/com_virtuemart/html/product.waiting_list.php on line 89
но сами строки таблицы пусты.
Если не трудно — объясните в чем проблема и как это исправить.
P.s. Открывала базу данных — все поля на месте. Такое чувство что созданные базы просто не коннектятся к данной форме. Очень нужна помощь. Заранее благодарю.
@Марина
Проверьте есть ли записи в самой таблице базы
@igor
Есть, и как писал
Тоже 16 только строк.
Правда у меня в админке не выводится) Но в базах — 16 строк
@Марина
Выполните запрос из скрипта напрямую в базе, если запрос выполнится как надо копайте в сторону скрипта и его соединения с базой, если нет то в сторону запроса
Если Вы ведете речь о запросе из поста:
SELECT waiting_list_id, notify_email, product_name, product_desc ,
product_publish, product_sku,
product_thumb_image, notify_date
FROM jos_vm_waiting_list JOIN jos_vm_product ON
jos_vm_waiting_list.product_id = jos_vm_product.product_id
WHERE notified = ‘0’
ORDER BY notify_date
DESC
то он у меня выполняется.
Отображает строки 0 — 11 ( 12 всего, запрос занял 0.0083 сек.) [notify_date: 2012-02-17 01:05:19 — 2012-01-20 10:30:10]
Это ответ сервера.
P.s. Но учитывая мои самые минимальные знания в вопросах баз данных — что делать дальше — ума не приложу) Уж простите)
А в админке — все тоже самое — пункт меню — «показать лист уведомлений» есть, табличка есть, а над табличкой это:
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/hobbimix/public_html/administrator/components/com_virtuemart/html/product.waiting_list.php on line 89
Целый вечер бьюсь над интеграцией и не получается… В базу данные заносятся и запрос из phpmyadmin дает ответ, а вот в админку данные не тянутся почемуто… такое впечатление что к базе не коннектится (вставил условие чтобы в случае ошибки еррор выписывало, то получаю: Access denied for user ‘apache’@’localhost’ (using password: NO))
@Андрей
Все оказалось в настройках джумлы: стояло mysqli — после установки mysql все заработало!
товарищи, у кого mysqli, я не стал углубляться в подробности, но чтобы заработало нормально просто допишите следующий костыль после <?php:
mysql_connect("хост","логин","пароль");
mysql_select_db("название базы");
mysql_query("SET NAMES 'utf8'");
mysql_query("SET CHARACTER SET 'utf8'");
вместо хост логин пароль и название базы, естественно подставьте свои значения.
Сделал все как написано. При попытке открыть в админке «Показать лист уведомлений» появляется сообщение об ошибке:
Parse error: syntax error, unexpected ‘;’ in Z:homejoomlawwwadministratorcomponentscom_virtuemarthtmlproduct.waiting_list.php on line 2
Подскажите, как исправить!
Получается, что сайт ругается на эту строку «if( !defined( ‘_VALID_MOS’ ) && !defined( ‘_JEXEC’ ) ) die( ‘Direct Access to allowed.’ );». Если удалить строку, то все работает. Подскажите, корректно ли будет просто удалить эту строку?
@Андрей
Скачайте файл выложенный внизу статьи и скопируйте строчку оттуда, видимо вкралась синтаксическая ошибка
Поделитесь решением! Не все же такие грамотные.
Сам же даю развернутый ответ. Для тех у кого показывает эту же ошибку в VM 1.1.9 нужно запрос q=»» в строке 30 заменить на
SELECT waiting_list_id, notify_email, product_name, product_desc ,
product_publish, product_sku,
product_thumb_image, notify_date
FROM jos_vm_waiting_list JOIN jos_vm_product ON
jos_vm_waiting_list.product_id = jos_vm_product.product_id
WHERE notified = ‘0’
ORDER BY notify_date
DESC
Други, в notified=0, нолик все таки должен быть заключен в кавычки, чтобы запрос корректно отработал. вот снизу рабочий запрос, только что проверил у себя
SELECT waiting_list_id, notify_email, product_name, product_desc ,
product_publish, product_sku,
product_thumb_image, notify_date
FROM jos_vm_waiting_list JOIN jos_vm_product ON
jos_vm_waiting_list.product_id = jos_vm_product.product_id
WHERE notified = ‘0’
ORDER BY notify_date
DESC
Решение здесь
Значит что мы имеем оно выводит данные из 2ух таблиц jos_vm_waiting_list (уведомления) и jos_vm_product (здесь хранятся данные о товарах), если в таблице jos_vm_product есть запись у которого значение поля product_id соответствует значению product_id в jos_vm_waiting_list (грубо говоря если товар есть в базе) и поле notified равно 0, то запись выводится.
@Andrey
А по подробнее можно! Как именно изменить 96 строку?
Там сейчас:
«.$row[product_name].»
@Andrey
Напишите подробнее как заменить данную строчку?
@Дмитрий
Не в этом проблема!!!
Скачанный файл product.waiting_list.php имеет записи про контактный телефон из второй части материала!!!
Кому не надо информация о телефоне делаем следующее:
1. Стока 30 удалить «».$row[notify_phone].
2. Стока 94 удалить «».$row[notify_phone].
3. Стока 105 исправить http://kupi-girafa.ru/ на свой.
Дальше по инструкции и всё работает отлично!!!
Моя проблема типична, Вы советуете скачать файл внизу статьи, но он уже не существует 🙁 Возможно ли его восстановить?
Сама проблема:
при вызове в virtuemart “показать лист уведомлений” появляется ошибка
Parse error: syntax error, unexpected T_STRING in /home/c/cl13767/tokyocosmetic.ru/public_html/administrator/components/com_virtuemart/html/product.waiting_list.php on line 2
Версия 1.5.22
Спасибо!
@Алиса
Исправили
Решил проблему ошибки «Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in homelocalhostwwwadministratorcomponentscom_virtuemarthtmlproduct.waiting_list.php on line 88» изменением метода доступа к БД, а именно:
1. добавил строку 19 код
$database =& JFactory::getDBO();
2. Примерно строках код
$results = mysql_query($q);
заменил на
$database->setQuery($q);
3. Вместо кода
while ($row = mysql_fetch_array ($results)){
поставил
$num_rows = $database->getNumRows();
$row = $database->loadAssocList();
for ($i=0; $i<$num_rows; $i++) {
4. Код вида
$row[notify_email]
меняем на
$row[$i][notify_email]
5. Радуемся.
В п.2 еще добавить $database->query();