Архивы Май 2025

СОГЛАСИЕ НА ОБРАБОТКУ ПЕРСОНАЛЬНЫХ ДАННЫХ

Я, субъект персональных данных ,_________________________________________________________
(Ф. И. О.)

зарегистрирован/а ,_____________________________________________________________________
(адрес)

_______________________________________________________________________________________

(серия и номер документа, удостоверяющего личность, кем и когда выдан)

в соответствии с Федеральным законом № 152-ФЗ «О персональных данных» свободно, в своей воле и в своем интересе, а также подтверждая свою дееспособность даю согласие progaem.com, (далее – Оператора) на обработку на следующих условиях:

  1. Данное Согласие дается на обработку персональных данных, как без использования средств автоматизации, так и с их использованием.
  2. Согласие дается на обработку следующих моих персональных данных:
    1. персональные данные, не являющиеся специальными или биометрическими: ФИО, контактный номер телефона, e-mail, никнейм в мессенджере Telegram/Whatsapp
    2. специальные категории персональных данных: нет.
    3. биометрические персональные данные: нет.
  3. Цель обработки персональных данных: Получение консультаций для заключения договора, обратная связь с работниками Оператора, ведение статистики
  4. В ходе обработки над персональными данными будут совершены следующие действия: сбор, обработка, хранение и уничтожение персональных данных.
  5. Следующие третьи лица обрабатывают предоставленные персональные данные по поручению Оператора: нет.
  6. Персональные данные могут передаваться следующим третьим лицам: нет.
  7. Данное согласие действует 10 лет.
  8. Согласие может быть отозвано субъектом персональных данных или его представителем путем направления письменного заявления по адресу, указанному в начале текста настоящего Согласия.

«__» ________ 20__ г.        ________________    /    ___________
                                                              Ф. И. О.                               Подпись


Bitrix CMS : Автоматическое добавление номеров страниц пагинации

Чтобы автоматически добавлять номера страниц пагинации в мета-теги на CMS Битрикс, можно использовать следующие подходы:

1. Решение через обработчик события (глобально для всех страниц)

Добавьте код в /bitrix/php_interface/init.php:

AddEventHandler('main', 'OnBeforeProlog', 'modifyMetaForPagination');
function modifyMetaForPagination() {
    global $APPLICATION;

    foreach ($_GET as $key => $value) {
        if (strpos($key, 'PAGEN_') === 0) {
            $pageNumber = (int)$value;
            if ($pageNumber > 1) {
                // Обработка Title
                $currentTitle = $APPLICATION->GetTitle();
                if ($currentTitle) {
                    $APPLICATION->SetTitle($currentTitle . ' - Страница ' . $pageNumber);
                }

                // Обработка Description
                $currentDesc = $APPLICATION->GetPageProperty('description');
                if ($currentDesc) {
                    $APPLICATION->SetPageProperty('description', $currentDesc . ' - Страница ' . $pageNumber);
                }
            }
            break;
        }
    }
}

Преимущества:

  • Работает для всех страниц с пагинацией.
  • Не требует изменения шаблонов компонентов.

2. Решение через шаблон компонента (например, для catalog.section)

Добавьте код в начале шаблона компонента (например, /bitrix/templates/ваш_шаблон/components/bitrix/catalog.section/your_template/template.php):

if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) die();

global $APPLICATION;

$pageNumber = (int)$_GET['PAGEN_1'];
if ($pageNumber > 1) {
    // Обновляем Title
    $originalTitle = $APPLICATION->GetTitle();
    $APPLICATION->SetTitle($originalTitle . ' - Страница ' . $pageNumber);

    // Обновляем Description
    $originalDesc = $APPLICATION->GetPageProperty('description');
    $APPLICATION->SetPageProperty('description', $originalDesc . ' - Страница ' . $pageNumber);
}

// Далее идет стандартный код шаблона

Преимущества:

  • Локальное изменение только для конкретного компонента.
  • Позволяет гибко настраивать формат для разных разделов.

Важные замечания:

  1. Проверка номера страницы: Код добавляет номер только если > 1 (чтобы избежать “Страница 1”).
  2. Кодировка и SEO: Убедитесь, что мета-теги не обрезаются (проверьте максимальную длину).
  3. Множественная пагинация: Если на странице несколько пагинаций (например, PAGEN_1 и PAGEN_2), код обработает первый найденный параметр.

Пример результата для PAGEN_1=2:

<title>Каталог напольных покрытий - Страница 2</title>
<meta name="description" content="Широкий выбор напольных покрытий. Страница 2">

