1

(6 ответов, оставленных в Вопросы по созданию тем оформления)

Сделал следующим образом, решение взял из темы Современная
стили

/* Категории */
.catContainer {
    background: #6a7077;
    height: 0px!important;
}
/*.newcategory {
    float: left;
    margin: 0;
    margin-bottom: 0;
    padding-left: 0;
    list-style: none;
}*/
ul.newcategory > li {
/*    margin-bottom: 0;*/
    position: static;
    transition: ease-in-out 0.2s;
}
/*.t-dropdown.open {
    background-color: rgba(0, 0, 0, 0.5);
}*/
@media (min-width: 768px) {
.newcategory>li {
    float: left;
}
}
.newcategory>li {
    position: relative;
    display: block;
}
.t-dropdown {
    transition: 0.3s;
}
ul.newcategory > li > a {
    background-color: #6a7077;
    color: #fff;
    letter-spacing: -0.05px;
    line-height: 28px;
    padding: 15px 20px 0px 0px;
    z-index: 21;
}
.newcategory .open>a, .newcategory .open>a:hover, .newcategory .open>a:focus {
/*    background-color: #eee;
    border-color: #337ab7;*/
    color: #77e0c3;
}
@media (min-width: 768px) {
  .newcategory>li>a {
    padding-top: 15px;
    padding-bottom: 15px;
}
}
.newcategory>li>a {
    padding-top: 10px;
    padding-bottom: 10px;
    line-height: 20px;
}
.newcategory>li>a {
    position: relative;
    display: block;
    padding: 10px 15px;
}
}
.open>a {
    outline: 0;
}
.t-dropdown.open > .t-dropdown-menu {
    -webkit-transform: translateY(0);
    -moz-transform: translateY(0);
    -ms-transform: translateY(0);
    transform: translateY(0);
    display: block;
}
.t-dropdown-menu {
    display: none;
    background-color: #6a7077;
    box-shadow: none;
    top: 20px;
    left: 0;
    position: absolute;
    width: 100%;
    -webkit-transform: translateY(-115%);
    -moz-transform: translateY(-115%);
    -ms-transform: translateY(-115%);
    transform: translateY(-115%);
    transition: 0.3s;
    overflow: hidden;
    z-index: 20;
    border-bottom-left-radius: 5px;
    border-bottom-right-radius: 5px;
    margin-left: -10px;
}
/*.container-fluid {
    max-width: 1540px;
}
.container-fluid {
    margin-right: auto;
    margin-left: auto;
    padding-left: 15px;
    padding-right: 15px;
}*/
.t-nav-catalog-list__inner {
    margin: 30px 0;
}
.t-nav-catalog-list__scene {
    -webkit-column-count: 4;
    -moz-column-count: 4;
    column-count: 4;
    -webkit-column-gap: 10px;
    -moz-column-gap: 10px;
    column-gap: 10px;
}
.t-nav-catalog-list-block {
    -webkit-column-break-inside: avoid;
    break-inside: avoid;
    display: block;
}
.t-nav-catalog-list-block {
    padding: 0px 10px;
/*    display: inline-block;*/
    margin: 0 0 10px;
    width: 100%;
}
.t-nav-catalog-list-block__header {
    color: #77e0c3;
    display: block;
    font-size: 18px;
    padding: 5px !important;
    transition: ease-in-out 0.1s;
}
.t-nav-catalog-list-block__list {
    list-style: none;
    padding: 0;
}
.t-nav-catalog-list-block__link {
    color: #ffffff;
    display: block;
        font-size: 14px;
    padding: 5px !important;
    transition: ease-in-out 0.1s;
}

Выод категорий

