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

statiсList вернёт ORM объекты которые привязаны к вызываемому api, т.е \Service\Model\Orm\DeviceDir. Т.е. для получения объектов устройств должно быть своё АПИ, у которого будет объект устройств. Я так понимаю Вы реализуете свой контроллер для админ панели. Если посмотрите в контроллер статей, то там видно, что используется два апи. И ловится GET параметр dir который применяет parent к списку устройств.

$this->dir = $this->url->request('dir', TYPE_STRING);     

Проследите цепочку $this->dir
Сначала идёт helperIndex(), а потом actionIndex()
Я подробно рассматриваю вопрос создания контроллеров в этом видео.

Контроллер у меня вроде бы работает, по крайней мере в другом, созданном мною, модуле. Там даже работает getInstance и getSelectList. Различия между модулями лишь в наличии поля 'parent'.

Часть кода админ контроллера:

function __construct()
    {
        parent::__construct(new \Service\Model\DeviceApi());
        $this->dirapi = new \Service\Model\DeviceDirApi();
    }

    function actionIndex()
    {
        //Если категории не существует, то выбираем пункт "Все"
        if ($this->dir > 0 && !$this->dirapi->getById($this->dir)) $this->dir = 0;

        // если выбрана категория
        if ($this->dir > 0) $this->api->setFilter('parent', $this->dir);

        return parent::actionIndex();
    }

    function helperIndex()
    {
        $helper = parent::helperIndex();
        $this->dir = $this->url->request('dir', TYPE_STRING);
        ....

Насколько я понимаю $this->dir = $this->url->request('dir', TYPE_STRING); влияет на выборку устройств при выборе категории. Выборка работает, и категории и устройства создаются. У меня проблема совсем в другом, при добавлении/редактировании устройства, в списке категории выводится лишь Верхний уровень

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

Если же Вам просто нужна выборка для parent, то можно как вариант либо сделать это через АПИ устройств, либо через ORM Request

$devices = \RS\Orm\Request::make()
   ->from(new Класс устройст)
   ->where(array(
        'parent' => id родителя
   ))->objects();

Спасибо, разобрался)
Глупо вышло, нужно было вернуть простейший массив [id] => [title]

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

getInstance() реализует паттерн Singletone. И предназначен для возвращения одной копии объекта всегда(Singletone). Что касается selectList, то она использует родительскую функцию getSelectList(0) и действительно запрашивает доп. поля. Это всё можно использовать, но не понятно. Какую задачу Вы хотите решить и что получить? Какая структура данных?
Кстати на всякий случай у нас есть видеоуроки по программированию

Я хочу получить 2 связанные таблицы: категории и устройства.

ORM категории:

'site_id' => new Type\CurrentSite(),
                'title' => new Type\Varchar(array(
                    'maxLength' => '150',
                    'description' => t('Название'),
                    'Checker' => array('chkEmpty',t('Необходимо заполнить поле название')),
                    'attr' => array(array(
                        'data-autotranslit' => 'alias'
                    ))
                )),
                'alias' => new Type\Varchar(array(
                    'maxLength' => '150',
                    'description' => t('Псевдоним(Ан.яз)'),
                )),
                'image' => new Type\Image(array(
                    'maxLength' => '255',
                    'max_file_size' => 10000000,
                    'allow_file_types' => array('image/pjpeg', 'image/jpeg', 'image/png', 'image/gif'),
                    'description' => t('Картинка'),
                )),
                'public' => new Type\Integer(array(
                    'description' => t('Показывать категорию'),
                    'maxLength' => 1,
                    'default' => 1,
                    'checkboxView' => array(1,0)
                )),
                'sortn' => new Type\Integer(array(
                    'description' => t('Сортировочный индекс'),
                    'maxLength' => '11',
                    'visible' => false,
                )),

API категории:

<?php
namespace Service\Model;

class DeviceDirApi extends \RS\Module\AbstractModel\TreeCookieList
{
    protected
        static $instance;