Если есть вопросы задавайте в комментариях.


Об авторе сайта

Меня зовут Антон и я программист 🙂

Мой стек технологий : Опыт разработки PHP (в том числе PHP 8.3), MySQL, PostgreSQL, Sqlite , MariaDB и MS SQL, а также с Redis и Memcached для кеширования. Использую JavaScript, jQuery, HTML, CSS3 и Ajax для разработки фронтенда, и работаю с CMS, такими как WordPress, Joomla и OpenCart, Bitrix и другие. Также имею опыт работы с Docker, Nginx, Git и администрированием серверов на Linux.

  • Работа с CMS: установка, администрирование и настройка сайтов на CMS Bitrix, Joomla, WordPress, HostCMS.
  • Верстка и настройка шаблонов: разработка и адаптация шаблонов сайтов по макетам Figma для CMS Bitrix, Joomla, WordPress и других систем управления контентом.
  • Оптимизация производительности: настройка и оптимизация работы хостинга для повышения стабильности и скорости сайтов.
  • SEO-оптимизация: улучшение видимости сайтов в поисковых системах, настройка редиректов (301, 302) и оптимизация контента.
  • Интеграция с Bitrix24: настройка и внедрение форм на сайты, работа с CRM-системой Bitrix24 для автоматизации процессов.
  • Создание технической документации: подготовка инструкций и документации по работе с сайтами и взаимодействию пользователей с функционалом.
  • Администрирование серверов на базе Linux: опыт настройки и сопровождения серверов с использованием Ubuntu 24.04, Debian 12, CentOS 10.
  • Использование современных инструментов: опыт работы с нейросетями и инструментами искусственного интеллекта (GPT-4o, Claude-3.5, DeepSeek) для оптимизации процессов и повышения эффективности.
  • Опыт работы с Python 3.11 (парсинг, создание БД, экспорт в Exel )
  • Управление проектами в Jira Atlassian, Trello , Asana, Битрикс24. Написание инструкций для клиентов и сотрудников.

Google Apps Script: Мощный инструмент для автоматизации в Google

Сегодня поговорим о Google Apps Script — инструменте, который позволяет превратить рутину в магию автоматизации, расширяя возможности Google Workspace. Если вы ещё не знакомы с ним, эта статья станет вашим гидом в мир скриптов, триггеров и бесшовной интеграции с сервисами Google.

Что такое Google Apps Script?

Google Apps Script — это облачная платформа для написания скриптов на основе JavaScript, созданная Google для автоматизации задач и разработки кастомных решений внутри их экосистемы. Это как «волшебная палочка» для тех, кто работает с Google Таблицами, Документами, Gmail, Диском и другими сервисами.

GAS не требует настройки серверов, IDE или сложных инструментов. Всё делается прямо в браузере через встроенный редактор.

Зачем он нужен?

Автоматизация рутины:

  • Отправка писем при изменении данных в таблице.
  • Генерация отчётов в Docs на основе шаблонов.
  • Синхронизация данных между Google Sheets и внешними API.

Расширение функционала Google-сервисов:

  • Создание кастомных функций в Таблицах (например, =GET_WEATHER(“Москва”)).
  • Разработка аддонов для Google Workspace.

Быстрое прототипирование:

  • За час можно создать MVP веб-приложения, которое работает с вашими данными из Google Drive.

Основные возможности

1. JavaScript + Google API

GAS использует синтаксис JavaScript, но с добавлением специальных классов для работы с Google-сервисами. Например:

// Отправить email через Gmail
function sendEmail() {
  const subject = "Привет из Apps Script!";
  const body = "Это тестовое письмо.";
  GmailApp.sendEmail("[email protected]", subject, body);
}

2. Встроенные сервисы

  • SpreadsheetApp: Чтение/запись данных в Google Таблицы.
  • DocumentApp: Создание и редактирование Google Документов.
  • DriveApp: Управление файлами на Google Диске.
  • UrlFetchApp: Отправка HTTP-запросов к внешним API.

3. Триггеры

Скрипты могут запускаться автоматически:

  • По событию: Например, при отправке формы или изменении ячейки в Таблице.
  • По расписанию: Каждый день в 9:00, раз в час и т.д.

Пример триггера для ежедневного отчёта:

function createDailyReport() {
  const sheet = SpreadsheetApp.getActiveSpreadsheet();
  const data = sheet.getRange("A1:B10").getValues();
  // ... логика формирования отчёта ...
}

4. Веб-приложения

С помощью GAS можно развернуть веб-приложение, которое будет доступно по URL. Пример:

