Автор Тема: Модуль День рождения  (Прочитано 3542 раз)

22 Январь 2014, 13:51:13
Ответ #15
  • Новичок
  • *
  • Сообщений: 29
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
SiGi, спасибо! tigran, спасибо, я так все и делала!
У меня тоже не идет письмо с ДР... посмотрите пожалуйста вложенное изображение, правильно ли я сделала? Или задача по-другому должна быть прописана? Что означают кнопки "на Е-мейл", "Отключить вывод", "В файл" ?
Или реально, если клиент не сделал покупку, то его и не поздравить никак с ДР?
22 Январь 2014, 16:37:00
Ответ #16
  • Ветеран
  • *****
  • Сообщений: 33325
  • Репутация: +26771/-0
    • Просмотр профиля
Если клиент не сделал заказ, то поздравления не будет отправлено.
В cron.php
$module = new BirthdayPresent();
$module->createTodaysVouchers();
В модуле функция отправки поздравления
public function createTodaysVouchers()
{
$users = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT DISTINCT c.id_customer, firstname, lastname, email
FROM '._DB_PREFIX_.'customer c
LEFT JOIN '._DB_PREFIX_.'orders o ON (c.id_customer = o.id_customer)
WHERE o.valid = 1
AND c.birthday LIKE \'%'.date('-m-d').'\'');
         foreach ($users as $user)
{
          ..........
Т.е если нет заказов, то клиент не будет выбран.
22 Январь 2014, 16:51:30
Ответ #17
  • Новичок
  • *
  • Сообщений: 29
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
coder, спасибо! Именно так и написано у меня. А как сделать поздравление независимым от покупки?
22 Январь 2014, 16:58:05
Ответ #18
  • Фрилансер
  • *
  • Сообщений: 176
  • Репутация: +0/-0
    • Просмотр профиля
Модуль переделать нужно, удалить все о заказе и оставить только клиентов.
22 Январь 2014, 19:01:34
Ответ #19
  • Новичок
  • *
  • Сообщений: 29
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
petros, само собой)))) боюсь лишнее удалю... мне бы подсказочку в виде кода, какие строки снести...

Повторюсь еще, что же означают кнопки "на Е-мейл", "Отключить вывод", "В файл" ? (см.изображение)
23 Январь 2014, 12:35:45
Ответ #20
  • Администратор
  • Ветеран
  • *****
  • Сообщений: 102503
  • Репутация: +34219/-0
    • Просмотр профиля
Цитировать
Повторюсь еще, что же означают кнопки "на Е-мейл", "Отключить вывод", "В файл" ? (см.изображение)
На вашем хостинге должна быть справка по работе с панелью управления сервером.
23 Январь 2014, 12:39:17
Ответ #21
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Обычно,
"на Е-мейл" - отправить отчет на почту
"Отключить вывод" - не выводить инф.
"В файл"  - сохранить в лог-файл
Лучше вам посмотреть на вашем хостинге, наверника там есть вопросы-ответы по управлению сервером.
23 Январь 2014, 12:44:17
Ответ #22
  • Модератор
  • Ветеран
  • *****
  • Сообщений: 86688
  • Репутация: +25428/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Цитировать
.. мне бы подсказочку в виде кода, какие строки снести...
Там все снести нужно. Проще новый модуль сделать.
23 Январь 2014, 16:12:18
Ответ #23
  • Новичок
  • *
  • Сообщений: 29
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Виктор, DarinSr, большое спасибо за ответы! Всё понятно)
09 Апрель 2014, 13:29:56
Ответ #24
  • Пользователь
  • **
  • Сообщений: 73
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Все таки очень хочу настроить для работы этот модуль.
При установке модуля появляется сообщение:
[PrestaShop] Fatal error in module birthdaypresent: Call to undefined method Discount::getDiscountTypes()Я так понимаю, что функции скидки в 1.5 изменены, поэтому модуль их не может найти и прекращает свою работу.
Нормально установить получилось удалив сторку 75 из основного php файла:
$discountTypes = Discount::getDiscountTypes((int)($cookie->id_lang));Модуль установился, могу зайти в настройки, но нету выбора типа подарка (скидка, сумма денег и т.д.).
Думал что так сработает, но нет, сообщение не отправилось, но скидка попыталась сгенерироваться,а именно все параметры были заданы, кроме типа и размера скидки на последнем этапе добавления ваучера. Письмо также не было отправлено, хотя крон сработал.
Подскажите пожалуйста, какую функцию и как правильно ее нужно указать, чтобы модуль работал нормально.
Еще раз выложу код birthdaypresent.php
Буду очень признателен за помощи или подсказки. Думаю многим пригодится.
if (!defined('_PS_VERSION_'))
exit;

