Перейти к содержанию
Форум поддержки пользователей VamShop

Шаблоны писем статусов заказа


Рекомендуемые сообщения

Подскажите, кто знает.

Хочу заставить маг брать шаблон письма в зависимости от ид статуса.

Например:

template/admin/mail/russian/change_order_mail_1.txt

template/admin/mail/russian/change_order_mail_2.txt

template/admin/mail/russian/change_order_mail_3.txt

...

/admin/orders.php:


while ($orders_status = vam_db_fetch_array($orders_status_query)) {
$orders_statuses[] = array ('id' => $orders_status['orders_status_id'], 'text' => $orders_status['orders_status_name']);
$orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name'];
}
[/CODE] меняю на :
[CODE]
while ($orders_status = vam_db_fetch_array($orders_status_query)) {
$orders_statuses[] = array ('id' => $orders_status['orders_status_id'], 'text' => $orders_status['orders_status_name']);
$orders_status['orders_status_id'] = $orders_status_id;
$orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name'];
}
вместо:

$txt_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail.txt');
[/code] это:
[CODE]
$txt_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail_'.$orders_status_id.'txt');

------------

в общем как указать переменную со ID нового статуса?

-----------------

чтобы дальше не читать скажу ответ сразу:

добавляем в orders.php в строку 115 код

$newstatusid=$_POST['new_status'];

меняем 116 и 117 строки на

$html_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail_'.$newstatusid.'.html');

$txt_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail_'.$newstatusid.'.txt');

Изменено пользователем Александр
Ссылка на сообщение
Поделиться на другие сайты

То есть так:

while ($orders_status = vam_db_fetch_array($orders_status_query)) {

$orders_statuses[] = array ('id' => $orders_status['orders_status_id'], 'text' => $orders_status['orders_status_name']);

$orders_status_id = $orders_status['orders_status_id'];

$orders_status_array[$orders_status['orders_status_id']] = $orders_status['orders_status_name'];

}

$txt_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail_'.$orders_status_id.'txt');

Ссылка на сообщение
Поделиться на другие сайты

Но это не о том. Она правда не определена и так.

$orders_status_id = $orders_status['orders_status_id']; - не имеет смысла.

Ссылка на сообщение
Поделиться на другие сайты

Ну смотрите, чему у Вас она вообще равна, эта переменная.

Для пробы вообще поставьте число 1 например, да посмотрите, работает вообще Ваш подход или нет.

А уже затем смотрите, что не так с переменной.

Ссылка на сообщение
Поделиться на другие сайты

$vamTemplate->assign('ORDER_STATUS', $orders_status_array[$status]); - это как я понимаю, текущий статус.

А как взять пост...?

echo $_POST['status']; ничего не даёт.

Ссылка на сообщение
Поделиться на другие сайты

post должен работать, может просто не тот код правите?!

Там же в файле код и для списка заказов и для конкретного заказа.

Ссылка на сообщение
Поделиться на другие сайты

<?php

if (!$status){echo 'no $status';}

if (!$_POST['new_status']){echo 'no new_status';}

if (!$_POST['status']){echo 'no status';}

?>

В любом месте orders.php дают no.

Но они же как-то данные передают в базу?

Ссылка на сообщение
Поделиться на другие сайты

Я как раз отправил. Форма переправляет запрос на себя же. Меняю статус заказа, галочка отправить письмо клиенту и кнопка обновить перегружают текущую страницу со словами "Заказ номер 236 обновлён!"

По идее $_POST должен вывести данные формы при перезагрузки страницы...

Ссылка на сообщение
Поделиться на другие сайты

Значит наверное свой код не туда вставляет, обычно там же сразу идёт редирект на страницу, вот после редиректа понятно, что все POST данные сбрасываются.

Совет в-общем один, весь код уже ведь есть для примера, просто смотрите уже существующий код, как сделан.

Ссылка на сообщение
Поделиться на другие сайты

Такие вот изыскания:


echo '<tr class="dataTableContent"><td colspan="7">' . BUS_HEADING_TITLE . ': ' . vam_draw_pull_down_menu('new_status', array_merge(array(array('id' => '', 'text' => BUS_TEXT_NEW_STATUS)), $orders_statuses), '', '')
[/CODE] если я правильно понял должно передать постом [b]$_POST['new_status'][/b] SwitchCheck - это кнопка лезет в categories.js :
[CODE]
//for checking if at least one element is checked
function CheckMultiForm ()
{
var ml = document.multi_action_form;
var len = ml.elements.length;
for (var i = 0; i < len; i++)
{
var e = ml.elements[i];
if (e.name == "multi_products[]" || e.name == "multi_categories[]" || e.name == "multi_orders[]" || e.name == "multi_customers[]")
{
if (e.checked == true) {
return true;
}
}
}
alert('а’б‹аДаЕаЛаИб‚аЕ б…аОб‚б аБб‹ аОаДаИаН баЛаЕаМаЕаНб‚!\nPlease check at least one element!');
return false;
}
что проверяет данные в форме и постом передаёт в наш orders.php:

