1 Отредактировано Илья (22.05.2017 10:42:53)

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

Прошу помощи с выводом данных в шаблоне.

Сейчас у меня все выводится в одну строчку, вот так:

Номер заказа 9121
Название Брюки-леггинсы на евромеху "ЛЮКС NO:2068"     Цена 1110.00
Номер заказа 9120
Название Леггинсы кожаные " Ангел 90-1 "     Цена 1200.00
Номер заказа 9119
Название Трусики хлопковые кружевные белый     Цена 130.00
Номер заказа 9119
Название Трусики-стринги " Donafen 1031 " леопард     Цена 350.00
Номер заказа 9119
Название Трусики " Haiyun NO.3674 "     Цена 140.00

Вот код шаблона

<div class="orderReportWrapper">
{foreach $order_report_arr as $nums}
    <table>
      <tr>
        <td>Номер заказа {$nums.order_num}</td>
      </tr>
      <tr>
        <td>Название {$nums.title}</td>
        <td>Цена {$nums.price}</td>
      </tr>
    </table>
{/foreach}
</div>

Подскажите, как мне сделать что бы было так?

Номер заказа
Товарная позиция - цена
Товарная позиция - цена
Товарная позиция - цена
Товарная позиция - цена

Номер заказа
Товарная позиция - цена
Товарная позиция - цена
Товарная позиция - цена
Товарная позиция - цена

2

Re: Собственный модуль

Там надо <table> тег вынести за границы цикла, иначе вы просто всё время новую таблицу создаёте. А она форматируется только в рамках одной целой таблицы

3 Отредактировано Илья (22.05.2017 11:14:46)

Re: Собственный модуль

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

Там надо <table> тег вынести за границы цикла, иначе вы просто всё время новую таблицу создаёте. А она форматируется только в рамках одной целой таблицы

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

Сейчас:

Номер заказа 9119
Название Трусики хлопковые кружевные белый     Цена 130.00
Номер заказа 9119
Название Трусики-стринги " Donafen 1031 " леопард     Цена 350.00
Номер заказа 9119
Название Трусики " Haiyun NO.3674 "     Цена 140.00

Нужно:

Номер заказа 9119
Название Трусики хлопковые кружевные белый     Цена 130.00
Название Трусики-стринги " Donafen 1031 " леопард     Цена 350.00
Название Трусики " Haiyun NO.3674 "     Цена 140.00

4

Re: Собственный модуль

Есть вот такой вариант. Но как тут обратиться к нужной переменной?

<table>
{foreach $order_report_arr as $nums}
      <tr>
        <td>Номер заказа {$nums.order_num}</td>
      </tr>
    {foreach $nums as $num}       
        <tr>
          <td>Название {$num}</td>
        </tr>
    {/foreach}
{/foreach}
</table>

5

Re: Собственный модуль

Что в массиве $order_report_arr?

6

Re: Собственный модуль

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

Что в массиве $order_report_arr?