class BirthdayPresent extends Module
{
private $_html = '';

public function __construct()
{
$this->name = 'birthdaypresent';
$this->tab = 'pricing_promotion';
$this->version = 1.0;
$this->author = 'PrestaShop';
$this->need_instance = 0;

parent::__construct();

$this->displayName = $this->l('Birthday Present');
$this->description = $this->l('Offer your clients birthday presents automatically');

}

public function getContent()
{
global $cookie, $currentIndex;

if (Tools::isSubmit('submitBirthday'))
{
Configuration::updateValue('BIRTHDAY_ACTIVE', (int)(Tools::getValue('bp_active')));
Configuration::updateValue('BIRTHDAY_DISCOUNT_TYPE', (int)(Tools::getValue('id_discount_type')));
Configuration::updateValue('BIRTHDAY_DISCOUNT_VALUE', (float)(Tools::getValue('discount_value')));
Configuration::updateValue('BIRTHDAY_MINIMAL_ORDER', (float)(Tools::getValue('minimal_order')));
Tools::redirectAdmin($currentIndex.'&configure=birthdaypresent&token='.Tools::getValue('token').'&conf=4');
}

$this->_html = '
<fieldset class="width3"><legend><img src="../modules/'.$this->name.'/logo.gif" /> '.$this->displayName.'</legend>
<p>'.$this->l('Create a voucher for customers celebrating their birthday and having at least one valid order').'</p>
<form action="'.Tools::safeOutput($_SERVER['REQUEST_URI']).'" method="post" style="margin-top: 15px;">
<label>'.$this->l('Active').'</label>
<div class="margin-form">
<img src="../img/admin/enabled.gif" /> <input type="radio" name="bp_active" value="1"'.(Configuration::get('BIRTHDAY_ACTIVE') ? ' checked="checked"' : '').' />
<img src="../img/admin/disabled.gif" /> <input type="radio" name="bp_active" value="0"'.(!Configuration::get('BIRTHDAY_ACTIVE') ? ' checked="checked"' : '').' />
<p style="clear: both;">'.$this->l('Additionally, you have to set a CRON rule which calls the file').'<br />'.Tools::getProtocol().$_SERVER['HTTP_HOST'].__PS_BASE_URI__.'modules/birthdaypresent/cron.php '.$this->l('every day').'</p>
</div>
<label>'.$this->l('Type').'</label>
<div class="margin-form">
<select name="id_discount_type">';
$discountTypes = Discount::getDiscountTypes((int)($cookie->id_lang));
foreach ($discountTypes AS $discountType)
$this->_html .= '<option value="'.(int)($discountType['id_discount_type']).'"'.((Configuration::get('BIRTHDAY_DISCOUNT_TYPE') == $discountType['id_discount_type']) ? ' selected="selected"' : '').'>'.$discountType['name'].'</option>';
$this->_html .= '
</select>
</div>
<label>'.$this->l('Value').'</label>
<div class="margin-form">
<input type="text" size="15" name="discount_value" value="'.Configuration::get('BIRTHDAY_DISCOUNT_VALUE').'" onKeyUp="javascript:this.value = this.value.replace(/,/g, \'.\'); " />
<p style="clear: both;">'.$this->l('Either the monetary amount or the %, depending on Type selected above').'</p>
</div>
<label>'.$this->l('Minimum order').'</label>
<div class="margin-form">
<input type="text" size="15" name="minimal_order" value="'.Configuration::get('BIRTHDAY_MINIMAL_ORDER').'" onKeyUp="javascript:this.value = this.value.replace(/,/g, \'.\'); " />
<p style="clear: both;">'.$this->l('The minimum order amount needed to use the voucher').'</p>
</div>
<div class="clear center">
<input type="submit" value="'.$this->l('   Save   ').'" name="submitBirthday" class="button" />
</div>
<div class="small"><sup>*</sup> '.$this->l('Required field').'</div>
</form>
</fieldset><br />
<fieldset class="width3"><legend><img src="../modules/'.$this->name.'/comment.gif" /> '.$this->l('Guide').'</legend>
<h2>'.$this->l('Develop clients\' loyalty').'</h2>
<p>'.$this->l('Offering a present to a client is a means of securing their loyalty.').'</p>
<h3>'.$this->l('What should you do?').'</h3>
<p>
'.$this->l('Keeping a client is more profitable than acquiring a new one. Thus, it is essential to make them loyal, in other words to make them want to come back to your shop.').' <br />
'.$this->l('Word of mouth is also a good way of getting new satisfied customers as an unsatisfied customer won\'t attract new ones.').'<br />
'.$this->l('There are many ways to achieve this: ').'
<ul>
<li>'.$this->l('Occasional operations: commercial rewards (personalized special offers, product or service offered), non commercial rewards (priority handling of an order or a product), pecuniary rewards (bonds, discount coupons, payback...).').'</li>
<li>'.$this->l('Sustainable operations: loyalty or points cards, which not only justify communication between merchant and client, but also offer advantages to clients (private offers, discounts).').'</li>
</ul>
'.$this->l('These operations encourage customers to buy and also to return to your online shop regularly.').' <br />
</p>
</fieldset>';
return $this->_html;
}

