Реализовывать будем через eForm.
Создаем обычную форму отправки, и в шаблон формы вставляем невидимое поле (не скрытое, а невидимое)
<input name="prod_id" value="[*id*]" style="display:none;">
Где в значении должен быть id документа-товара.
Также в вызов eForm добавляем такие строчки: &eFormOnBeforeMailSent=`oneclick_name` &eFormOnMailSent=`oneclick` (они служат для вызова функций при определенных событиях: до отправки формы и после отправки формы). В итоге у нас должно получиться что-то вроде этого:
[!eForm?
&formid=`shopOrderFormOneClick`
&tpl=`oc_shopOrderForm`
&report=`oc_shopOrderReport`
&to=`admin@site.com`
&gotoid=`115`
&subject=`Новый заказ в 1 клик`
&vericode=`0`
&eFormOnBeforeMailSent=`oneclick_name`
&eFormOnMailSent=`oneclick`
!]
Далее создаем сниппет, называем его OneClick, вставляем в него нижеприведенный код и сам вызов сниппета вставляем над вызовом eForm.
<?php
if (!function_exists('oneclick_name')
{function oneclick_name(&$fields)
{
global $modx;
$id = $fields['prod_id'];
if (!is_numeric($id)) return;
$url = $modx->makeUrl($id, '', '', 'full');
$pagetitle = $modx->db->getValue('Select `pagetitle` from '.$modx->getFullTableName('site_content').' where `id`='.$id);
$price = $modx->db->getValue('Select `value` from '.$modx->getFullTableName('site_tmplvar_contentvalues').' where `contentid`='.$id.' and `tmplvarid`=6');
$fields['orderData'] = '<p><a href="'.$url.'" target="_blank">'.$pagetitle.'</a> - '.$price.' руб.</p>';
}
}
if (!function_exists('oneclick')
{
function oneclick(&$fields)
{
global $modx;
if ($modx->db->getRecordCount($modx->db->query("show tables from ".$modx->db->config['dbase']." like '".$modx->db->config['table_prefix']."manager_shopkeeper'"))==0) return;
$id = $fields['prod_id'];
if (!is_numeric($id)) return;
$short_txt = is_array($fields) ? $modx->db->escape(serialize($fields)) : '';
$userLoggedIn = $modx->userLoggedIn();
$userId = $userLoggedIn!==false ? $userLoggedIn['id'] : 0;
$short_txt = is_array($fields) ? $modx->db->escape(serialize($fields)) : '';
$price = $modx->db->getValue('Select `value` from `modx_site_tmplvar_contentvalues` where `contentid`='.$id.' and `tmplvarid`=6');
$arr = array(array('0'=>$id,'2'=>$price,'1'=>1,'catalog'=>0));
$userLoggedIn = $modx->userLoggedIn();
$userId = $userLoggedIn!==false ? $userLoggedIn['id'] : 0;
$ins_fields = array(
'short_txt' => $short_txt,
'content' => $modx->db->escape(serialize($arr)),
'allowed' => 'all',
'addit' => '',
'price' => $price,
'currency' => 'руб.',
'date' => date("Y-m-d H:i:s"),
'note' => 'Заказ в 1 клик.',
'email' => $fields['email'],
'phone' => $fields['phone'],
'payment' => '',
'tracking_num' => '',
'status' => 1,
'userid' => $userId
);
$order_id = $modx->db->insert($ins_fields, $modx->getFullTableName('manager_shopkeeper'));
$modx->invokeEvent('OnSHKsaveOrder', array('id' => $order_id,'purchases' => serialize($arr)));
$modx->invokeEvent('OnSHKChangeStatus',array('order_id'=>$order_id,'status'=>1));
}
}
Первая функция создает плейсхолдер [+orderData+] с наименованием и ценой для вставки в письмо. Вторая функция записывает этот заказ в базу.
Не забываем поправить в определении цены нужный id тв-параметра
Собственно и все)
Если есть вопросы — пишите, постараюсь ответить.
Также привожу свои чанки, но они просто для примера, можете творить свои
Чанк oc_shopOrderForm
<form method="post" action="[~[*id*]~]" id="shopOrderFormOneClick" class="form-horizontal">
<input type="text" name="prod_id" value="[*id*]" id="prod_id" style="display:none;">
<input type="hidden" name="formid" value="shopOrderFormOneClick">
<input type="text" name="name" value="" required="required" placeholder="Ваше имя" class="form-control">
<input type="tel" name="phone" value="" required="required" placeholder="номер телефона" class="form-control" data-mask="+7(999)999-99-99">
<textarea name="comment" id="comment" class="form-control" placeholder="Комментарий"></textarea>
<div style="text-align:center; margin-top:20px;">
<input type="submit" class="button btn-bg btn btn-success buttblue" value="завершить покупку →" >
</div>
</form>
Чанк oc_shopOrderReport
<p>В интернет-магазине сделан заказ.</p>
<b>Состав заказа:</b>
[+orderData+]
<br /><br />
<b>Данные покупателя:</b><br />
<table cellpadding="3">
<tr><td>Ф.И.О.:</td><td>[+name+]</td></tr>
<tr><td>Телефон:</td><td>[+phone+]</td></tr>
<tr><td>Комментарий:</td><td>[+comment+]</td></tr>
</table>
Алексей Воа 30.07.2017 23:55 #
Алексей Либер 04.08.2017 08:41 #
Алексей Либер 09.09.2018 15:20 #
Поправленный код сниппета OneClick:
Сергей Пшеничный 21.03.2019 13:22 #