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>

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

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

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

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

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>

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

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;
    } 

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

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(' и получу их. 

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

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

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) ""

почему?

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

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) {
  }
}
......

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

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;

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

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();

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

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();

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