Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
08 октября 2020, 09:45
0
Я вот, что не понял, когда в quickview выаожу таблицу, то там почему-то не идёт сохранение через GetTablesFetch, может ещё надо какую строку подкрутить
Я вот не понял какое именно сохранение. И через сниппет никакого сохранения нету. Все операции через ajax идут. Через quickview вообще скрипт assets\components\gettables\js\gettables.js подгружается?
Александр Туниеков
08 октября 2020, 00:46
0
Это я написал. Вообще практически тоже самое что ты написал. Но редактировать дает.
У тебя еще
.autosize[readonly], .autosize[readonly] div {
        background: brown;
        user-select: none;
        cursor: not-allowed;
    }
тоже применил, но снова редактировать дает и ничего не видно все brown покрашено.
Александр Туниеков
08 октября 2020, 00:08
+1
1.5.4-alpha
==============
— Добавлены редакторы для textarea: ace и ckeditor.

Включение ace:
В системных настройках включить gettables_load_frontend_ace
В конфиге edit поля таблицы прописать 'editor'=>'ace':
...
'row'=>[
        'content'=>[
            'edit'=>        ['type'=>'textarea','editor'=>'ace','editor_mode'=>'xml','editor_height'=>'300','editor_theme'=>'idle_fingers'],
            ],
....
Включение ckeditor:
В системных настройках включить gettables_load_frontend_ckeditor
В конфиге edit поля таблицы прописать 'editor'=>'ckeditor':
...
'row'=>[
        'content'=>[
            'edit'=>        ['type'=>'textarea','editor'=>'ckeditor',],
            ],
....
ace с параметром readonly не получилось совместить :-(
Александр Туниеков
07 октября 2020, 21:37
0
Через процессор нет способа. А зачем? и через какой процессор?
Александр Туниеков
07 октября 2020, 21:34
+1
А это здесь ошибка
if($action == "fetch" and !$this->config['isAjax'])
                return $this->fetch($data);
        
        //$this->getTables->addDebug($data['table_name'],'handleRequest  $table_name');
        if(!$table = $this->getTables->getClassCache('getTable',$data['table_name'])){
            return $this->error("{$data['table_name']} не найдено");
        }
Определяет, что запрос по ajax и не пускает в метод fetch.
А по ajax пускать в fetch опасно. Можно тогда произвольный конфиг туда передать и вытащить любую любую таблицу modx :-(.
Можно сделать сниппет такой getTableFetch
<?php
/** @var modX $modx */
/** @var array $scriptProperties */
/** @var getTables $getTables */
//$getTables = $modx->getService('getTables', 'getTables', MODX_CORE_PATH . 'components/gettables/model/', $scriptProperties);

$gettables_core_path = $modx->getOption('gettables_core_path',null, MODX_CORE_PATH . 'components/gettables/core/');
$gettables_core_path = str_replace('[[+core_path]]', MODX_CORE_PATH, $gettables_core_path);
if (!$modx->loadClass('gettables', $gettables_core_path, false, true)) {
    return 'Could not load getTables class!';
}
if (!$modx->loadClass('getTable', $gettables_core_path, false, true)) {
    return 'Could not load getTable class!';
}
//echo "<pre>".print_r($scriptProperties,1)."<pre>";

$getTables = new getTables($modx, $scriptProperties);
if (!$getTables) {
    return 'Could not load getTables class!';
}

$getTables->pdoTools->addTime('getTables loaded.');
$getTables->initialize();

//$response = $getTables->handleRequest('getTable/fetch');
$class = 'getTable';
$getTable = new getTable($getTables, $getTables->config);
if (!$getTable) {
    return 'Could not load getTable class!';
}else{
    $response = $getTable->fetch();
}

if(!$response['success']){
    $output = $response['message'];
}else{
    $output = $response['data']['html'];
}

$log = '';
if ($modx->user->hasSessionContext('mgr') && !empty($showLog)) {
    $log .= $response['log'];
}
return $output.$log;
Александр Туниеков
07 октября 2020, 20:26
0
Э… квадратные скобки это для феном только. А без фенома можно только из системной настройки через config вывести.
Александр Туниеков
07 октября 2020, 20:22
0
В assets\components\gettables\js\gettables.js я вешаю обработчик на событие открытия модалки
getTables.$doc.on('shown.bs.modal', function (event) {
                $('.get-date').each(function(){
                    $(this).datepicker();
                });
                $('.get-select-multiple').each(function(){
                    $(this).multiselect();
                });
            });
И редакторы тудаже тогда запихаю
Александр Туниеков
07 октября 2020, 20:14
0
Не нравиться мне в таблицу редактор запихивать. Строки разьезжаются и это уже не таблица получается yadi.sk/i/uZxbjTVkxqx1kQ
Может лучше к модалке редакторы цеплять? yadi.sk/i/9UrYl9rYeDbZrA сюда?
Александр Туниеков
06 октября 2020, 20:24
0
думаю подключить ACE и CKEditor. Наверно надо будет указывать
'row'=>[
    'content'=>[
        'edit'=>[
            'type'=>'textarea',
            'editor'=>'ACE', или 'CKEditor'
        ]
    ]
]
автоматом выбрать редактор не понятно по какому признаку можно :-(.
Александр Туниеков
06 октября 2020, 19:36
0
С табами разобрались?
там же просто
{'!getTabs' | snippet : [
    'tabs'=>[
        'tab1'=>[
            'label'=>'таб с чанком',
            'chunk'=>'какой-то чанк'
        ],
         'tab2'=>[
            'label'=>'таб с таблицей',
            'table'=>[
                все параметры от таблиц
            ]
        ],
    ]
]}
Александр Туниеков
06 октября 2020, 19:19
+1
Интересный вариант. Только не понятно textarea.closest('form').submit не должно сработать на строке таблицы. И другие редакторы тоже хотелось бы подключать.
Александр Туниеков
06 октября 2020, 19:06
0
Скрестить getTables с mFilter2 — такого никогда не задумывалось :-). getTables получает данные таблиц только от pdoTools. По хорошему нужно переписывать функции. В core\components\gettables\core\gettable.class.php
generateData чтобы каким-то образом брал данные из mFilter2. Возможно еще потребуется изменить addFilterTable и в core\components\gettables\core\getmodal.class.php generateEditsData и в core\components\gettables\core\gettableprocessor.class.php check_rows.
По топорному можно добавить в таблицу фильтр с 'where_field'=>'`modResource`.`id`:IN',
mFilter2 заставить выдавать только ids и на mse_load (точно не помню) забивать в этот фильтр ids и обновлять таблицу getTables.sendData.$GtsApp = $('.get-table');getTables.Table.refresh();
(Здесь только для getTables надо пару строк добавить чтоб :IN коректно отрабатывало)
Александр Туниеков
06 октября 2020, 06:06
+1
Обновил компонент
1.5.3-alpha
==============
— Чанк для action.
— Попровлена ошибка проверки существования строки в таблице перед записью.
— Добавлены описания для системных параметров.

Во все action теперь можно добавить произвольные атрибуты через attr.
'actions'=>[
            'custom' =>[
                'action'=>"getTable/custom",
                'row' => [],
                'cls'=>'red',
                'icon' => 'glyphicon glyphicon-edit',
                'tag' =>'a',
                'attr' => 'data-data-tag="a"',
            ],
        ],
Проверил
'update'=>[
                'processors'=>['modResource'=>'resource/update',],
            ],
Процессор resource/update требует чтобы поле alias было.
Александр Туниеков
05 октября 2020, 22:58
+1
custom должно быть в массиве actions
Вот мой конфиг:
{'getTable' | snippet : [
    'showLog'=>1,
    'toJSON'=>1,
    'table'=>[
        'class'=>'modResource',
        'actions'=>[
            'create'=>[
                
            ],
            'update'=>[
                'processors'=>['modResource'=>'resource/update',],
            ],
            'custom' =>[
                'action'=>"getTable/custom",
                'row' => [],
                'cls'=>'red',
                'icon' => 'glyphicon glyphicon-edit',
                'tag' =>'a',
                'attr' => 'data-data-tag',
            ],
        ],
        'pdoTools'=>[
             'class'=>'modResource',
             'parents'=>258,
             'includeTVs'=>'icon,price',
        ],
        'checkbox'=>0,
        'autosave'=>1,
        'row'=>[
                'id'=>[
                    ],
                'content'=>[
                    ],
                'icon'=>[
                    'class'=>'TV',
                    ],
                'price'=>[
                    'class'=>'TV',
                    ],
                'test'=>[
                    'label'=>'quickview',
                    'content'=>'<a >da</a>',
                    'edit'=>false,
                    ],
            ],
    ],
]}
только в custom всетаки ошибка забыл кавычки поставить. Ладно попробую сегодня новую версию getTables выпустить.
Но все таки зачем вам quickview что вы в нем хотите сделать? может это по другому решать надо?
Александр Туниеков
05 октября 2020, 16:53
+1
для quickview наверно стоит попробывать action
'custom' =>[
                'action'=>"getTable/custom",
                'row' => [],
                'icon' => '',
                'tag' =>'a',
                'attr' => '',
            ],
и все что вам надо в attr запихать.

Только не понятно зачем вам quickview? И я под quickview компонент не планировал и не понятно как data-data-id=«1» в кнопку запихать. У меня все data-id в дата атрибутах строки запиханы. yadi.sk/i/0bBau5HI-TkEmA. На action кнопках данные строки не подставляются.

Вы еще можете вместо добавления кнопки в колонку действия, запихать кнопку в отдельную колонку.
"row": {
            "id": [],
            "partner_condition_multi": {
                "class": "TV"
            },
            "keywords": {
                "class": "TV"
            },
            "test": {
                "label":"quickview",
                "content":"<a class=\"quickview\" data-click
			data-quickview-mode=\"modal\"
			data-data-action=\"chunk\"
			data-data-element=\"test\"
			data-data-id=\"{$id}\"
			data-dialog-buttons='[\"close\"]'
			> </a>"
            }
        }
код примерный
Александр Туниеков
05 октября 2020, 16:26
+1
gettables_mgr_framework_style — стиль для админки. gettables_frontend_framework_style — для фронта.
Если gettables_frontend_framework_style=bootstrap_v3 по умолчанию грузятся чанки заданные в наборе параметров getTables_bootstrap_v3 yadi.sk/i/Mio_2Fxn2r79jg
Если gettables_frontend_framework_style=bootstrap_v4, то набор параметров getTables_bootstrap_v4, а если gettables_frontend_framework_style=test, то будет пробовать найти набор параметров getTables_test

чтоб грузило css и js надо включить соответствующие gettables_load_frontend_framework_style. Включение загрузки задается в gettables_load_что-то-там
Александр Туниеков
05 октября 2020, 16:14
0
Мда… так и знал стоит выложить и куча работы добавят :-).