<pre>
{var_dump($order_report_arr)}
</pre>
array(13) {
  [0]=>
  array(3) {
    ["order_num"]=>
    string(4) "9121"
    ["price"]=>
    string(7) "1110.00"
    ["title"]=>
    string(78) "Брюки-леггинсы на евромеху "ЛЮКС NO:2068""
  }
  [1]=>
  array(3) {
    ["order_num"]=>
    string(4) "9120"
    ["price"]=>
    string(7) "1200.00"
    ["title"]=>
    string(61) "Леггинсы кожаные " Ангел 90-1 ""
  }
  [2]=>
  array(3) {
    ["order_num"]=>
    string(4) "9119"
    ["price"]=>
    string(6) "130.00"
    ["title"]=>
    string(63) "Трусики хлопковые кружевные белый"
  }
  [3]=>
  array(3) {
    ["order_num"]=>
    string(4) "9119"
    ["price"]=>
    string(6) "350.00"
    ["title"]=>
    string(71) "Трусики-стринги " Donafen 1031 " леопард"

.....

7 Отредактировано Илья (24.05.2017 10:23:24)

Re: Собственный модуль

Вообщем, помогли доработать, получилось то что нужно. Остался последний вопрос. Как мне сюда вывести ФИО?

     function getReport(\RS\Orm\Request $request)
    {
      //$list = array();
      $request->select = ""; 
      $request->limit  = "";    
      $list['all'] = $request
            ->select('
                A.order_num,
                B.title,
                B.price
            ')
            ->where(array(
                'type' => 'product'
            ))
            ->leftjoin(new \Shop\Model\Orm\OrderItem(), 'A.id=B.order_id', 'B')
            ->exec();
      
      $result_list = array();

      while ($row = $list['all']->fetchRow()) {
        $order_data = array(
                      'order_num' => $row['order_num'],
                      'price' => $row['price'],
                      'title' => $row['title'],
        );
       $result_list[] = $order_data;
      }
      
      return $result_list;
    } 

8

Re: Собственный модуль

Вы можете через leftjoin добавить поля фио из заказа, и поле user_id. Далее нужно будет проверить, если user_id есть, то нужно будет по нему подгрузить отдельно объект пользователя, если user_id нет, то можно для вывода использовать поля user_fio.

9

Re: Собственный модуль

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

Вы можете через leftjoin добавить поля фио из заказа, и поле user_id. Далее нужно будет проверить, если user_id есть, то нужно будет по нему подгрузить отдельно объект пользователя, если user_id нет, то можно для вывода использовать поля user_fio.

А зачем мне через leftjoin их получать, если в [b]$request[/b] запрос уже идет к таблице с заказами, я просто дополню 
$list['all'] = $request ->select(' и получу их. 

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

10

Re: Собственный модуль

Когда вы добавите в запрос через left join таблицу с заказами, то там окажется поле user_id, которое содержит идентификатор пользователя, если он назначен у заказа. Соответственно, нужно проверить если значение в этом поле не равно 0, то у этого заказа есть пользователь.
Соответственно по нему (этому значению) можно подгрузить объект пользователя. Через

$user = new \Catalog\Model\Orm\User(id пользователя);
$fio = $user->getFio(); //Получаем ФИО.

11 Отредактировано Илья (25.05.2017 17:19:34)

Re: Собственный модуль

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

Когда вы добавите в запрос через left join таблицу с заказами, то там окажется поле user_id, которое содержит идентификатор пользователя, если он назначен у заказа. Соответственно, нужно проверить если значение в этом поле не равно 0, то у этого заказа есть пользователь.
Соответственно по нему (этому значению) можно подгрузить объект пользователя. Через

$user = new \Catalog\Model\Orm\User(id пользователя);
$fio = $user->getFio(); //Получаем ФИО.

А тут точно должно быть  new \Catalog\Model\Orm\User, я так попробовал и получил ошибку. попробовал сделать так

        if ($row['user_id'] !=0) {
          $user = new \Users\Model\Orm\User;
          $fio = $user->getFio(); //Получаем ФИО.
          var_dump($fio);
        }

но получаю

string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""
string(0) ""

почему?

12

Re: Собственный модуль

Поэтому:
$user = new \Catalog\Model\Orm\User(id пользователя);

Где id пользователя?

13 Отредактировано Илья (26.05.2017 12:25:10)

Re: Собственный модуль

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

Поэтому:
$user = new \Catalog\Model\Orm\User(id пользователя);

Где id пользователя?

id пользователя по разному пробовал подставить, всегда получа одно и тоже

Но вот снова получаю ошибку. Вы выше не ответили, там точнодолжно быть Catalog?
Class 'Catalog\Model\Orm\User' not found in

Даже если предположить, что там должно быть Users, делаю следующим образом

        $userid = $row['user_id'];
        if ($row['user_id'] !=0) {
          var_dump($userid);
          $user = new \Users\Model\Orm\User($userid);
          $fio = $user->getFio(); //Получаем ФИО.
          var_dump(new \Users\Model\Orm\User($userid));
        }

var_dump($userid); вот что получаю

string(11) "-2187112782"
string(11) "-3405695207"
string(11) "-1368383429"
string(11) "-1368383429"
string(11) "-1368383429"
string(11) "-1368383429"
string(11) "-1368383429"
string(11) "-1580943278"
string(11) "-1580943278"
string(11) "-1580943278"
string(11) "-1547765049"
string(10) "-402804638"
string(11) "-2135364836"

var_dump(new \Users\Model\Orm\User($userid));

object(Users\Model\Orm\User)#241 (15) {
  ["default_group":protected]=>
  string(5) "guest"
  ["authorized_user_group":protected]=>
  string(7) "clients"
  ["access_menu_table":protected]=>
  string(16) "xokq_access_menu"
  ["access_module_table":protected]=>
  string(18) "xokq_access_module"
  ["cache_cost_id":protected]=>
  NULL
  ["cache_mod_access":protected]=>
  NULL
  ["cache_menu_access":protected]=>
  NULL
  ["cache_admin_menu_access":protected]=>
  NULL
  ["cache_allow_sites":protected]=>
  NULL
  ["groups":protected]=>
  NULL
  ["_values":protected]=>
  array(1) {
    ["data"]=>
    array(1) {
      [0]=>
      bool(false)
    }
  }
  ["_self_class":protected]=>
  string(20) "Users\Model\Orm\User"
  ["_local_id":protected]=>
  int(82)
  ["cache_behavior_instances":"RS\Behavior\AcceptBehavior":private]=>
  array(0) {
  }
  ["instance_behaviors":"RS\Behavior\AcceptBehavior":private]=>
  array(0) {
  }
}
......

14

Re: Собственный модуль

Замените \Catalog\Model\Orm\User на \Users\Model\Orm\User.
user_id нужно проверить на то, что он больше 0, т.к. id пользователя зарегистрированного больше 0, а отрицательный id в том, случае, если заказ был создан, от незарегистрированного пользователя. В этом случае ФИО пользователя, записывается в сам заказа в поле user_fio.

15

Re: Собственный модуль

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

Замените \Catalog\Model\Orm\User на \Users\Model\Orm\User.
user_id нужно проверить на то, что он больше 0, т.к. id пользователя зарегистрированного больше 0, а отрицательный id в том, случае, если заказ был создан, от незарегистрированного пользователя. В этом случае ФИО пользователя, записывается в сам заказа в поле user_fio.


Все, разобрался, получилось, спасибо!
Вот такой код получился. А как теперь передать $fio в шаблон?

        $userid = $row['user_id'];
            if ($row['user_id'] >0) {
              $user = new \Users\Model\Orm\User($userid);
              $fio = $user->getFio();
              var_dump($fio);
            }

        $result_list[] = $order_data;

      }

      return $result_list;

16

Re: Собственный модуль

Ну присвойте в result_list куда нибудь, вы же его возвращаете.

17

Re: Собственный модуль

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

Ну присвойте в result_list куда нибудь, вы же его возвращаете.

дайте пример пожалуйста

18 Отредактировано Закусило Александр (01.06.2017 18:24:18)

Re: Собственный модуль

$userid = $row['user_id'];
            
            if ($row['user_id'] >0) {
              $user = new \Users\Model\Orm\User($userid);
              $fio = $user->getFio();
              var_dump($fio);
              $order_data['user_fio'] = $fio; //Эта строка добавилась.
            }

        $result_list[] = $order_data;

      }

      return $result_list;

19

Re: Собственный модуль

Спасибо! А еще, что сюда нужно добавить, что бы ссылка открывалась в новом окне?

            array(
                'title' => t('Реестр заказов'),
                'attr' => array(
                    'data-url' => "/adminqq/newpage-reestrctrl/?do=reestrReport",
                    'class' => 'crud-add button'
                )
            ),

20 Отредактировано Закусило Александр (02.06.2017 11:37:03)

Re: Собственный модуль

Да нужно убрать класс crud-add, и добавить атрибут target="_blank".

array(
     'title' => t('Реестр заказов'),
     'attr' => array(
               'data-url' => "/adminqq/newpage-reestrctrl/?do=reestrReport",
               'class' => 'button',
               'target' => '_blank'
     )
),

21

Re: Собственный модуль

А не могли бы еще подсказать, хочется сделать более правильней.

{$newData = []}
{foreach $order_report_arr as $item}
  {$newData[$item['order_num']][] = $item}
{/foreach}
{foreach $newData as $id => $order}
      <table class="margin">
      <tr>
        <td>{$item['user_fio']}{$fio} № {$id}</td>
        <td align="right">Цена</td>
      </tr>
  {foreach $order as $item}
          <tr>
          <td>{$item['title']}</td><td align="right">{$item['price']}</td>
        </tr>        
  {/foreach} 
          <tr>
          <td>Итого</td><td align="right">{$item['totalcost']}</td>
        </tr>
  </table>
{/foreach}

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

      while ($row = $list['all']->fetchRow()) {
        $order_data = array(
                      'order_num' => $row['order_num'],
                      'user_id' => $row['user_id'],
                      'user_fio' => $row['user_fio'],
                      'totalcost' => $row['totalcost'],
                      'price' => $row['price'],
                      'title' => $row['title'],                      
        );

22

Re: Собственный модуль

http://www.smarty.net/docs/en/language. … .while.tpl

23

Re: Собственный модуль

Мне нужно поставить лимит на вывод 10 заказов. Но в данном случае запрос применяется к товарам в заказе и выводит только 10 товарных позиций, скажите как мне сделать limit на вывод ЗАКАЗОВ а не ТОВАРНЫХ ПОЗИЦИЙ?

      $request->select = ""; 
      $request->limit  = "";    
      $list['all'] = $request
            ->select('
                A.order_num,
                A.user_id,
                A.user_fio,
                A.totalcost,
                B.title,
                B.price
            ')
            ->where(array(
                'type' => 'product'
            ))
            ->leftjoin(new \Shop\Model\Orm\OrderItem(), 'A.id=B.order_id', 'B')
            ->limit('10')
            ->exec();

24

Re: Собственный модуль

А переменная $request у Вас как образуется?

25

Re: Собственный модуль

Вот здесь

     function getReport(\RS\Orm\Request $request)
    {
      $request->select = ""; 
      $request->limit  = "";    
      $list['all'] = $request
            ->select('
                A.order_num,
                A.user_id,
                A.user_fio,
                A.totalcost,
                B.title,
                B.price
            ')
            ->where(array(
                'type' => 'product'
            ))
            ->leftjoin(new \Shop\Model\Orm\OrderItem(), 'A.id=B.order_id', 'B')
            ->exec();