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

Luchik

  • Захожу иногда
  • 57
  • 6 / 0
В VirtueMart есть такая функция, когда товара 0 на складе, то вместо кнопки "заказать" появляеться кнопка "уведомить меня". Так вот вопрос: где я могу посмотреть, чего люди ждут? Т.е. на каких товарах они нажали "уведомить меня"?



Update
Думал найти файл, отвечающий за отправку почты и добавить свой урл, для копии письма, но застрял на:
components\com_virtuemart\themes\ja-mesolite\templates\pages\shop.waiting_list.tpl.php

Может кто поможет?
« Последнее редактирование: 01.11.2009, 21:53:31 от Luchik »
*

aleks_yug

  • Давно я тут
  • 628
  • 83 / 0
Добрый вечер!
Как раз сегодня пришлось заморачиваться с этой проблемой.
Мне кажется, оптимальный вариант - перенаправить пользователя на страницу контакта и таким образом решить вопрос.
для этого нужно найти в файле ps_cart.php (administrator/components/com_virtuemart/classes/ps_cart.php) такой код:

if( vmIsXHR() ) {
   $GLOBALS['vm_mainframe']->scriptRedirect( $sess->url( 'index.php?page=shop.waiting_list&product_id='.$product_id, true, false ) );
   } else {
   vmRedirect( $sess->url( 'index.php?page=shop.waiting_list&product_id='.$product_id, true, false ) );
 }


и немного его переделать:

if( vmIsXHR() ) {
   $GLOBALS['vm_mainframe']->scriptRedirect( $link = 'index.php?option=com_contact&view=contact&id=1');
   } else {
   vmRedirect( $link = 'index.php?option=com_contact&view=contact&id=1');
 }


(У меня стоит id=1 контакта - посмотреть свой в админке, в соответствующем пункте меню)
Таким образом просто перенаправляемся на штатный компонент контакта. Если используется другой компонент - направить на него аналогичным способом.

Наверняка у кого-нибудь есть более изящное предложение. Может быть покажете?
  Удачи!
« Последнее редактирование: 02.11.2009, 21:09:00 от aleks_yug »
*

Luchik

  • Захожу иногда
  • 57
  • 6 / 0