    function __construct()
    {
        parent::__construct(new \Service\Model\Orm\DeviceDir,
            array(
                'multisite' => true,
                'idField' => 'id',
                'aliasField' => 'alias',
                'nameField' => 'title',
                'sortField' => 'sortn',
                'defaultOrder' => 'sortn',
            ));
    }

    static function getInstance()
    {
        if (!isset(self::$instance)) self::$instance = new self();
        return self::$instance;
    }

    static function selectList($include_root = true)
    {
        $_this = self::getInstance();
        $list = $_this -> getSelectList(0);
        return $include_root ? array('' => t('Верхний уровень')) + $list : $list;
    }

    function listWithAll()
    {
        $tree = $this->getTreeList();
        array_unshift($tree, array('fields' => array(
            'noOtherColumns' => true,
            'noCheckbox' => true,
            'noDraggable' => true,
            'noFullValue' => true,
            'title' => t('Все'),
            'id' => 0,
            'alias' => ''
        ),
            'child' => array()
        ));
        return $tree;
    }

}

ORM устройств:

'site_id' => new Type\CurrentSite(),
                'title' => new Type\Varchar(array(
                    'maxLength' => '255',
                    'description' => t('Название'),
                    'Checker' => array('chkEmpty', t('Укажите название устройства')),
                    'attr' => array(array(
                        'data-autotranslit' => 'alias'
                    ))
                )),
                'alias' => new Type\Varchar(array(
                    'maxLength' => '150',
                    'description' => t('URL имя'),
                    'hint' => t('Могут использоваться только английские буквы, цифры, знак подчеркивания, запятая, точка и минус'),
                    'meVisible' => false,
                    'Checker' => array('chkalias', null),
                )),
                'parent' => new Type\Integer(array(
                    'index' => true,
                    'description' => t('Категория'),
                    'List' => array(array(new \Service\Model\DeviceDirApi(), 'selectList')),
                    'Attr' => array(array('size' => 0)),
                )),
                'image' => new Type\Image(array(
                    'maxLength' => '255',
                    'max_file_size' => 10000000,
                    'allow_file_types' => array('image/pjpeg', 'image/jpeg', 'image/png', 'image/gif'),
                    'description' => t('Картинка'),
                )),
                'sortn' => new Type\Integer(array(
                    'description' => t('Сортировочный индекс'),
                    'maxLength' => '11',
                    'visible' => false,
                )),
                'public' => new Type\Integer(array(
                    'maxLength' => '1',
                    'index' => true,
                    'description' => t('Показывать устройство'),
                    'default' => 1,
                    'CheckboxView' => array(1, 0),
                )),

Собственно вопрос по этому полю

'parent' => new Type\Integer(array(
                    'index' => true,
                    'description' => t('Категория'),
                    'List' => array(array(new \Service\Model\DeviceDirApi(), 'selectList')),
                    'Attr' => array(array('size' => 0)),
                )),

Как мне вернуть SelectList из DeviceDir?

Добрый вечер

Разрабатываю модуль, и мне в ORM нужно получить тип данных список из другой таблицы. Похожая реализация работает в \Article\Model\Catapi

static function getInstance()
    {
        if (!isset(self::$instance)) self::$instance = new self();
        return self::$instance;
    }

    static function selectList($include_root = true)
    {
        $_this = self::getInstance();
        $list = $_this -> getSelectList(0);
        return $include_root ? array('' => t('Верхний уровень')) + $list : $list;
    }

Но этот код работает, только если в моем модуле будут добавлены поля родительская папка (parent) и alias. Как мне заставить работать эту функцию, только без parent и alias?

UPD:
Судя по отладчику getInstance() возвращает данные, а вот getSelectList() не срабатывает.

Доброго времени суток.
Пытаюсь автоматизировать процесс выгрузки из самописного 1C на сайт, с помощью CSV.
Остановился на самом процессе импорта.

Подскажите как работать с данной функцией из \Main\Controller\Admin\Csv

actionProcessImport ($schema_def = null, $filename_def = null, $referer_def = null )

И вообще, это та функция, которая мне нужна?

