1

Тема: Вопрос по доп полям.

Добрый день.
В запросе нужно вытянуть данные из ячейки userfields, где они находятся в сериализованном виде.

Выбираю так

$q->select = "A.userfields";

Вывожу так

new TableType\Text('userfields', t('ТК')),

Что получаю:
a:3:{s:2:"tk";s:25:"Байкал сервис";}

Подскажите как правильно обратиться, что бы получить на выходе
Байкал сервис

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

2 Отредактировано Закусило Александр (16.09.2016 16:29:48)

Re: Вопрос по доп полям.

Т.к. данные сериализованные, то их нужно предварительно рассериализовать.
Для этого мы можем использовать тип колонки "Пользовательская функция" (Userfunc).

new TableType\Userfunc('userfields', t('ТК'), function($value){
     $unserialized_array = @unserialize($value);
     var_dump($unserialized_array); //Это здесь, чтобы понять что будет в итоге
     //return возвратнужногомнезначения; //Потом расскомментировать.
}),

3 Отредактировано Илья (16.09.2016 17:38:49)

Re: Вопрос по доп полям.

Закусило Александр, Спасибо получилось. А еще вопрос:
Что нужно сделать что бы вывести это в html таблицу(как это сделано с печатными формами)

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

Re: Вопрос по доп полям.

Что нужно сделать что бы вывести это в html таблицу(как это сделано с печатными формами)

Распишите более подробно. Где, что куда?

5

Re: Вопрос по доп полям.

Создал отдельную страницу в модуле по следующему пути http://ready.local/admin/waybill-myctrl/
http://storage6.static.itmages.ru/i/16/0920/s_1474353157_4010713_5fcb387342.png
Скажите как мне сделать такую же страницу чисто на html(без css)?Пример на скриншоте 2

Скриншот 2(как сделать так же)
http://storage5.static.itmages.ru/i/16/0920/s_1474348551_7033850_c95bfbec2e.png

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

Re: Вопрос по доп полям.

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

Там URL примерно такой:
http://domain/admin/shop-orderctrl/?do=printForm&order_id=221&type=deliverynote

Соответственно его можно сформировать через getAdminUrl у объекта роутера

{$router->getAdminUrl('действие do', массив параметров, 'контроллер')}
//Т.е.
{$router->getAdminUrl('printForm', ['order_id'=>Вашid, 'type'=>'deliverynote'], 'shop-orderctrl/')}

2. Можно ли сюда вывести два поля?
new TableType\Text('name', 'user_fio', t('Имя')),

У вас там есть по идее весь объект заказа. У вас же к нему поля?

7

Re: Вопрос по доп полям.

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

2. Можно ли сюда вывести два поля?
new TableType\Text('name', 'user_fio', t('Имя')),

У вас там есть по идее весь объект заказа. У вас же к нему поля?

name к таблице users, user_fio к таблице order
Если я запишу их так, то работает
new TableType\Text('name',  t('Имя')),
new TableType\Text('user_fio', t('Имя')),

Если так, то выдает ошибку
new TableType\Text('name', 'user_fio', t('Имя')),

Warning: Invalid argument supplied for foreach() in Z:\home\ready.local\www\core\rs\html\table\type\abstracttype.inc.php on line 32

Warning: array_replace_recursive() [function.array-replace-recursive]: Argument #2 is not an array in Z:\home\ready.local\www\core\rs\html\table\type\abstracttype.inc.php on line 41

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

Re: Вопрос по доп полям.

Если так, то выдает ошибку
new TableType\Text('name', 'user_fio', t('Имя')),

Если Вы воспользуетесь подсказками в Вашей IDE(CTRL+Пробел, если Вы конечно ей пользуетесь), то она Вам подскажет, что:

new TableType\Text('ИМЯ КОЛОНКИ В ЗАПРОСЕ к БД', 'НАИМЕНОВАНИЕ КОЛОНКИ ДЛЯ ВЫВОДА В АДМИН ПАНЕЛИ', 'Массив с параметрами отвечающими за отображение'),

Конечно у Вас будет ругаться, что третий аргумент не массив.

name к таблице users, user_fio к таблице order
Если я запишу их так, то работает
new TableType\Text('name',  t('Имя')),
new TableType\Text('user_fio', t('Имя')),