public function createTodaysVouchers()
{
$users = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
SELECT DISTINCT c.id_customer, firstname, lastname, email
FROM '._DB_PREFIX_.'customer c
LEFT JOIN '._DB_PREFIX_.'orders o ON (c.id_customer = o.id_customer)
WHERE o.valid = 1
AND c.birthday LIKE \'%'.date('-m-d').'\'');

foreach ($users as $user)
{
$voucher = new Discount();
$voucher->id_customer = (int)($user['id_customer']);
$voucher->id_discount_type = (int)(Configuration::get('BIRTHDAY_DISCOUNT_TYPE'));
$voucher->name = 'BIRTHDAY-'.(int)($voucher->id_customer).'-'.date('Y');
$voucher->description[(int)(Configuration::get('PS_LANG_DEFAULT'))] = $this->l('Your birthday present !');
$voucher->value = Configuration::get('BIRTHDAY_DISCOUNT_VALUE');
$voucher->id_currency = Configuration::get('PS_CURRENCY_DEFAULT');
$voucher->quantity = 1;
$voucher->quantity_per_user = 1;
$voucher->cumulable = 1;
$voucher->cumulable_reduction = 1;
$voucher->date_from = date('Y-m-d');
$voucher->date_to = strftime('%Y-%m-%d', strtotime('+1 month'));
$voucher->minimal = Configuration::get('BIRTHDAY_MINIMAL_ORDER');
$voucher->active = true;
if ($voucher->add())
Mail::Send((int)Configuration::get('PS_LANG_DEFAULT'), 'birthday', Mail::l('Happy birthday!', (int)Configuration::get('PS_LANG_DEFAULT')), array('{firstname}' => $user['firstname'], '{lastname}' => $user['lastname']), $user['email'], NULL, strval(Configuration::get('PS_SHOP_EMAIL')), strval(Configuration::get('PS_SHOP_NAME')), NULL, NULL, dirname(__FILE__).'/mails/');
else
echo Db::getInstance()->getMsgError();
}
}
}

09 Апрель 2014, 14:34:12
Ответ #25
  • Ветеран
  • *****
  • Сообщений: 105673
  • Репутация: +39553/-0
    • Просмотр профиля
    • Webstudio UwK
В prestashop 1.5 нет метода getDiscountTypes в классе Discount.
Попробуйте использовать другие методы, например,
getCustomerCartRules($id_lang, $id_customer)
Cоздание интернет сайтов Webstudio UwK
09 Апрель 2014, 19:00:29
Ответ #26
  • Пользователь
  • **
  • Сообщений: 73
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Я так понимаю, что кроме этой строчки нужно менять все функции вызова скидки в файле и заменять ее на необходимые.
Если кто-то может помочь с необходимой функцией которую нужно менять и на которую - буду благодарен. Мне необходима только процентная скидка на ДР.