1 Отредактировано Илья (09.02.2017 15:02:33)

Тема: Обновление профиля пользователя при оформлении заказа [Решено]

Добрый день, скажите реально ли сделать такое?
Пользователь(зарегистрированный) оформляет заказ, там будет поле "номер паспорта" он его заполняет и данные заносятся в его профиль?в ячеку "passport"

Если я буду делать это доп. модулем мне нужен этот хук orm.beforewrite.shop-order? А в хуке что ? запрос на обновление ячейки в таблице users?

Создаем собственный модуль

passport/config/handlers.inc.php

<?php
namespace Passport\Config;
use \RS\Orm\Type as OrmType;

class Handlers extends \RS\Event\HandlerAbstract
{
function init()
    {
        $this->bind('orm.afterwrite.shop-order');
    }
    
    public static function ormAfterwriteShopOrder ($data) 
    {
        /**
        * @var \Shop\Model\Orm\Order
        */ 
        $order = $data['orm'];//Получаем объект заказа
        $flag = $data['flag'];//флаг
        
        if (!empty($order['userfields_arr']['passport'])) {
        $user = $order->getUser();
        $user['passport'] = $order['userfields_arr']['passport']; //В userfields_arr - находятся значения кастомных полей, добавленных в настройках модуля админки.
        $user->update();
        }
    }
 
}

passport/config/file.inc.php

<?php
namespace Passport\Config;
use \RS\Orm\Type;


class File extends \RS\Orm\ConfigObject
{
   
    
}

passport/config/module.xml

<?xml version="1.0" encoding="utf-8"?>
<config>
    <defaultValues>    
        <name multilanguage="true">Добавления поля паспорт</name>
        <description multilanguage="true">Добавления поля паспорт</description>        
        <version>1.0.0.0</version>
        <author>My mod</author>      
    </defaultValues>
</config>

Повысить оценку Понизить оценку

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Здравствуйте! Зайдите в настройки модуля "Магазин", там можно добавить дополнительные поля к заказу штатно. Или в настройках модуля "Пользователи" доступны дополнительные поля для профиля.

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Вам надо, чтобы и у него в профиле было обязательно?

4 Отредактировано Илья (29.08.2016 17:09:47)

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Закусило Александр, Да именно так. В профиле то оно сейчас есть(Благодаря установке модуля "Акт, счет, договор для заказа в PDF"). Вот хотелось бы еще при оформлении заказа, что бы можно было его заполнять

Повысить оценку Понизить оценку

5 Отредактировано Ярослав (29.08.2016 16:56:20)

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Сейчас данное поле стало очень актуально. Многие ТК требуют паспортные данные получателя при отправке (Деловые линии, ПЭК)

6 Отредактировано Илья (29.08.2016 17:08:28)

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Ярослав, Вы совершенно правы. Поэтому хотелось бы, что бы боле "Номер пасспорта" присутствовало и в профиле и при оформлении заказа

Повысить оценку Понизить оценку

7 Отредактировано Закусило Александр (29.08.2016 20:30:43)

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Ну тогда Вам надо вешаться на orm.init.shop-order и добавить там поле паспорта.
А в самих шаблонах address.tpl и profile.tpl Вашей темы добавить поле как и все остальные там выводятся.
Видео урок по добавлению полей есть у меня в видео уроках:
https://www.youtube.com/watch?v=KoF2IyG … mp;index=1

8 Отредактировано Илья (30.08.2016 09:24:29)

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Закусило Александр, Но если я подвешусь на orm.init.shop-order то поле добавиться, в таблице order, а мне нужно что бы оно было в таблице users. И вот у меня возникает вопрос, как мне делать запись в таблицу users при оформлении заказа

Повысить оценку Понизить оценку

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Ой. Прошу прощения, точно. orm.init.users-user, что-то перепутал под конец дня smile

10 Отредактировано Илья (30.08.2016 11:50:33)

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Но этого же мало, нужно добавить запрос на запись в таблицу users при оформлении заказа?

<?php
namespace Passport\Config;
use \RS\Orm\Type as OrmType;

class Handlers extends \RS\Event\HandlerAbstract
{
function init()
    {
        $this
            ->bind('orm.init.users-user');
    }
    
   
    public static function ormInitUsersUser (\Users\Model\Orm\User $user) 
    {
        $user->getPropertyIterator()->append(array(
            'user_passport' => new OrmType\Varchar(array(
                    'maxLength' => '50',
                    'description' => t('Номер паспорта'),
            )),

        ));
    } 
 
}

address.tpl

<tr>
                    <td class="key">Номер паспорта:</td>
                    <td class="value">
                        <input name="user_passport" value="" maxlength="255"  size="64" type="text" />
                    </td>
                </tr>

Повысить оценку Понизить оценку

11

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Общий алгоритм должен быть такой.

1. Создаете дополнительное поле через настройки модуля магазин для заказа.
2. Затем навешивайтесь на событие orm.afterwrite.shop-order, и обновите поле user_passport у объекта пользователя

Кол в обработчике afterwrite заказа, будет схематично такой:

$user = $order->getUser();
$user['ПОЛЕ ПАССПОРТА В БД ЮЗЕРА'] = $order['userfields_arr']['АЛИАС ПОЛЯ ПАСПОРТА ЗАКАЗА']; //В userfields_arr - находятся значения кастомных полей, добавленных в настройках модуля админки.
$user->update();

Повысить оценку +1 Понизить оценку

12

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Спасибо все получилось. Скажите а без создания дополнительного поля через модуль "Магазин" ни как нельзя обойтись?

Повысить оценку Понизить оценку

Re: Обновление профиля пользователя при оформлении заказа [Решено]

Данные не бывают из неоткуда