Вы это в своём контроллере делаете? Если да то, данные не берутся из неоткуда. Если Вы запросом обращаетесь к таблице заказов у неё поля name нет. То оно может появится только в том случае если вы либо подзапросом, либо join-ом прибавите колонки из другой таблицы. Вы это сделали?

9 Отредактировано Илья (21.09.2016 16:05:27)

Re: Вопрос по доп полям.

вот код из контроллера

function actionOrdersReports()
    {
        return $this->result->setTemplate('orders_waybill.tpl');
        
    }

если вставляю в файле orders_waybill.tpl

{assign var=delivery value=$order->getDelivery()}
{assign var=address value=$order->getAddress()}
{assign var=cart value=$order->getCart()}
{assign var=order_data value=$cart->getOrderData(true, false)}
{assign var=products value=$cart->getProductItems()}
{assign var=user value=$order->getUser()}

Получаю ошибку, скажите как их объявить?
Call to a member function getDelivery() on a non-object in

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

10 Отредактировано Закусило Александр (21.09.2016 16:09:05)

Re: Вопрос по доп полям.

function actionOrdersReports()
{
     return $this->result->setTemplate('orders_waybill.tpl');
}

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

function actionOrdersReports()
{
     //Здесь подгрузить в переменную $order нужное. Судя по всему объект заказа.
     $this->view->assign(array(
         'order' =>$order  //В результате переменная $order появится в шаблоне
     ))
     return $this->result->setTemplate('orders_waybill.tpl');
}

11 Отредактировано Илья (21.09.2016 17:53:55)

Re: Вопрос по доп полям.

Но как мне в этом файле вывести все заказы, а не только один заказ?

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

Re: Вопрос по доп полям.

Нужно сделать запрос к БД. И получить объекты заказа.

function actionOrdersReports()
{
     $orders = \RS\Orm\Request::make() //Запрос к БД и получение объектов заказа
                           ->from(new \Shop\Model\Orm\Order())
                           ->where(array(
                                   'site_id' => \RS\Site\Manager::getSiteId()
                           ))->objects();
     
     $this->view->assign(array(
         'orders' =>$orders  //В результате переменная $orders появится в шаблоне
     ))
     return $this->result->setTemplate('orders_waybill.tpl');
}

И передать точно также в шаблон.

13 Отредактировано Илья (22.09.2016 11:27:09)

Re: Вопрос по доп полям.

А что теперь использовать взамен, потому что теперь ругается на них? Я что то не нашел, что вместо этого использовать теперь

{assign var=delivery value=$order->getDelivery()}
{assign var=address value=$order->getAddress()}
{assign var=cart value=$order->getCart()}
{assign var=order_data value=$cart->getOrderData(true, false)}
{assign var=products value=$cart->getProductItems()}
{assign var=user value=$order->getUser()}

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

Re: Вопрос по доп полям.

Ну если вы передали в шаблон массив из объектов заказов, а в шаблоне у Вас обработка одного заказа, то логично, что нужно перебрать заказы, чтобы в цикле у Вас был один нужный заказ.

{if !empty($orders)} {* Проверяем есть ли заказы *}
   {foreach $orders as $order} {* Циклим чтобы вытащить каждый заказ отдельности *}
       {assign var=delivery value=$order->getDelivery()}
       {assign var=address value=$order->getAddress()}
       {assign var=cart value=$order->getCart()}
       {assign var=order_data value=$cart->getOrderData(true, false)}
       {assign var=products value=$cart->getProductItems()}
       {assign var=user value=$order->getUser()}
   {/foreach}
{/if}

15 Отредактировано Илья (22.09.2016 16:17:57)

Re: Вопрос по доп полям.

Скажите, а как мне теперь на получившейся странице http://ready.local/admin/waybill-myctrl … ersReports сделать так, что бы там не применялось css и админской шапки не было?
P.S. по примеру как сделано на странице печатной формы.

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

16 Отредактировано Закусило Александр (22.09.2016 17:32:54)

Re: Вопрос по доп полям.

Попробуйте

$this->wrapOutput(false); //Это новое, убирает обёрку
return $this->result->setTemplate('orders_waybill.tpl');

в контроллере добавить

17

Re: Вопрос по доп полям.

Спасибо получилось

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