Оказываеться есть так называемый "Лист ожидания". Он находиться в базе в таблице: #__{vm}_waiting_list
Там табличка из списка: id товара, почты человека, который запросил и даты запроса.
Что-то я не нашел сранички в админке virtuemarta выводящий этот список. И я на данном этапе не смогу написать код вывода данных из это таблички (что-то пробовал пару раз так и не получилось :( ). Может кто поможет чем?

Хотя нет, нашел один файл: product.product_form.php
Там в коде есть такое:
Код
if( $product_id ) {
// SHOW THE WAITING LIST!
$dbw = new ps_DB;
$dbw->query( 'SELECT name, username, user_id, notify_email, notified, notify_date FROM `#__{vm}_waiting_list`
LEFT JOIN `#__users` ON `user_id` = `id`
WHERE `product_id`=' . $product_id );
if( $dbw->num_rows() > 0 ) {
$tabs->startTab( $VM_LANG->_('PRODUCT_WAITING_LIST_TAB'), 'waiting-list-tab' );

echo '<table class="adminform"><tr><td><h2>' . $VM_LANG->_('PRODUCT_WAITING_LIST_USERLIST'). ':</h2></td></tr>';
echo '<tr><td><input type="hidden" value="'.$db->f('product_in_stock').'" name="product_in_stock_old" />';
echo '<input type="checkbox" value="1" checked="checked" id="notify_users" name="notify_users" /> <label for="notify_users">' . $VM_LANG->_('PRODUCT_WAITING_LIST_NOTIFYUSERS'). '</label><br /><br /></td></tr>';
echo '<tr><td>';
while( $dbw->next_record() ) {
if ($dbw->f("notified")==1) {
$waiting_notified = ' - <strong style="font-weight:bold">' . $VM_LANG->_('PRODUCT_WAITING_LIST_NOTIFIED'). ' ' . $dbw->f("notify_date"). '</strong>';
} else {
$waiting_notified = '';
}
if ($dbw->f("user_id")==0) {
$waitinglist[] = '<a href="mailto:' . $dbw->f('notify_email'). '">' . $dbw->f('notify_email'). '</a>' . $waiting_notified;
} else {
$waitinglist[] = $dbw->f('name'). ' ('.$dbw->f('username'). ' - ' . '<a href="mailto:' . $dbw->f('notify_email'). '">' . $dbw->f('notify_email'). '</a>' . ')' . $waiting_notified;
}
}
echo vmCommonHTML::getList( $waitinglist );
echo '</td></tr></table>';
$tabs->endTab();
}
}

Только куда оно выводится?
« Последнее редактирование: 22.11.2009, 20:43:15 от Luchik »
*

yadrinez

  • Захожу иногда
  • 108
  • 9 / 0
 Файл в котором обрабатывается данный функционал zw_waiting_list.php
Лежит тут administrator\components\com_virtuemart\classes

В нем есть функция которая  отрабатывает при внесении пользователя в список рассылки
Код
function add(&$d) {
global $auth;
$db = new ps_DB;

if (!$this->validate_add($d)) {
return False;
}
$q = "INSERT INTO #__{vm}_waiting_list (product_id, user_id, notify_email)";
$q .= " VALUES ('";
$q .= $d["product_id"] . "','";
$q .= $auth['user_id'] . "','";
$q .= $d["notify_email"] . "')";
$db->query($q);
$db->next_record();
return True;

}

Встроить сюда функцию отправки почты со значениями $d["product_id"], $auth['user_id'] . Можно вызвать ее из этого же класса. Пример вызова vmMail есть в этом же классе
*

SolopoV

  • Давно я тут
  • 573
  • 16 / 0
  • зеленею...
Ситуация усложняется тем, что, к примеру:

Заказали 300 человек. На склад пришло 200 ед.
При изменении количества в админке с 0 до 200 шт., письма с уведомлениями отлетели всем 300 заказчикам.
Налетай гурьбой! Кто не успел тот опоздал.

Так получается? Кто сталкивался с такой траблой, поделитесь опытом.
*

VadeR

  • Осваиваюсь на форуме
  • 23
  • 6 / 0
Люди добрые!
1. Скажите пожалуйста, я сколько не эксперементирую - не получается...
Хочу в эту таблицу (waiting_list) засунуть ещё и количество товара, которое нужно клиенту. Потому как, если клиенту нужно больше, чем есть в наличии - ему тоже выскакивает возможность оставить заявку... но когда количество в админке увеличиваешь - уведомление не приходит.
2. И ещё вопрос следующий. Если я обновляю товар через CSVI... это уведомление будет работать, или только при нажатии кнопки Сохранить в админке?

Спасибо!
*

SolopoV

  • Давно я тут
  • 573
  • 16 / 0
  • зеленею...
надо решать
« Последнее редактирование: 07.10.2011, 20:08:37 от SolopoV »
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Ну не знаю, у меня все работает, что надо отладил, переделал, подстроил. и не с 2006 года :)
*

VadeR

  • Осваиваюсь на форуме
  • 23
  • 6 / 0
Всё сделал. Может немного деревянно, но работает.
Уведомления ходят и по количеству товара (когда пользователь пытается заказать больше чем есть на складе, оставляет свой ящик) ему при поступлении достаточного количества на склад приходит уведомление. И при этом не надо по каждой позиции из ожидаемых клоцать в админке и сохранять. Обновляешь прайс через CSVI - и раз в сутки скрипт проверяет наличие товаров под запросы пользователей... если есть необходимое количество на складе - отправляет уведомление пользователю с приглашением к заказу.
Если интересно кому - могу выложить свой деревянненький метод тут или описать в личку.  *DRINK*
*

VadeR

  • Осваиваюсь на форуме
  • 23
  • 6 / 0
Re: Следить за товаром - уведомить меня
« Ответ #11 : 04.06.2010, 17:53:24 »
Ну тогда попробую описать как делал и что, если будет нипанятна - спрашивайте.
Итак. Задача №1 - добавить в таблицу jos_vm_waiting_list необходимое пользователю количество товара.

Так как мне тут никто не ответил, как передать переменную в waiting_list - я это сделал через переменную сессии.

файл /administrator/components/com_virtuemart/classes/ps_cart.php

Меняем блок:

Код
			if( vmIsXHR() ) {
$GLOBALS['vm_mainframe']->scriptRedirect( $sess->url( 'index.php?page=shop.waiting_list&product_id='.$product_id, true, false ) );
} else {
vmRedirect( $sess->url( 'index.php?page=shop.waiting_list&product_id='.$product_id, true, false ) );
}
}
на:

