Получение полей покупателя в бэкенде Есть решение
Как в бэкенде в любом месте (на любой странице) получить массив полей покупателя зная order.id? Имею ввиду те поля, которые находятся в Настройки->Оформление заказа->Контактная информация.
{shipping_address} выводится без проблем. А вот {$customer.name} и другие поля - пустые.
9 ответов
Также см. waContact.
Спасибо, Михаил.
Если я правильно понял, нужно сделать хелпер из Вашего кода:
<?php
class shopCustom
{
public static function getCusromerFileds()
{
$order_model = new shopOrderModel();
$order = $order_model->getById($order_id);
$customer = new waContact($order['contact_id']);
$customer_name = $customer->get('name');
}
}
И получать поля, например, так: {$fields = shopCustom::getCustomerFields($order.id)}? {$fields} будет содержать массив полей?
Сделал так, обновил кеш, но ничего не выводится...
Я бы сделал так, например:
Спасибо, Сергей. Но я к сожалению нуб в php. Не знаю как ваш и Михаила коды притулить, чтобы работало...
Дополню свой вопрос.
У меня есть страница. На ней с помощью $order.id я могу получить айди заказа.
Мне нужно получить поля покупателя (ИНН, КПП и прочие, которые созданы в Настройки->Оформление заказа->Контактная информация).
Все это нужно для печатной формы счета покупателю, чтобы его данные автоматически подтягивались в печатную форму.
Не на 100% уверен, но попробуйте так. Поля заполненные при оформлении должны быть
shopCustom.class.php
Шаблон:
Спасибо, Сергей!
Сделал, но такой код выводит только стандартные поля (и прочую полную информацию о заказе), которые есть по умолчанию (имя, фамилия, телефон, почта и т.п.).
А вот вновь созданных (ИНН, КПП, ОГРН) почему-то нет. Однако, эти поля существуют и заполнены при редактировании заказа.
Также эти поля есть в личном кабинете пользователя в разделе "Мой профиль" и могут быть отредактированы.
А так это не поля заказа. Я-то увидел, что они заполняются при оформлении заказа...
Тогда да, надо контакт искать и его поля выдергивать.
Просто то, что посетитель в своих контактах наредактирует, к заказу оформленному уже не относится — мало-ли на какую фирму он оформил заказ, сегодня одна, завтра другая...
"При редактировании заказа" имеете в виду "редактирование контакта" или именно "редактирование заказа" ? :)
В общем, немного почитал про php...
Для реализации моей задачи нужно сделать следующее:
1. Сделать пользовательский хелпер. Для этого в папке /wa-apps/shop/lib/classes создаем свой класс. Например, я создал "shopCustomerFields.class.php".
2. Теперь редактируем этот файл:
<?php
class shopCustomerFields
{
public static function getCustomer($order_id)
{
$order_model = new shopOrderModel();
$order = $order_model->getById($order_id);
$customer = new waContact($order['contact_id']);
$fields = array(
"firstname" => $name = $customer->get('firstname'),
"lastname" => $name = $customer->get('lastname'),
"phone" => $name = $customer->get('phone'),
"email" => $name = $customer->get('email', value),
"company" => $name = $customer->get('company'),
"ogrn" => $name = $customer->get('ogrn'),
"inn" => $name = $customer->get('inn'),
"kpp" => $name = $customer->get('kpp'),
);
return $fields;
}
}
Нам нужно заранее знать id полей, которые мы хотим получить. id полей - это 'firstname', 'lastname', 'inn' и т.п. в строчках вида "$customer->get('firstname')".
Чтобы узнать эти id придется вывести их в корзину и с помощью просмотра кода выяснить их http://joxi.ru/J2bN5ezF64xB26. Другого способа узнать id полей я не нашел...
Не забываем очистить кеш после завершения редактирования файла. Также этому файлу нужно дать права 644, а также группу и пользователя указать те же, что у вас стоят для других файлов в этой папке.
3. Выводим код на странице, где работает {$order.id}. У меня в данном случае это страница печати счета. Сам код такой:
{$fields = shopCustomerFields::getCustomer($order.id)}
4. Далее включаем вардамп и смотрим значения полей:
<pre>{var_dump($fields)}</pre>
Получаем что-то вроде такого - http://joxi.ru/DmB1EXYHLNdRrP
5. Ну и дальше все просто. Вставляем нужные поля в нужные места. Например, значение поля ИНН будет выглядеть так:
{$fields.inn}
Не знаю, насколько это качественный и правильный код, но у меня работает и мою задачу полностью решает.
Спасибо огромное Михаилу Ушенину и Сергею Родовниченко!