function doGet() {
  return HtmlService.createHtmlOutput("<h1>Hello World!</h1>");
}

Примеры использования

Кейс 1: Персонализированная рассылка из Google Sheets

  1. В таблице есть столбцы: Email, Имя, Дата подписки.
  2. Скрипт ежедневно проверяет, кому нужно отправить письмо.
  3. Использует шаблон из Google Docs для генерации текста.
function sendPersonalizedEmails() {
  const sheet = SpreadsheetApp.getActive().getSheetByName("Contacts");
  const data = sheet.getRange("A2:C").getValues();

  data.forEach(row => {
    const [email, name, date] = row;
    const template = DocumentApp.openById("ID_ШАБЛОНА").getBody().getText();
    const message = template.replace("{{name}}", name);
    GmailApp.sendEmail(email, "Ваш персональный отчёт", message);
  });
}

Кейс 2: Интеграция с внешним API

Получение курса валют и запись в Google Таблицу:

function fetchCurrencyRates() {
  const response = UrlFetchApp.fetch("https://api.exchangerate-api.com/v4/latest/USD");
  const data = JSON.parse(response.getContentText());
  const rate = data.rates.RUB;

  const sheet = SpreadsheetApp.getActive().getSheetByName("Rates");
  sheet.getRange("A1").setValue(`Курс USD/RUB: ${rate}`);
}

Как начать? Пошагово

  1. Откройте редактор скриптов:
    В Google Таблицах или Документах: Расширения → Apps Script.
  2. Напишите первую функцию:
    Например, скрипт, который добавляет текущую дату в ячейку:
<!-- wp:code -->
<pre class="wp-block-code"><code></code></pre>
<!-- /wp:code -->
  1. Запустите скрипт:
    Нажмите ▶️ в редакторе и разрешите доступ к данным.
  2. Добавьте триггер:
    В редакторе: Триггеры → Добавить триггер → Выберите функцию и условия.

Ограничения

  • Время выполнения: 6 минут для триггеров, 30 минут для ручного запуска (бесплатный аккаунт).
  • Квоты: Ограничения на количество писем (100/день), запросов к API (20 000/день).
  • Сложные вычисления: Не подходит для ресурсоёмких задач (лучше использовать Cloud Functions).

Советы для разработчиков

Используйте кэширование:

<!-- wp:code -->
<pre class="wp-block-code"><code></code></pre>
<!-- /wp:code -->

Работайте с библиотеками:
Подключайте сторонние JS-библиотеки через Resources → Libraries.

Дебаггинг:
Используйте Logger.log() и просматривайте логи в View → Logs.

Оптимизируйте запросы:
Читайте/пишите данные диапазонами, а не по ячейкам:

// Плохо:
sheet.getRange("A1").setValue("1");
sheet.getRange("A2").setValue("2");

// Хорошо:
sheet.getRange("A1:A2").setValues([["1"], ["2"]]);

Почему стоит попробовать Apps Script?

  • Low-code: Даже новички смогут автоматизировать задачи за пару часов.
  • Интеграция без боли: Не нужно настраивать OAuth для Google-сервисов.
  • Бесплатно: Для старта хватит обычного аккаунта Google.
  • Мощь JavaScript: Под капотом — знакомый язык с асинхронными возможностями (ES6+).

Заключение

Google Apps Script — это идеальный инструмент для тех, кто хочет выжать максимум из Google Workspace без лишних сложностей. Он подходит для:

  • Маркетологов: Автоматизация отчётов и рассылок.
  • Разработчиков: Быстрое прототипирование интеграций.
  • Админов: Управление документами и правами в компании.

Попробуйте прямо сейчас: Откройте Google Таблицы, создайте скрипт, который добавляет текущую дату в ячейку при открытии файла. Вы удивитесь, насколько это просто!

А вы уже используете Apps Script в своих проектах? Делитесь кейсами в комментариях!


Как разместить сообщение о конфиденциальности и cookie на сайте

Последнее время часто прилетает задачи о размещении плашки cookie на сайте.
Это можно сделать, разместив страницу кусок из Html , Javascript и Css кода.

Файлы cookie — это небольшие текстовые файлы, которые сохраняются на устройстве пользователя при посещении веб-сайта. Cookies могут быть использованы для запоминания предпочтений пользователя, аналитики и других целей.

Лучше разместить сообщение внизу страницы – это стандартное место для уведомлений, которые не отвлекают от основного контента.