Код
			if( vmIsXHR() ) {
$_SESSION['kolichestvo'] = $request['quantity'];
$GLOBALS['vm_mainframe']->scriptRedirect( $sess->url( 'index.php?page=shop.waiting_list&product_id='.$product_id, true, false ) );
} else {
$_SESSION['kolichestvo'] = $request['quantity'];
vmRedirect( $sess->url( 'index.php?page=shop.waiting_list&product_id='.$product_id, true, false ) );
}
}

Далее переходим в файл zw_waiting_list.php в той-же директории

Меняем блок:

Код
	function add(&$d) {
global $auth;
$db = new ps_DB;

$q = "INSERT INTO #__{vm}_waiting_list (product_id, user_id, notify_email, pcs)";
$q .= " VALUES ('";
$q .= $d["product_id"] . "','";
$q .= $auth['user_id'] . "','";
$q .= $d["notify_email"] . "')";
$db->query($q);
$db->next_record();
return True;

}

На такой

Код
	function add(&$d) {
global $auth;
$db = new ps_DB;

$q = "INSERT INTO #__{vm}_waiting_list (product_id, user_id, notify_email, pcs)";
$q .= " VALUES ('";
$q .= $d["product_id"] . "','";
$q .= $auth['user_id'] . "','";
$q .= $d["notify_email"] . "','";
$q .= $_SESSION['kolichestvo'] . "')";
$db->query($q);
$db->next_record();
unset ($_SESSION['kolichestvo']);
return True;

}

ВАЖНО! ПЕРЕД ОСТАЛЬНЫМИ ШАГАМИ! Зайдите в таблицу jos_vm_waiting_list и добавьте поле pcs!

Теперь у нас в базу будет заноситься не только какой товар нужен пользователю, а и его количество.
Можем проверить. закажите у себя товара больше, чем есть в наличии, оставьте имэйл, зайдите в таблицу базы данных jos_vm_waiting_list и проверьте наличие количества.
Если товара вообще нет в наличии, то в поле pcs будет ставиться единица.

2. Необходимо выполнять проверку наличия товара хотябы раз в день. При этом не важно как вы обновите количество... через админку или через CSVI! Пишем для этого отдельный скрипт wait.php такого содержания (перед запуском скрипта создайте папку flag в корне сайта):
 
Код
<?php
$date = date("d.m.Y");
$file_name = '(физический путь на сервере к Вашему сайту)/flag/waiting-'.$date; // Флаг отработки скрипта. Как работает - дальше.
if (@fopen($file_name, "r"))
{

// Если флаг есть - скрипт ничего не выполняет. Имя флага включает в себя текущую дату.
}
 else
{


touch($file_name); // если флага нету - создаём. Это означает, что сегодня скрипт уже отработал. Больше он запускаться не будет.


// Модуль подключения базы данных
if (!mysql_connect('(имя сервера)', '(имя пользователя)', '(пароль)'))
{
echo "ERROR ".mysql_errno()." ".mysql_error()."\n";
exit;
}
mysql_select_db(имя базы данных);
// конец модуля подключения базы данных
$waiting_list = mysql_query("SELECT * FROM jos_vm_waiting_list WHERE notified='0'"); // выбираем все записи с невыполненным статусом
if (mysql_num_rows($waiting_list)>0)
{
for ($c=0; $c<mysql_num_rows($waiting_list); $c++)
{
$list_array=mysql_fetch_array($waiting_list);
$tovar = mysql_query("SELECT * FROM jos_vm_product WHERE product_id='$list_array[product_id]'");

if (mysql_num_rows($tovar)>0)
{
for ($k=0; $k<mysql_num_rows($tovar); $k++)
{
$tovar_array=mysql_fetch_array($tovar);
if ($tovar_array[product_in_stock]>=$list_array[pcs]) // если наличие на складе больше или равно чем заказанное пользователем
{
mysql_query("UPDATE jos_vm_waiting_list SET notified='1' WHERE waiting_list_id='$list_array[waiting_list_id]'"); // ставим статус Выполнено (тоесть // пользователь уведомлён)

$to  = $list_array[notify_email] ; // формируем почтовое уведомление

$subject = "Тема письма";
$subject = '=?koi8-r?B?'.base64_encode(convert_cyr_string($subject, "w","k")).'?='; // преобразование в людскую кодировку для почтовиков
// формируем текст письма. на свой вкус. тут просто пример.
$message = '
<html>
    <head>
        <title>Интересующие Вас позиции</title>
    </head>
    <body>
        <p> '.$tovar_array[product_name].' есть на складе в количестве '.$tovar_array[product_in_stock].' шт.</p>
<p>Если Ваша заявка на этот товар ещё актуальна - посетите наш сайт или свяжитесь с менеджерами нашего магазина.</p>
    </body>
</html>';

$headers  = "Content-type: text/html; charset=windows-1251 \r\n";
$headers .= "From: Магазин <info@магазин.com.ua>\r\n";
$headers .= "Bcc: info@магазин.com.ua\r\n";

mail($to, $subject, $message, $headers);

}
}
}
}
}
}
?>