Как указываются схема и CSV файл при импорте? Файлы берутся из папки.


UPD:
Посидел с отладчиком, и слепил себе такой костыль из функции actionProcessImport, но работает)))

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

- Использую стандартные схемы catalog-dir, catalog-product ...
- В $file идет полный путь к файлу .csv

Сам код:

function processImport($schema, $file)
    {
        if ($schema && $file) {
            $start_pos = 0;
            $config    = \RS\Config\Loader::byModule('main');

            if ($csv_schema = \RS\Csv\AbstractSchema::getByShortName($schema)) {
                $csv_schema->setAction('import');

                $csv_file    = $file;
                $csv_columns = $csv_schema->analizeColumns($csv_file);
                $columns     = $csv_columns['schema']; //Сопоставленные колонки

                //Проверяем шаблон импорта
                $csv_schema->validateImportWorkField($columns);
                //Подтверждение шаблона
                $csv_schema->setWorkFields($columns);
                //Начинаем импортировать строки
                if ($csv_schema->import($csv_file, $config['csv_check_timeout'], $start_pos))
                    return true;
                else return false;
            } else return false;
        } else return false;
    }
Закусило Александр пишет:

Забыл спросить, а адрес у Вас какой на который вы обращаетесь? У Вас там используется вывод блока? Или содержимого фронт контроллера?

Спасибо, я уже разобрался))

Итог такой:

Javascript

$(function() {
    $('div.ajaxBlock form.ajaxForm').submit(function(e) {
        var $form = $(this)
        $.ajax({
            type: $form.attr('method'),
            dataType: 'json',
            url: $form.attr('action'),
            data: $form.serialize(),
            success: function(response){
                $('div.ajaxBlock').html(response.html);
            }
        });
        e.preventDefault();
    });
});

TPL

<div class="ajaxBlock">
    <form method="POST" class="ajaxForm" action="{$router->getUrl('название_модуля-block-название_контроллера')}?_block_id={$this_controller->getBlockId()}">
        <input type="text" name="name">
        <input type="submit" value="Отправить">
    </form>
</div>
Закусило Александр пишет:
$(document).ready(function() { 
  $('#formFeedback').ajaxForm({
        dataType: 'json', //Тип принимаемых данных когда вернётся запрос
        data: {//Параметры для запроса (необязательно)
           dialogWrap: 1
        }, 
        beforeSubmit: function(arr, form, options) {  //(необязательно)
               //Действия до отправки
        },
        success: function(response) {
               //Здесь обрабатываем ответ.
        }
   });
});

Ссылка на документацию к плагину jQuery Form
http://malsup.com/jquery/form/

А как я могу получить в ответе только результат формы, а не страницу полностью? Интересует модуль feedback и comments

UPD: кажется разобрался) Но возник другой вопрос, ajax возвращает мне данные в unicode.

Здравствуйте,
Подскажите, пожалуйста, на пальцах, как отправить форму feedback средствами AJAX?
Куда отправлять запрос и как получить ответ?
Остановился на подключении модуля jquery.form

$(document).ready(function() { 
    $('#formFeedback').ajaxForm(function() {
        ???
    }); 
}); 

Приведите простой пример, пожалуйста.
Пытаюсь создать тему с нуля, без сетки на ui kit.

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

В одном из следующих релизов сделаем эту возможность.

Спасибо!)

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

Сейчас мы работаем только с 12 колоночным вариантом. Вы можете оставить пожелание у нас helpdesk.readyscript.ru, если Вам нужна поддержка 16 и 24 колоночной системы.
Почему кстати Вы выбрали 16 колоночный вариант?

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

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

Официально Bootstrap 3 поддерживает только 12 колонок. Хотя впринципе это возможно, поэтому пишите пожелание.

Скорее по-умолчанию  Bootstrap имеет 12 сеточную систему. В официальном кастомизаторе есть возможность самому настраивать сетку на любое количество столбцов.

Подскажите пожалуйста, как адаптировать конструктор под 16/24 колоночный bootstrap?