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

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

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
11 октября 2020, 01:52
+1
И вообще в $.ajax лучше добавить dataType: «json», а в action.php писать ответы скрипта так:
$message = 'Access denied action.php';
    echo json_encode(
            ['success' => false,
            'message' => $message,]
            );
    return;
Александр Туниеков
11 октября 2020, 01:45
+1
Это где не обновляется? В <input type=«number» name=«price» class=«autosave» data-product_id="{$id}" value="{$price | replace: ' ': ''}"/> она должна остаться такая какая введена. В другом месте можно скриптом обновлять.
И причем тут success?
Александр Туниеков
11 октября 2020, 01:28
0
А зачем перезагрузка-то если цена успешно обновлена то в поле и так актуальные данные же
Александр Туниеков
11 октября 2020, 00:21
+1
success должно написать. Разбираться надо почему не пишется.
Но я тебе основы подсказал. Дальнейший обвес сам сделаешь. Ок?
Александр Туниеков
10 октября 2020, 23:56
+1
Кстати еще ошибочка
<script>
$(document).on('change','.autosave',function(){ 
    $.post('assets/components/autosave/action.php', 
    { product_id: $(this).data('product_id'), price: $(this).val() })
      .done(function(data) { 
        alert("Data Loaded: " + data);
        console.log($.post);
      });
});
</script>
вместо price value почемуто поставил.
Александр Туниеков
10 октября 2020, 23:52
+1
что-то ты меня озадачил… ты то смотришь?
даже код проверил. У меня вот пост yadi.sk/i/BXVEFzq5aFPfpQ
Александр Туниеков
10 октября 2020, 23:34
+1
А что в пост параметры отправляется?
Пустой ответ это либо (int)$_POST['product_id'] == 0
Либо продукт не найден.
Александр Туниеков
10 октября 2020, 22:58
+1
Я не проверял код. Счас посмотрел здесь скобочку забыл
if($product = $modx->getObject('msProduct',(int)$_POST['product_id']){
надо
if($product = $modx->getObject('msProduct',(int)$_POST['product_id'])){
Проверяйте!
В начале /assets/components/autosave/action.php напишите
error_reporting(E_ALL);
ini_set('display_errors', 1);
чтоб ошибки показывал
Александр Туниеков
10 октября 2020, 04:10
1
+1
А вообще можно примерно так сделать простой редактор поля price
в чанке вывода результатов mfilter2 для поля price пишем:
<input type="number" class="autosave" data-product_id="[[+id]]" value="[[+price]]"/>
На страницу или в отдельный файл пишем скрипт
<script>
$(function() {
    $(document).on('change','.autosave',function(){
        $.post( "/assets/components/autosave/action.php", 
        { product_id: $(this).data('product_id'), value: $(this).val() })
          .done(function( data ) {
            alert( "Data Loaded: " + data );
          });
    });
});
</script>
Создаем файл /assets/components/autosave/action.php
<?php
define('MODX_API_MODE', true);
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';

$modx->getService('error', 'error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget('FILE');

if (!$modx->user->hasSessionContext('mgr')){
    echo 'Access denied';
    exit;
}

if((int)$_POST['product_id'] > 0){
    if($product = $modx->getObject('msProduct',(int)$_POST['product_id']){
        $product->set('price', $_POST['price']);
        if($product->save()) echo 'success';
    }
}
Александр Туниеков
10 октября 2020, 03:31
0
Кстати существует атрибут content=editable на саму таблицу, которую вывожу, через mFilter2.
Первый раз такое слышу.
если товаров больше 100k
Возможно 100k проще редактировать через excel и потом только выгружать в модкс. Но вот чтобы менеджеры сами 100k товаров редактировали я с таким не сталкивался. Обычно есть прайсы поставщиков и берем их цены умножаем на коофициент и загружаем. У вас не прайсы? Именно вручную 100k товаров редактировать надо?
Александр Туниеков
08 октября 2020, 20:57
0
что-то вроде этого воткните
editor.on("change", function() {
    textarea.val(editor.getSession().getValue());
    //textarea.trigger('change');
})
Александр Туниеков
08 октября 2020, 11:26
0
ctrl f5 делали? и редактор только в модалке при редактировании. yadi.sk/i/Vf4qQw0XBt0Vew
Александр Туниеков
08 октября 2020, 10:00
+1
Можно же выборку сделать через pdoPage с элементом getTable, без pdoTools параметров, или ошибаюсь?
нельзя! данные в таблицу только pdoTools дает. без pdoTools параметров ничего нельзя.
Ещё заметил, что при GetTableFetch в quickview, что некоторые id дублируются аж по 8 штук,
Наверно в pdoTools к 1 id leftJoin нескольких строк есть
в GetTableFetch Замени строку $log .= $response['log']; на
$log = '<pre class="getTablesLog" style="width:900px;">' . print_r($getTables->pdoTools->getTime(), 1) . '</pre>';
и посмотри sql запрос, что pdoTools сформировал.
Александр Туниеков
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
Через процессор нет способа. А зачем? и через какой процессор?