<div style="position: relative;">
    <ul class="newcategory">
        {hook name="catalog-blocks-category-category:list-item" title="{t}Доплнительные пункты меню, в меню каталога{/t}"}
        {foreach $dirlist as $dir}
        <li class="{if !empty($dir.child)} t-dropdown{/if}" {$dir.fields->getDebugAttributes()}>
            {* Первый уровень *}
            <a {$dir.fields->getDebugAttributes()} href="{$dir.fields->getUrl()}">{$dir.fields.name}</a>

            {if !empty($dir.child)}
                {* Второй уровень *}
                <div class="t-dropdown-menu">
                        <div class="t-nav-catalog-list__inner">
                            <div class="t-nav-catalog-list__scene">

                                {foreach $dir.child as $subdir}
                                    <div class="t-nav-catalog-list-block">
                                        <a {$subdir.fields->getDebugAttributes()} href="{$subdir.fields->getUrl()}" class="t-nav-catalog-list-block__header">{$subdir.fields.name}</a>

                                        {* Третий уровень *}
                                        {if !empty($subdir.child)}
                                        <ul class="t-nav-catalog-list-block__list">
                                            {foreach $subdir.child as $subdir2}
                                                <li><a {$subdir2.fields->getDebugAttributes()} href="{$subdir2.fields->getUrl()}" class="t-nav-catalog-list-block__link">{$subdir2.fields.name}</a></li>
                                            {/foreach}
                                        </ul>
                                        {/if}
                                    </div>
                                {/foreach}

                        </div>
                    </div>
                </div>
            {/if}
        </li>
        {/foreach}
        {/hook}
    </ul>
</div>

навешиваем класс

<script>
    $('.t-dropdown').hover(
function(){ $(this).addClass('open') },
function(){ $(this).removeClass('open') }
)
    </script>

2

(6 ответов, оставленных в Вопросы по созданию тем оформления)

Понял, что то оба варианта не особо радужные. А если сделать по примеру как сделано, в теме молодежная? Как там реализовано, что без дочерней категории уходит под категорию? http://joxi.ru/p274bd9i0XKvWA

Всем привет. Есть меню 3х уровненое. Выводиться следующим образом

        {foreach $dirlist as $dir}
        <li class="{if !empty($dir.child)} node{/if}" {$dir.fields->getDebugAttributes()}>
            <a href="{$dir.fields->getUrl()}">{$dir.fields.name}</a><i></i>
            {if !empty($dir.child)}
                {* Второй уровень *}
                <ul>
                    {foreach $dir.child as $subdir}
                    <li class="dropdown"><a href="{$subdir.fields->getUrl()}">{$subdir.fields.name}</a>
                        {if !empty($subdir.child)}
                        {* Третий уровень *}
                        <ul>
                            {foreach $subdir.child as $subdir2}
                            <li><a href="{$subdir2.fields->getUrl()}">{$subdir2.fields.name}</a></li>
                            {/foreach}
                        </ul>
                        {/if}
                    </li>
                    {/foreach}
                </ul>
            {/if}
        </li>
        {/foreach}


Вот что получается в итоге: http://joxi.ru/4Akl8xotM4kwDr

Как сделать, что бы второй уровень у которого нет, дочерних элементов, встал друг под дружку?
Вот так: http://priscree.ru/img/1a423f63d19e57.jpg

https://jsfiddle.net/9L008q8r/2/

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

Потому, что при группировке по статусу, все записи объединяются в одну принадлежающую этому полю значению.
http://www.mysql.ru/docs/man/Group_by_functions.html
https://ru.stackoverflow.com/questions/ … 0%B2-mysql

Я это понимаю. Не правильно поставил вопрос.Можно ли как то сделать, группировку вот таким видом?
Т.е. сейчас получается вот так выводиться
Товаров  4шт. со статусом Оплачен
Товаров  7шт. со статусом Подтвержден

А можно ли сделать, вот так?
Товаров А  3шт. со статусом Оплачен
Товаров А  2шт. со статусом Подтвержден
Товаров Б  1шт. со статусом Оплачен
Товаров Б  5шт. со статусом Подтвержден
......
...
...

Закусило Александр пишет:
->groupby('status')