И вызываем выполнение этого скрипта (если хотите чтобы уведомления рассылались автоматически) в основном файле index.php

Код
require ("wait.php");

Ну вот и всё.

Может немного коряво, но я не претендую на звание лучшего кодера Joomla :) Поэтому сделал так, как мне необходимо, и оно работает.
Если есть предложения по улучшению кода - с удовольствием выслушаю :)

PS. Версия Joomla 1.5.17, версия Virtuemart: VirtueMart 1.1.4 stable
*

LiluDallas

  • Осваиваюсь на форуме
  • 21
  • 1 / 0
Re: Следить за товаром - уведомить меня
« Ответ #12 : 12.06.2010, 14:27:15 »
а есть возможность сделать отправку на мыло админу отчета о ожидаемых товарах?
что то вида таблички ФИО-мыло-артикул товара-название товара -количество - дата заказа?
« Последнее редактирование: 12.06.2010, 20:57:31 от LiluDallas »
*

VadeR

  • Осваиваюсь на форуме
  • 23
  • 6 / 0
Re: Следить за товаром - уведомить меня
« Ответ #13 : 14.06.2010, 13:17:40 »
а есть возможность сделать отправку на мыло админу отчета о ожидаемых товарах?
что то вида таблички ФИО-мыло-артикул товара-название товара -количество - дата заказа?

Ну наверное можно сделать.
Просто в функцию add (там где заполняется база ожидаемых товаров), добавить процедуру отправки мыла для админа... Фамилия и имя врятли, это нужно будет много чего переделывать, а вот адрес електронной почты может приходить админу. Будет время напишу как это сделать, если сами не сможете. :)
*

kpk17

  • Захожу иногда
  • 257
  • 2 / 0
Re: Следить за товаром - уведомить меня
« Ответ #14 : 02.07.2010, 19:35:57 »
Ну наверное можно сделать.

ни кто не сделал, чтобы это можно было видно из админки целым списком дабы не щелкать на каждый товар?
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Re: Следить за товаром - уведомить меня
« Ответ #15 : 02.07.2010, 20:30:45 »
Это сложнее. Да и не нужно никому.
*

VadeR

  • Осваиваюсь на форуме
  • 23
  • 6 / 0
Re: Следить за товаром - уведомить меня
« Ответ #16 : 05.07.2010, 12:33:13 »
Все заявки можно увидеть в таблице jos_vm_waiting_list
*

disavl

  • Новичок
  • 5
  • 2 / 0
Re: Следить за товаром - уведомить меня
« Ответ #17 : 14.07.2010, 06:18:52 »
Кому еще интересно сделал как описано тут http://www.gillesen.nl/joomla-tips-a-tricks/66-virtuemart-waiting-list-enhancement.html мне помогло. В админке появиться пункт лист заказов, кликнув на него вы увидите, кто ждет заказ, мыло и тд....
*

adjuster

  • Давно я тут
  • 786
  • 55 / 2