Кусок html кода, разместите в нем текст сообщения :

 <div id="cookie-banner" class="cookie-banner">
  <p>Продолжая просмотр этого сайта, Вы соглашаетесь на обработку файлов cookie в <a href="https://site.com/" target="_blank">соответствии с политикой использования</a> файлов cookie.</p>
  <button id="accept-cookie">Принять</button>
  <button id="decline-cookie">Отклонить</button>
</div>

Javascript код . Параметр 10 * 24 * 60 * 60 * 1000 отвечает за количество дней, которое сообщение не будет показываться после нажатия кнопки Принять . В данном случае 10 дней :

<script>
  if (!localStorage.getItem('cookies-accepted')) {
    document.getElementById('cookie-banner').style.display = 'block';
  }

  document.getElementById('accept-cookie').addEventListener('click', function () {
    localStorage.setItem('cookies-accepted', 'true');
    document.getElementById('cookie-banner').style.display = 'none';
  });

  document.getElementById('decline-cookie').addEventListener('click', function () {
    localStorage.setItem('cookies-accepted', 'false');
    document.getElementById('cookie-banner').style.display = 'none';
  });

  if (localStorage.getItem('cookies-accepted') === 'true') {
    setTimeout(function () {
      localStorage.removeItem('cookies-accepted');
    }, 10 * 24 * 60 * 60 * 1000);
  }
</script>

Css код . Стили , которые вы можете подредактировать для себя :

<style>
  .cookie-banner {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: #333;
    color: white;
    padding: 15px;
    text-align: center;
    z-index: 9999;
    display: none;
  }

  .cookie-banner button {
    background-color: #4CAF50;
    color: white;
    border: none;
    padding: 10px 20px;
    margin: 0 5px;
    cursor: pointer;
  }

  .cookie-banner button:hover {
    background-color: #45a049;
  }

  .cookie-banner a {
    color: #4CAF50;
    text-decoration: none;
  }

  .cookie-banner a:hover {
    text-decoration: underline;
  }
</style>

Вот общий код , который можно разместить внизу страницы , перед закрывающимся тэгом body . Отредактируйте для своего сайта.

 <div id="cookie-banner" class="cookie-banner">
  <p>Продолжая просмотр этого сайта, Вы соглашаетесь на обработку файлов cookie в <a href="https://site.com/" target="_blank">соответствии с политикой использования</a> файлов cookie.</p>
  <button id="accept-cookie">Принять</button>
  <button id="decline-cookie">Отклонить</button>
</div>

<style>
  .cookie-banner {
    position: fixed;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: #333;
    color: white;
    padding: 15px;
    text-align: center;
    z-index: 9999;
    display: none;
  }

  .cookie-banner button {
    background-color: #4CAF50;
    color: white;
    border: none;
    padding: 10px 20px;
    margin: 0 5px;
    cursor: pointer;
  }

  .cookie-banner button:hover {
    background-color: #45a049;
  }

  .cookie-banner a {
    color: #4CAF50;
    text-decoration: none;
  }

  .cookie-banner a:hover {
    text-decoration: underline;
  }
</style>

<script>
  if (!localStorage.getItem('cookies-accepted')) {
    document.getElementById('cookie-banner').style.display = 'block';
  }

  document.getElementById('accept-cookie').addEventListener('click', function () {
    localStorage.setItem('cookies-accepted', 'true');
    document.getElementById('cookie-banner').style.display = 'none';
  });

  document.getElementById('decline-cookie').addEventListener('click', function () {
    localStorage.setItem('cookies-accepted', 'false');
    document.getElementById('cookie-banner').style.display = 'none';
  });

  if (localStorage.getItem('cookies-accepted') === 'true') {
    setTimeout(function () {
      localStorage.removeItem('cookies-accepted');
    }, 10 * 24 * 60 * 60 * 1000);
  }
</script>

Для упрощения процесса размещения уведомлений и управления cookies на вашем сайте, можно использовать готовые решения. Существуют плагины и сторонние сервисы, которые помогут вам автоматически создавать уведомления о конфиденциальности и cookie. Вот несколько популярных инструментов:

  • Cookiebot — сервис для соблюдения GDPR, который автоматически собирает согласие пользователей на cookies.
  • OneTrust — платформа для управления согласием пользователей и соблюдения стандартов защиты данных.
  • Termly — сервис, предоставляющий инструменты для создания уведомлений и политики конфиденциальности.

Если вы хотите заказать услугу по размещению cookie на вашем сайте, вы может связаться со мной через Контакты , а также заказать различные услуги.

Выглядит такое сообщение примерно так :