GoogleSheets. События, MIGX и интеграция с другими компонентами.

Приветствую, друзья!

Накопилось очень много пунктов в TODO списке по компоненту и нашлось время несколько пунктов зачеркнуть.
Итак, что нового в этом обновлении:


Импорт


Первом делом в импорте убрана синхронизация, как написал @Иван Кизименко здесь она не логична, так как компонент синхронизирует только таблицу с сайтом, а наоборот пока не умеет. Синхронизация есть только в экспорте, ловим изменения на сайте и записываем в гугл таблицу. А вообще, нужна ли эта обратная синхронизация, если есть крон?

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. Фильтруем ресурсы перед импортом и сразу же устанавливаем значения по умолчанию.
@Misha 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.
Aleksandr Huz
20 апреля 2020, 14:59
modx.pro
2
195
+9
Поблагодарить автора Отправить деньги

Комментарии: 0

Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
0