Таким образом выводит всего 3 записи. http://joxi.ru/l2ZxlDRt8yEnNr
А если воспользоваться поиском то работает как надо. Но почему выводит только3 записи на первой странице?

Подскажите пожалуйста, как в данном случае сгруппировать товары, по одинаковому статусу?
http://joxi.ru/p274bd9i0dWkZA

Запрос такого вида

        $q->select('amount,title,status,order_id')
            ->join(new \Shop\Model\Orm\Order(), 'A.order_id=B.id', 'B')
            ->whereIn('status', array('2','3','6','14'))
            ->where(array('type' => "product"
                            ))
            ->orderby('title');

Здравствуйте. Хотел сделать, что бы в текстовый файл заносилась запись, когда была создана карточка товара и кем.
В файле ctrl.inc.php есть функция actionAdd, добавив в которую нужный код запись происходит. Но как это сделать своим модулем, не перегружая контроллер?

Спасибо, не нашел сам

Здравствуйте.Как можно в карточке товара сделать вывод наличия на складах, не картинками а конкретными цифрами?По примеру как это сделано в карточке товара?
http://joxi.ru/GrqGvNXfNbEne2

Ответ на второй вопрос http://forum.readyscript.ru/topic/1034/ … -v-filtre/

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

Надо добавть через groupby поле title, а в поле с количеством добавить в select комманду SUM('Нужное поле с количеством') As Нужное поле с количеством

Подскажите в чем ошибка?
Должно быть записей всего записей: 2928, но после того как вставляю вот этоткод

        $helper = parent::helperIndex();
        $edit_href = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $q = $this->api->queryObj();
        $q->select('SUM(amount) as amount')
            ->join(new \Shop\Model\Orm\Order(), 'A.order_id=B.id', 'B')
            ->where(array('status' => "2",
                          'type' => "product"
                            ))
            ->groupby('title');

Получается вот так
http://s019.radikal.ru/i628/1707/6f/9af2e868705b.png

Вот так выглядит запрос
SELECT *, SUM(amount) as amount FROM `opt`.`tzte_order_items` as A INNER JOIN `opt`.`tzte_order` as B ON A.order_id=B.id WHERE (`status` = '2' AND `type` = 'product') GROUP BY title

Если загрузить его в phpmyadmin, то запрос выполняется верно, а почему тогда выводит не правильно?

P.S.
Код работает правильно, свои функции выполняет как нужно. НО заметил что проблема в пагинаторе появляется после того как я вставляю этот код а имеено: показывает неправильное количество страниц (всего 1) и количество записей, с чем это связано?
http://joxi.ru/8AnbpyoUqzOR9A

А еще такой вопрос, как сложить количество одинаковых товарных позиций ?Я вот скрин приложил, там видно одинаковые позиции, а как это все объеденить в одну строку, что бы количество суммировалось?
http://joxi.ru/Q2K1LMYS9LkDRr

Подскажите пожалуйста как добавить в собственный модуль поиск по товарам?
Мой модуль выводит товары которые есть в заказах с определенным статусом и показывает их количество.
Подскажите как мне добавить поиск по этим товарам?Поиск по номеру заказа вроде бы работает, а вот по наименованию товара нет

remainctrl.inc.php

<?php
namespace Newpage\Controller\Admin;
use \RS\Html\Table\Type as TableType,            
    \RS\Controller\Admin\Helper,
    \RS\Html\Toolbar\Button as ToolbarButton,
    \RS\Html\Toolbar,
    \RS\Html\Filter,
    \RS\Html\Table,
    \RS\Html\Tree,
    \Shop\Model;
    
class RemainCtrl extends \RS\Controller\Admin\Crud
{
        function __construct()
    {
         parent::__construct(new \Newpage\Model\RemainApi());
    }
    
