1 Отредактировано Илья (15.06.2016 11:38:43)

Тема: Расширений полей(Админная часть)

Добрый день. Подскажите пожалуйста, что я забыл сделать, в базу поле добавилось. Но где оно должно было вывестись на сайте?
И почему я пытаюсь получить его из базы путем

Скидка: <span class="summary">{$order_data.mystock}</span>

Но ничего не выводится?

http://s019.radikal.ru/i643/1606/bc/4b009512f393t.jpg

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

class Handlers extends \RS\Event\HandlerAbstract
{
    function init()
    {
        $this
            ->bind('orm.init.shop-order');

    }

    // @param \Shop\Model\Orm\Order $order - обьект заказа
    public static function ormInitShopOrder (\Shop\Model\Orm\Order $order) {

        $order->getPropertyIterator()->append(array(
            'mystock' => new OrmType\Varchar(array(
                    'maxLength' => '255',
                    'description' => t('Скидка'),
            )),

        ));    
    }
        
}

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

Re: Расширений полей(Админная часть)

Дело всё в том, что заказ это практически единственный ORM объект, который обладает своим уникальным шаблоном для редактирования в виду жёсткой специфики. И там жестко прописан вывод полей в самом шаблоне.
Т.е. если подменить шаблон на свой в своей теме оформления, то можно вывести Ваше поле.

Сам шаблон находится здесь:
/modules/shop/view/orderview.tpl
Его можно подменить для своей темы скопировав в :
/templates/Ваша тема/moduleview/shop/orderview.tpl

Скидка: <span class="summary">{$order_data.mystock}</span>

Ну всё правильно. Если вы сделаете var_dump($order_data), то увидите, что это объект не \Shop\Model\Orm\Order, который Вы расширяете, а \Shop\Model\Orm\OrderItem. Это разные вещи. У вас объект заказа в Вашем шаблоне находится в переменной $order

3 Отредактировано Илья (16.06.2016 10:20:14)

Re: Расширений полей(Админная часть)

Вообщем сделал следующим образом. Сделал модуль на расширение новых полей, скидка и новая цена. И из totalcost вычитаю скидку, и полученный результат записываю в ячейку новая цена. Сделал что бы значение поле скидка не записывалось в базу. Сейчас выведу, новую  цену в админку где мне нужно. Вариант конечно не идеальный но пока что пойдет. 

Осталось у меня пару вапросов:
1. Что бы данные передавались в базу, пришлось добавить в файл orderctrl.inc.php после , 'user_phone'  добавил , 'mystock'. Можно ли как то без этого обойтись?

2. Как сделать что бы в конце суммы добавлялось .руб и что бы выводилось 1 999, а не 1999

P.S. Будем ждать глобальное обновление корзины smile

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

Re: Расширений полей(Админная часть)

1. Что бы данные передавались в базу, пришлось добавить в файл orderctrl.inc.php после , 'user_phone'  добавил , 'mystock'. Можно ли как то без этого обойтись?

Поле user_phone надо поменять, т.е. оно уже зарезервировано.
Можно подвесится на событие перед записью объекта заказа, и из POST вытащить значения Ваших полей, чтобы их записать.
Для этого нужен хук orm.beforewrite.КОРОТКОЕ_ИМЯ_ORM_ОБЪЕКТА
А именно:
orm.beforewrite.shop-order
http://readyscript.ru/dev-manual/dev_ho … hooks_list
И в этой функции произвести нужные действия.

2. Как сделать что бы в конце суммы добавлялось .руб и что бы выводилось 1 999, а не 1999

Просто в шаблоне написать руб.

и что бы выводилось 1 999, а не 1999

Есть модификатор format_price. Например если есть переменная $price, то вывод будет такой:

{$price|format_price}

5 Отредактировано Илья (16.06.2016 17:21:04)

Re: Расширений полей(Админная часть)

Не могли бы на счет echo $_POST['mystock'];подробнее подсказать?
Данный хук у меня уже используется, что бы вычитать из поля итого.

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

Re: Расширений полей(Админная часть)

Илья пишет:

Не могли бы на счет echo $_POST['total_stock'];подробнее подсказать?
Данный хук у меня уже используется, что бы вычитать из поля итого.

Что конкретно у Вас не получается?

7 Отредактировано Илья (16.06.2016 17:33:39)

Re: Расширений полей(Админная часть)

Закусило Александр пишет:
Илья пишет:

Не могли бы на счет echo $_POST['mystock'];подробнее подсказать?
Данный хук у меня уже используется, что бы вычитать из поля итого.

Что конкретно у Вас не получается?

$mystock = $_POST['mystock']; вот я вытаскиваю значение поля, а дальше как мне занести значение в бд?

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

Re: Расширений полей(Админная часть)

Ну если Вы внимательно читали документацию, то Вам в этом методе приходит массив в параметре. Где в этом массиве есть ключ orm, который хранит объект ORM для которого Вы вызываете событие.
Например:

/**
* Событие перед записью объекта в данном случае заказа в БД
*
* @param array $data - массив данных
*/
public static function ormBeforeWriteShopOrder($data)
{
     /**
     * @var \Shop\Model\Orm\Order
     */
     $order = $data['orm']; //Получаем объект заказа

     if (isset($_POST['mystock'])){ //Если нужное поле пришло из запроса
          $order['mystock'] = \RS\Http\Request::commonInstance()->request('mystock', TYPE_STRING); //Присваеваем из поста значение с экранированием.
     }
     
}

Запись произойдёт т.к. модифицировать объект объявленного класса можно редактировать из любого места (В соответствии с правилами PHP).