June 10, 2023

Автоматически записать данные в поле анкеты геткурс. На примере записи даты заполнения анкеты

Шаг 1. Создаем поле анкеты с типом "Дата"

Переходим в раздел Анкеты. В созданной анкете создаем поле даты. Поле можно назвать "Дата заполнения анкеты". Сохраняем

Шаг 2. Добавляем блок анкеты на страницу. Присваиваем блоку класс

Нужно поставить класс блоку, например survey_block Это нужно для того, чтобы скрипт обратился к нужному нам блоку с анкетой

Шаг 3. Пишем js код

Добавляем блок JavaScript-код и вставляем туда код

JS v1.0

/**
 * Script Name: JS Запись данных в поле анкеты на Getcourse
 * Script description: Автоматически записать данные в поле анкеты геткурс c помощью js кода. На примере записи даты заполнения анкеты
 * Version: 1.0
 * Author: Максим Калмыков
 * Url: https://t.me/getcomponent
 */

$(() => {

  // Получаем дату для записи в поле анкеты
  const nowDate = new Date().toLocaleDateString('ru');

  setTimeout(() => {

    // Записываем данные в поле анкеты     
    // Вместо 1111111 - id поля анкеты
    putDataToSurveyInput(1111111, nowDate, '.survey_block'); // putDataToSurveyInput(ID_ПОЛЯ_АНКЕТЫ, ЧТО_ЗАПИСЫВАЕТСЯ_В_ПОЛЕ, 'СЕЛЕКТОР_БЛОКА_АНКЕТЫ');

  })


});


// Функция для записи данных в поле анкеты
function putDataToSurveyInput(surveyDataInputId, enteredData = "Данные в поле анкеты", surveyBlocksSelector = '.lt-form-survey') {

  // Получаем блок анкеты
  const surveyBlocks = $(surveyBlocksSelector);

  surveyBlocks.each((_, survey) => {
    // Получаем скрытый инпут в анкете
    const surveyJsonInput = $(survey).find('input[name="surveyData"]');

    // Получаем поле для записи данных
    const fieldForEntered = $(survey).find(`#field-input-${surveyDataInputId}`);

    // Если такие поля не найдены, то скрипт дальше не выполняем
    if (fieldForEntered.length === 0 || surveyJsonInput.length === 0) return;

    // Скрываем видимость блока поля анкеты
    fieldForEntered.parents('.field-wrapper').hide();

    // Получаем объект данных анкеты
    const surveyData = JSON.parse(surveyJsonInput.val());

    // Записываем в свойство объекта данные
    surveyData[surveyDataInputId] = enteredData;

    // В скрытый инпут записываем json с обновленном значением поля
    surveyJsonInput.val(JSON.stringify(surveyData));


    // Если это поле type="text" или тег "TEXTAREA" можно записать в них видимые данные (не обязательно)
    if (fieldForEntered.attr('type') === 'text' || fieldForEntered[0]?.tagName === 'TEXTAREA') {
      fieldForEntered.val(enteredData);
    }

  })


}

Нужно прописать в функции параметры

putDataToSurveyInput(ID_ПОЛЯ_АНКЕТЫ, ЧТО_ЗАПИСЫВАЕТСЯ_В_ПОЛЕ, 'СЕЛЕКТОР_БЛОКА_АНКЕТЫ');

СЕЛЕКТОР_БЛОКА_АНКЕТЫ - класс блока анкеты который мы задали (например survey_block или survey_block_1 или другой)

Как найти ID_ПОЛЯ_АНКЕТЫ?

1. Навести мышку на поле анкеты

2. Нажать ПКМ -> Просмотреть код

3. В html коде скопировать цифры из атрибута id="field-input-1673820"

Вставляем id в код

Шаг 4. Проверяем

После сохранения можно проверить в коде страницы или отправить анкету

*Скриптом это поле скрывается при просмотре страницы, на данном скриншоте оно показано с помощью инструментов разработчика в хроме

Результат после отправки анкеты

Готово


Доп. заметки по решению

1. В поле анкеты записать с помощью скрипта можно не только дату и не только в поле с типом "Дата"

2. Если скрипт будет использоваться часто в аккаунте, можно подключить функцию через тему в настройки аккаунта getcourse. Это позволит писать только вызов функции там где нужно (т.е. без самого тела функции, это позволит менять(если нужно будет) функцию из единого места - в теме)

3 В данном скрипте запись в скрытое поле происходит после загрузки страницы(+небольшой задержки). Можно записать и по триггеру нажатия на кнопку отправки анкеты (это если вдруг хочется заморочиться и учитывать ситуацию при которой пользователь зашел заполнять анкету в 23:59 а отправил на след. день и считать именно то число, когда нажал кнопку отправки )

Нужно задать класс для кнопки анкеты, например btn_send_survey

$(() => {

  // Получаем дату для записи в поле анкеты
  const nowDate = new Date().toLocaleDateString('ru');


  // Записать после загрузки страницы
  setTimeout(() => {
    putDataToSurveyInput(1673718, nowDate, '.survey_block');
  })



  // Записать при клике на кнопку 
  $('.btn_send_survey .btn').on('click', function (e) {
    e.preventDefault();

    // Записываем данные
    putDataToSurveyInput(1673718, nowDate, '.survey_block');

    // затем отправляем форму
    $(this).parents('form').submit()
  });

});

// ...

Телеграм-канал: https://t.me/getcomponent