Re: Следить за товаром - уведомить меня
« Ответ #18 : 23.07.2010, 10:31:17 »
настроил все через wait.php - все по началу нормально работало - и письма сразу отправлялись после изменений...
потом просто перестало все работать - файл wait.php не может связаться с базой, хотя все настройки указаны, как в файле конфигурации.

Как можно проверить связывается ли файл wait.php c базой? - где-нибудь логи настроить, или еще что?

Re: Следить за товаром - уведомить меня
« Ответ #19 : 10.09.2010, 12:53:03 »
У меня была такая трабла
Virtгuemart (1.1.5 stable) отправляет извещение о поступлении товара на склад автоматом при измении количества
товаров на складе с 0 на N. При этом все работает .
А вот если клиент запросил больше чем есть на складе (не ноль) то предложение о вводе email появляется ,
а письмо не уходит.
Решил проблему так:

В файле C:\Inetpub\wwwroot\administrator\components\com_virtuemart\classes\ps_product.php
  изменил логику
                if (($d["product_in_stock"] > "0" && @$d['notify_users'] == '1' && $d['product_in_stock_old'] == '0')
  на
                if (($d["product_in_stock"] > "0" && @$d['notify_users'] == '1' && $d['product_in_stock_old'] == '0') or
   ($d['product_in_stock_old']-$d["product_in_stock"] < "0" && @$d['notify_users'] == '1' ))
 Все OK!
*

LiluDallas

  • Осваиваюсь на форуме
  • 21
  • 1 / 0
Re: Следить за товаром - уведомить меня
« Ответ #20 : 09.10.2010, 00:32:54 »
Кому еще интересно сделал как описано тут http://www.gillesen.nl/joomla-tips-a-tricks/66-virtuemart-waiting-list-enhancement.html мне помогло. В админке появиться пункт лист заказов, кликнув на него вы увидите, кто ждет заказ, мыло и тд....
Спасибо, помогло!
Еще перевели на русский и все стало очень красиво ))
*

ArtSova

  • Осваиваюсь на форуме
  • 18
  • 0 / 0
Re: Следить за товаром - уведомить меня
« Ответ #21 : 09.01.2011, 18:29:21 »
Кому еще интересно сделал как описано тут http://www.gillesen.nl/joomla-tips-a-tricks/66-virtuemart-waiting-list-enhancement.html мне помогло. В админке появиться пункт лист заказов, кликнув на него вы увидите, кто ждет заказ, мыло и тд....

Да, появляется пункт, таблица, только почему-то списка самого не видно. Не подскажете в чем дело?
*

Evgg

  • Захожу иногда
  • 130
  • 2 / 0
Re: Следить за товаром - уведомить меня
« Ответ #22 : 09.02.2011, 18:52:48 »
Файл в котором обрабатывается данный функционал zw_waiting_list.php
Лежит тут administrator\components\com_virtuemart\classes

В нем есть функция которая  отрабатывает при внесении пользователя в список рассылки
Код
function add(&$d) {
global $auth;
$db = new ps_DB;

if (!$this->validate_add($d)) {
return False;
}
$q = "INSERT INTO #__{vm}_waiting_list (product_id, user_id, notify_email)";
$q .= " VALUES ('";
$q .= $d["product_id"] . "','";
$q .= $auth['user_id'] . "','";
$q .= $d["notify_email"] . "')";
$db->query($q);
$db->next_record();
return True;

}

Встроить сюда функцию отправки почты со значениями $d["product_id"], $auth['user_id'] . Можно вызвать ее из этого же класса. Пример вызова vmMail есть в этом же классе


подскажите пожалуйста одну деталь. Вожусь с этим файлом и не получается никак сделать...
У меня товары имеют дополнительное свойство (размер - S,M,L).
Хочу сделать, чтобы значение этого свойства  (S,M,L) записывалось в таблицу
jos_vm_waiting_list
создал поле "product_atribute" но как в него запихнуть значение, не соображу...
*

Evgg

  • Захожу иногда
  • 130
  • 2 / 0
Re: Следить за товаром - уведомить меня
« Ответ #23 : 09.02.2011, 19:04:50 »
Да, появляется пункт, таблица, только почему-то списка самого не видно. Не подскажете в чем дело?

