1 Отредактировано Илья (09.02.2017 16:35:42)

Тема: Добавление поля в таблицу order_address [Решено]

Здравствуйте.
Добавил новое поле в таблицу order_address
http://storage5.static.itmages.ru/i/16/1123/s_1479886461_9331343_1f329a06a6.png

Если через админку заказа вводить данные в это поле
http://storage1.static.itmages.ru/i/16/1123/s_1479886506_9957165_dd76c187b1.png

то данные заносятся
http://storage3.static.itmages.ru/i/16/1123/s_1479886525_8672629_ba83d93670.png

А при оформлении заказа не заносятся
http://storage6.static.itmages.ru/i/16/1123/s_1479886577_8525466_b1a05b237f.png

Подскажите что нужно указать в своем модуле?Наверное еще какой то хук?

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

class Handlers extends \RS\Event\HandlerAbstract
{
function init()
    {
        $this
            ->bind('orm.init.shop-address')
            ->bind('orm.beforewrite.shop-address');
    }
    
   
    public static function ormInitShopAddress (\Shop\Model\Orm\Address $address )
    {
        $address->getPropertyIterator()->append(array(
            'person' => new OrmType\Varchar(array(
                    'maxLength' => '100',
                    'description' => t('Персона'),
            )),

        ));
    } 

    /**
    * Действия перез записью заказа в БД
    */
    public static function ormBeforeWriteShopAddress ($data) {
        
        /**
        * @var \Shop\Model\Orm\Order
        */ 
        $address = $data['orm'];//Получаем объект заказа
        $flag = $data['flag'];//флаг

                
        if (isset($_POST['person'])){ 
            $address['person'] = \RS\Http\Request::commonInstance()->request('person', TYPE_STRING); 
        }
        // var_dump($address);
        

    }
 
}

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

person/config/handlers.inc.php

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

class Handlers extends \RS\Event\HandlerAbstract
{
function init()
    {
        $this
            ->bind('orm.init.shop-address')
            ->bind('orm.beforewrite.shop-address');
    }
    
   
    public static function ormInitShopAddress (\Shop\Model\Orm\Address $address )
    {
        $address->getPropertyIterator()->append(array(
            'person' => new OrmType\Varchar(array(
                    'maxLength' => '100',
                    'description' => t('Получатель'),
            )),

        ));
    } 

    /**
    * Действия перез записью заказа в БД
    */
    public static function ormBeforeWriteShopAddress ($data) {
        
        /**
        * @var \Shop\Model\Orm\Order
        */ 
        $address = $data['orm'];//Получаем объект заказа
        $flag = $data['flag'];//флаг

                
        if (isset($_POST['person']) || isset($_POST['addr_person'])){ 
            $address['person'] = \RS\Http\Request::commonInstance()->request('person', TYPE_STRING); 
        }         
        

    }
 
}

person/config/file.inc.php

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


class File extends \RS\Orm\ConfigObject
{
   
    
}

person/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: Добавление поля в таблицу order_address [Решено]

Оно не относится к оформлению заказа. Это же объект адреса. В админ. панели когда указываете адрес и нажимаете сохранить отправляются данные на сохранение адреса. А не сохраняется он потому, что в методе actionDeliveryDialog в контроллере /shop/controller/admin/orderctrl.inc.php там сохраняются конкретные поля. Тут можно тремя методами поступить перегрузить этот файл через .my.inc.php. Либо написать обращение в поддержку, чтобы добавили поддержку сохранения и других полей. Ну и третий подвесится на хук перед сохранением объекта адреса и проверить есть ли в посте данные по персоне и если есть, то присвоить адресу.

orm.beforewrite.shop-address

3

Re: Добавление поля в таблицу order_address [Решено]

Закусило Александр пишет:
orm.beforewrite.shop-address

Как раз пробовал третьим вариантом, что то не получается. Код что я выложил выше, там этот хук использую. Но как происвоить адресу?

if (isset($_POST['person'])){ 
            $address['addr_person'] = \RS\Http\Request::commonInstance()->request('addr_person', TYPE_STRING); 
        }

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

Re: Добавление поля в таблицу order_address [Решено]

А почему Вы в POST проверяете person? Какое у Вас имя поля, которое хранит персону?

5

Re: Добавление поля в таблицу order_address [Решено]

Блин точно. Но почему заносится пустое значение? Т.е. в таблице NULL пропало и теперь просто пустая ячейка

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

Re: Добавление поля в таблицу order_address [Решено]

Смотрите что у Вас в POST находится через var_dump.

7 Отредактировано Илья (23.11.2016 12:59:06)

Re: Добавление поля в таблицу order_address [Решено]

там все норм как раз таки var_dump($_POST['addr_person']); string(14) "персона"

if (isset($_POST['person']) || isset($_POST['addr_person'])){ 
            $address['person'] = \RS\Http\Request::commonInstance()->request('person', TYPE_STRING); 
        }

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

Re: Добавление поля в таблицу order_address [Решено]

И где у Вас записывается addr_person из POST ?

9

Re: Добавление поля в таблицу order_address [Решено]

Закусило Александр, блин моя не внимательность, прошу прощения

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