<form name="multi_action_form" action="http://vaude.localhost/admin/orders.php" method="post">
[/code] оно же :
[CODE]
echo vam_draw_form('multi_action_form', FILENAME_ORDERS,vam_get_all_get_params());

Итак, $_POST['new_status'] - это наша переменная с id статуса при редакировании формы и возврате в orders.php.

Верно ли я рассуждаю?

Ссылка на сообщение
Поделиться на другие сайты

Ну, судя по коду приведённому, да.

Вы ж посмотрите, в письмо вставляется ведь новый статус заказа, посмотрите как эта метка для статуса определяется.

Наверняка ведь уже есть готовый код и писать свой даже не надо.

Ссылка на сообщение
Поделиться на другие сайты

Готовый, это строка, где определяется


vam_draw_pull_down_menu('new_status', array_merge(array(array('id' => '', 'text' => BUS_TEXT_NEW_STATUS)), $orders_statuses)
[/CODE]

[b]new_status[/b],

то есть для формы [b]- $_POST['new_status'][/b].

А он эхом : [b]echo $_POST['new_status']; [/b]

ничего не пишет.

Ну или так: [b]echo $_POST['new_status'].'111';[/b]

пишет только [b]111[/b].

Ссылка на сообщение
Поделиться на другие сайты

Да не будет он post писать, там же редирект сразу идёт, если я правильно помню.

Вы ж смотрите как определяется шаблон письма, что в него вставляется и как.

Ссылка на сообщение
Поделиться на другие сайты

Это где-то наверху.


if (isset($_POST['submit']) && isset($_POST['multi_orders'])){
if (($_POST['submit'] == BUTTON_SUBMIT)&&(isset($_POST['new_status']))&&(!isset($_POST['delete_orders']))){ // Fair enough, let's update ;)
$status = vam_db_prepare_input($_POST['new_status']);
[/CODE]

До этих строк присвоил [b]$new_status = $_POST['new_status'];[/b]

Но эхо по [b]$new_status, [/b]тоже пустое.

Ссылка на сообщение
Поделиться на другие сайты

Я сейчас не шаблон письма рассматриваю. С ним всё просто:


$html_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail.html');
$txt_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail.txt');
[/CODE] Выдумывать ничего не надо:
[CODE]
$txt_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail_'.$new_status.'.txt');

И имеем change_order_mail_1.txt, change_order_mail_2.txt итд.

Для этого надо определить ID нового статуса.

Он передаётся постом - $_POST['new_status'];

Если присвоить его значение в начале документа новой переменной, то её можно подставить в качестве $new_status.

Ссылка на сообщение
Поделиться на другие сайты

Просто что я вижу:

форма


<form name="multi_action_form" action="http://site.localhost/admin/orders.php" method="post">
...
<tr class="dataTableContent"><td colspan="7">Смена статуса: <select name="new_status"><option value="" SELECTED>Выберите новый статус...
[/CODE]

Которая по name передаёт в orders.php [b]$_POST['new_status'];[/b]

И который далее в форме обрабатывается.

Но даже в до обработки переменной $_POST['new_status'] в документе orders.php [b]echo $_POST['new_status']; ничего не выводит ([/b]при редактировании поля формы [b]<select name="new_status">[/b])

Ссылка на сообщение
Поделиться на другие сайты

добавляем в orders.php в строку 115 код

$newstatusid=$_POST['new_status'];

меняем 116 и 117 строки на

$html_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail_'.$newstatusid.'.html');


$txt_mail = $vamTemplate->fetch(CURRENT_TEMPLATE.'/admin/mail/'.$_SESSION['language'].'/change_order_mail_'.$newstatusid.'.txt');[/CODE]

[i][b][sub]orders.php - перезалил на нормальный, проверено, везде работает.[/sub][/b][/i]

orders.php

Ссылка на сообщение
Поделиться на другие сайты
  • 4 months later...

в 321 и 322,323 строке


$newstatusid=$_POST['status'];
[/CODE]

короче, у кого пустое письмо приходило, если не массово отсылать статусы, а через кнопку редактировать, поштучно.

115 строка в посте - [b]new_status[/b]

orders.php

Ссылка на сообщение
Поделиться на другие сайты
×
×
  • Создать...