    function helperIndex()
    {
           
        
        $helper = parent::helperIndex();
        $edit_href = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $q = $this->api->queryObj();
        $q->join(new \Shop\Model\Orm\Order(), 'A.order_id=B.id', 'B')
            ->where(array('status' => "2",
                          'type' => "product"
                            ));
            
        $helper = parent::helperIndex();
        $helper->setTopTitle(t('Количество товаров в заказе'));
        $edit_pattern = $this->router->getAdminPattern('edit', array(':id' => '@id'));
        $helper->setTable(new Table\Element(array(
            'Columns' => array(         
                new TableType\Text('order_num', t('Номер'), array('Sortable' => SORTABLE_BOTH, 'href' => $edit_href) ),
                new TableType\String('title', t('Название товара')), 
                new TableType\Text('amount', t('Количество'), array('Sortable' => SORTABLE_BOTH, 'href' => $edit_href) ),           
        ))));

        $helper->setFilter(new Filter\Control( array(
             'Container' => new Filter\Container( array( 
                                'Lines' =>  array(
                                    new Filter\Line( array('Items' => array(
                                                            new Filter\Type\Text('order_num','№', array('attr' => array('class' => 'w50')))
                                                        )
                                    )),
                                    
                                ),
                                'SecContainer' => new Filter\Seccontainer( array(
                                    'Lines' => array(
                                        new Filter\Line( array('Items' => array(
                                                new \Shop\Model\HtmlFilterType\Product('PRODUCT.title', t('Наименование товара'), array('searchType' => '%like%')),
                                        ))),
                                    )
                                ))
                            )),
            'Caption' => t('Поиск по заказам')
        )));

        return $helper;
    }
    
}
Закусило Александр пишет:

Тогда да, через .my.inc.php, либо сделать свой блок контроллер и использовать Апи из своего модуля которое у наследовано от текущего АПИ.

В обоих случаях получается что, стандартное API уже не будет использоваться, а вся работа модуля бедт происходить на новом API?

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

А какого рода изменения Вам требуются?

Проверка и передача $POST

Здравствуйте. Мне нужно внести изменения вот в эту функцию в файле modules/comments/model/api.inc.php
Тут только один вариант, перегружать api в собственном модуле?

function addComment($aid, $type)
    {        
        //Если пользователь не авторизован и модуль каптчи включён, то проверяем капчу
        $captcha_config = \RS\Config\Loader::byModule('kaptcha');
        if (!\RS\Application\Auth::isAuthorize() && $captcha_config['enabled']) {
            $this->getElement()->__captcha->setEnable(true);
        }
Закусило Александр пишет:

Это я видел. $request перед тем как зайти в Вашу функцию чему равен?

Чесно говоря не могу сказать, потому что я взял готовый api modules\shop\model\orderapi.inc.php и перегрузил его в свой модуль, убрав не нужное мне и добавив нужное

Вот здесь

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

Мне нужно поставить лимит на вывод 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();

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

{$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'],                      
        );

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

            array(
                'title' => t('Реестр заказов'),
                'attr' => array(
                    'data-url' => "/adminqq/newpage-reestrctrl/?do=reestrReport",
                    'class' => 'crud-add button'
                )
            ),
Закусило Александр пишет:

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

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

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

Попробуйте

$new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl', array('href' => \RS\Router\Manager::obj()->getAdminPattern('edit', array(':id' => '@id'));

Немного поправил, там была ошибка, вот правильный код

        $new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl', array(
                'LinkAttr' => array(
                     'class' => 'crud-edit'
                ),
                'href' => \RS\Router\Manager::obj()->getAdminPattern('edit', array(':id' => '@id')), 'Sortable' => SORTABLE_BOTH, 'CurrentSort' => SORTABLE_ASC));

Только появился один вопрос, в стандарте там еще есть часть кода 'dir' => $dir, для чего она? и чем черевато ее отсутствие?

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

//Далее добавляете колонку
$new_column = new \RS\Html\Table\Type\Usertpl('title', t('Название'), '%catalog%/title.tpl');
Закусило Александр пишет:

Замените \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;