п.4 из мануала:

4. edit the file /administrator/components/com_virtuemart/languages/common/dutch.php or /english.php
line 139: add the following line to name the menu’s
'PHPSHOP_WAITING_LIST_MNU' => 'Show Waiting list',
'PHPSHOP_WAITING_LIST_EMAIL' => 'Email address',
'PHPSHOP_WAITING_LIST_DATE' => 'Date',
'PHPSHOP_WAITING_LIST_IMAGE' => 'Image'


попробуйте создать аналогичные поля в файле russian.php и присвойте им значения на русском. (У меня после этого заработало.)
там еще в нескольких местах нужно заменить URL на свой реальный адрес,
в файлах: product.waiting_list.php и shop.waiting_list.tpl.php
*

Chifu

  • Захожу иногда
  • 64
  • 5 / 0
Re: Следить за товаром - уведомить меня
« Ответ #24 : 20.02.2011, 22:37:05 »
Решение вот оно -> http://forum.virtuemart.net/index.php?topic=73979.0

Сделал на VirtueMart 1.1.5 всё работает как надо.
*

via82

  • Осваиваюсь на форуме
  • 42
  • 1 / 0
Re: Следить за товаром - уведомить меня
« Ответ #25 : 22.02.2011, 08:50:52 »
Решение вот оно -> http://forum.virtuemart.net/index.php?topic=73979.0

Сделал на VirtueMart 1.1.5 всё работает как надо.
А уведомление при импорте через CSVI поддерживает?
Хотелось бы чтобы уведомления отправлялись именно в момент при загрузке через CSVI, а не как описал VadeR
*

Chifu

  • Захожу иногда
  • 64
  • 5 / 0
Re: Следить за товаром - уведомить меня
« Ответ #26 : 23.02.2011, 13:40:59 »
via82, я этого не проверял, да и не думаю что то решение о котором я написал, поддерживает отправление писем покупателям, это делает уже сам VirtueMart по идеи, как только количество товара > 0.
Тот хак, всего-то помогает следить за пользователями которые вписали себя в waiting_list.

Re: Следить за товаром - уведомить меня
« Ответ #27 : 09.05.2011, 03:27:40 »
Здесь есть решение этой проблемы
Как смотреть waiting_list http://itfound.ru/17-uvedomit-menya-ili-kak-smotret-waiting-list.html
И как отправлять письмо с уведомлением и добавить второе поле к контактному емейлу
http://itfound.ru/18-virtuemart-uvedomit-menya-waiting-list-part2.html
*

SolopoV

  • Давно я тут
  • 573
  • 16 / 0
  • зеленею...
Re: Следить за товаром - уведомить меня
« Ответ #28 : 23.09.2011, 09:59:16 »
На указанных страницах приведен хак в котором есть некоторые неудобные моменты.
1. Нет наименования товара в уведомлении администратора и
2. Боди письма, в частности, в Outlook, приходит в кривой кодировке.

Кто знает что можно сделать по этому поводу?
*

kpk17

  • Захожу иногда
  • 257
  • 2 / 0
Re: Следить за товаром - уведомить меня
« Ответ #29 : 23.09.2011, 18:38:48 »
если загружать товар через cvs import то письма не отправляются тем кто ждет.
Кто решил вопрос?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Следить за ценой

Автор Иоланта

Ответов: 1
Просмотров: 1356
Последний ответ 27.11.2012, 06:52:48
от Иоланта
[Решено]Автоматическое добавление типа ко всем товаром

Автор biohan

Ответов: 1
Просмотров: 1182
Последний ответ 07.07.2011, 06:01:57
от TyT
Можно ли как то сделать модуль с этим товаром покупают

Автор zmanz

Ответов: 3
Просмотров: 2061
Последний ответ 09.06.2011, 19:03:54
от flyingspook
У меня в добавлении товара не отображаются разделы!

Автор vladcom

Ответов: 2
Просмотров: 1236
Последний ответ 17.02.2011, 22:14:01
от vladcom
Модуль "С этим товаром покупают"

Автор checrygin94

Ответов: 3
Просмотров: 2690
Последний ответ 25.12.2010, 15:29:17
от Infosakh