GoogleSheets. События, MIGX и интеграция с другими компонентами.
        Приветствую, друзья!
Накопилось очень много пунктов в TODO списке по компоненту и нашлось время несколько пунктов зачеркнуть.
Итак, что нового в этом обновлении:
Первом делом в импорте убрана синхронизация, как написал @Иван Кизименко здесь она не логична, так как компонент синхронизирует только таблицу с сайтом, а наоборот пока не умеет. Синхронизация есть только в экспорте, ловим изменения на сайте и записываем в гугл таблицу. А вообще, нужна ли эта обратная синхронизация, если есть крон?
Данную идею подкинул пользователь 696050, так как я очень люблю migx-таблицы, то решил ее реализовать.
Окно настройки:

Параметры:
Рассмотрим вариант:
Есть форма на сайте для отзывов. Все отзывы сохраняются в migx таблице.
Чтобы занести новый отзыв в migx таблицу вам потребуется написать свой сниппет — это отличный вариант для тех кто умеет это делать. А для тех кто не умеет и установлен компонент:
— Добавляем к форме хук GoogleSheetsSaveForm и новые отзывы будут сохраняться в гугл таблице.
— Импортировать данные в migx таблицу:
Стоит отменить, что работать можно только с migx-таблицей, у которой все поля одинаковые.
Список всех событий указаны в документации.
Ранее в импорте и экспорте были условия, по которым фильтровались данные. Теперь вместо этих условий пришли события, что позволит не только фильтровать данные, но и менять их.
Несколько примеров:
1. Фильтруем ресурсы перед импортом и сразу же устанавливаем значения по умолчанию.
@Miša Bulic
@Леонид
Я вас услышал)
2. Выбираем ресурсы с определенным шаблоном
3. Прибавляем 10% к цене, а текущую цену записываем в старую цену.
4. Менять значение самого поля. Например, мы добавили поле template, которое выведет id шаблона, но мы хотим чтобы было в таком формате: Название шаблона (id).
Результат:

Больше примеров вы сможете найти в документации
Цена компонента пока остается без изменения — всего 990 руб. Купить можно в modstore
Хорошей всем недели! Не болейте, желаю всем 36.6.
    
    
                                                        Накопилось очень много пунктов в TODO списке по компоненту и нашлось время несколько пунктов зачеркнуть.
Итак, что нового в этом обновлении:
- Улучшен Импорт/Экспорт
 - Добавлен Импорт/Экспорт MIGX таблиц
 - Добавлены события
 - Поддержка других компонентов
 
Импорт
Первом делом в импорте убрана синхронизация, как написал @Иван Кизименко здесь она не логична, так как компонент синхронизирует только таблицу с сайтом, а наоборот пока не умеет. Синхронизация есть только в экспорте, ловим изменения на сайте и записываем в гугл таблицу. А вообще, нужна ли эта обратная синхронизация, если есть крон?
MIGX экспорт/импорт
Данную идею подкинул пользователь 696050, так как я очень люблю migx-таблицы, то решил ее реализовать.
Окно настройки:

Параметры:
- URL таблицы — ссылка гугл таблицы
 - Лист таблицы — название листа в гугл таблице
 - Ресурс — id ресурса
 - MIGX — дополнительное поле с типом migx
 
Рассмотрим вариант:
Есть форма на сайте для отзывов. Все отзывы сохраняются в migx таблице.
Чтобы занести новый отзыв в migx таблицу вам потребуется написать свой сниппет — это отличный вариант для тех кто умеет это делать. А для тех кто не умеет и установлен компонент:
— Добавляем к форме хук GoogleSheetsSaveForm и новые отзывы будут сохраняться в гугл таблице.
— Импортировать данные в migx таблицу:
- В ручную в админке
 - По крону
 - При отправке формы через js
 
$.ajax({
  url: '/assets/components/googlesheets/action.php',
  type: "POST",
  data: {
    id: 5, // id импорта
    mode: 'import', // import or export
    auth_code: 'значение системной настройки googlesheets_auth_code'
  },
  success: function(data, textStatus, jqXHR){ console.log(JSON.parse(data)) },
  dataType: 'text'
});- Можно и в хуке добавить импорт:
 
$GoogleSheets->process('import', 5);Стоит отменить, что работать можно только с migx-таблицей, у которой все поля одинаковые.
События
Список всех событий указаны в документации.
Ранее в импорте и экспорте были условия, по которым фильтровались данные. Теперь вместо этих условий пришли события, что позволит не только фильтровать данные, но и менять их.
Несколько примеров:
1. Фильтруем ресурсы перед импортом и сразу же устанавливаем значения по умолчанию.
@Miša Bulic
@Леонид
Я вас услышал)
if($modx->event->name == 'gsOnImportValues') {
    if($range == 'ImportResources') {
        $values = array_filter($values, function($v){
           return $v['id'] != 5;
        });
        foreach($values as $idx => $value) {
            $values[$idx] = array_merge(array(
                'template' => 10,
                'menutitle' => $value['pagetitle'],
            ),$value);
        }
        $modx->event->params['values'] = $values;
    }
}2. Выбираем ресурсы с определенным шаблоном
<?php
if($modx->event->name == 'gsOnBeforeGetResource') {
    $query->where(array('template' => 3)); // 3  - id шаблона           
}3. Прибавляем 10% к цене, а текущую цену записываем в старую цену.
<?php
if($modx->event->name == 'gsOnGetProducts') {
    $modx->event->params['products'] = array_map(function($product){
        if(isset($product['old_price']) && !empty($product['price'])) {
            $product['old_price'] = $product['price'];
        }
        if(!empty($product['price'])) {
            $product['price'] = $product['price'] * 1.1;
        }
        return $product;
    },$products);   
}4. Менять значение самого поля. Например, мы добавили поле template, которое выведет id шаблона, но мы хотим чтобы было в таком формате: Название шаблона (id).
<?php
if($modx->event->name == 'gsOnBeforeExportValues') {
    $modx->event->params['values'] = array_map(function($value) use (& $modx){
        if(!empty($value['template'])) {
            // Получаем нужный нам шаблон
            if($template = $modx->getObject('modTemplate', $value['template'])) {
                $value['template'] = $template->get('templatename') . ' (' . $value['template'] . ')';
            }
        }
        return $value;
    },$values); 
}Результат:

Больше примеров вы сможете найти в документации
Цена компонента пока остается без изменения — всего 990 руб. Купить можно в modstore
Хорошей всем недели! Не болейте, желаю всем 36.6.
            
                Поблагодарить автора            
            
                 Отправить деньги            
        
        
            Комментарии: 4
                А можно ли добавить импорт MIGX-таблицы не в один ресурс? А несколько? Плагином определяя id (например, первая колонка в файле)? Экспорт тоже работет из MIGX поля?            
                    А можно ли добавить импорт MIGX-таблицы не в один ресурс?Пока нет.
Экспорт тоже работет из MIGX поля?Да
                Через плагин динамически подставлять id импорта тоже не получится?            
                    
                Через плагин можно все            
                    
                            Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.