Почему регистр нельзя построить на т триггере
Перейти к содержимому

Почему регистр нельзя построить на т триггере

  • автор:

Триггеры в Google Tag Manager

Контекстная, таргетированная реклама и веб-аналитика

Триггер (от анг. слова trigger в значении спусковой крючок, или приводящий в действие элемент) в GTM – это условие, при котором активируется или блокируется тег. Для запуска тега должен быть хотя бы один триггер.

Таким образом, нельзя создать тег без триггера. Триггер может принимать значение «true» (истина), либо «false» (ложь). Он выполняется только в том случае, когда его значение является истинным, и если выполняются все условия триггера.

А чтобы это определить (true или false), значение переменной сравнивается с тем, которое задано в триггере. Все триггеры в Google Tag Manager связаны с событиями. Также они могут иметь дополнительные условия или фильтры. В старой версии диспетчера тегов Google триггер назывался «правилом».

Существует два способа создания триггеров:

1. перейти на вкладку «Триггеры» и нажать на кнопку «Создать»;

Триггеры в Google Tag Manager

2. через сам тег в блоке «Триггеры» по нажатию на «+» если в нем уже есть триггеры;

Триггеры в Google Tag Manager

или же через пустую область блока, если триггеры к тегу еще не были добавлены.

Триггеры в Google Tag Manager

Тип триггера представляет собой комбинацию события GTM и типа взаимодействия (или события), которое вы хотите, чтобы GTM начал прослушивать. Они разбиты на несколько категорий:

  • Просмотр страницы;
  • Клик;
  • Взаимодействие пользователей;
  • Другое;

Разберем каждый из них последовательно. Но перед тем, как создавать новый триггер, вы должны четко осознать, какое событие GTM должно запустить ваш тег.

Просмотр страницы

Триггеры «Просмотры страницы»

Триггеры «Просмотры страницы»

  • Модель DOM готова (DOM Ready) — передается gtm.dom событие, как только браузер загрузил объектную модель документа;
  • Окно загружено (Window Loaded) – передается gtm.load событие после завершения загрузки всей страницы, когда окно полностью загружено;
  • Просмотр страницы (Page View) – передается gtm.js событие, когда контейнер GTM готов к работе.

Google Tag Manager передает эти три события на уровень данных по умолчанию. Убедиться в этом можно перейдя в режим предварительного просмотра.

Триггеры в Google Tag Manager

Перейдя на сайт в режиме отладки, вы увидите:

Триггеры в Google Tag Manager

Режим отладки – три события

Выбрав событие, например, Window Loaded, и перейдя на вкладку «Variables» (Переменные), можно просмотреть зафиксированное пользовательское событие (переменная _event) и его значение (value – в нашем примере gtm.load):

Триггеры в Google Tag Manager

или у переменной «Пользовательское событие»:

Триггеры в Google Tag Manager

Переменная «Пользовательское событие»

Клик

Тип триггера фиксирует клики по ссылкам или любым кликабельным элементам сайта.

Триггеры в Google Tag Manager

  • Все элементы — передается gtm.click событие когда на странице щелкнут любой элемент;
  • Только ссылки – передается gtm.linkClick событие при нажатии на тег элемента HTML.

Например, создадим триггер на «Все элементы» с условием активации триггера «Все клики».

Триггеры в Google Tag Manager

Тип триггера – Клик – Все элементы

В таком случае при каждом клике по любой области на странице в режиме предварительного просмотра GTM будет фиксировать событие gtm.click:

Триггеры в Google Tag Manager

Фиксация кликов в режиме отладки

То есть вне зависимости от того, куда пользователь кликнул (на кнопку, на фон, в пустую область на странице) – все события будут зафиксированы. Если же мы хотим отслеживать события только по определенным элементам, то вместо условия активации триггера «Все клики» выбираем «Некоторые клики»:

Триггеры в Google Tag Manager

Клики по определенным элементам

Нам станет доступна настройка активации триггера при наступлении события и выполнении всех условий, а именно:

  1. сначала задается переменная (на примере выше – Click Element);
  2. затем выбирается оператор из списка (равно, содержит, соответствует селектору CSS, регулярному выражению и т.д.);
  3. задается само значение (на изображении выше – CSS селектор одного элемента на сайте).

При необходимости можно задать несколько фильтров с помощью значка «+», либо же удалить ненужное с помощью «-».

Триггеры в Google Tag Manager

Добавление условий через +/-

Условия и фильтры связаны между собой логическим «И». То есть задав две строки, триггер будет срабатывать только тогда (событие будет считаться истинным и принимать значение true), когда одновременно соблюдаются первое И второе условия.

Триггеры в Google Tag Manager

В этом примере триггер сработает только тогда, когда пользователь кликнет по элементу с соответствующим селектором #features1 > div > ul > li:nthИ только на странице https://site.ru/catalog.

Важно: gtm.click — это предустановленные события GTM, они срабатывают при любом клике вне зависимости от того, был ли он осуществлен по некоторым элементам (при выборе такого) или же по всем элементам страницы. Главное, чтобы на нецелевых событиях не срабатывал тег, который активируется соответствующим триггером.

Триггеры в Google Tag Manager

Соблюдение условий активации триггера

Аналогичным образом настраиваются триггеры для «Только ссылки», а событие в режиме отладки будет называться gtm.linkClick:

Триггеры в Google Tag Manager

Однако данный тип триггера имеет дополнительные настройки. Такие же опции появляются при создании триггера «Отправка формы».

Триггеры в Google Tag Manager

Опции «Ждать теги» и «Проверка ошибок»

  • Ждать теги – опция блокирует действие (задержка открытия ссылок или отправки формы) до активации всех тегов в контейнере GTM, то есть пока все теги не загрузятся или пока не истечет указанное время ожидания (смотря что произойдет раньше), событие зафиксировано не будет. Задается в миллисекундах (2000 мс = 2 секунды);
  • Проверка ошибок – функция блокирует активацию тега, если для отслеживаемого элемента ссылки/формы не было выполнено действие по умолчанию («Клик по ссылке» или «Отправка формы»). Опция отвечает за то, на каких страницах нам необходимо использовать данный триггер.

Блок «Проверка ошибок» позволяет нам указать ГДЕ мы хотим использовать данный триггер, а блок с условиями активации определяет КОГДА этому быть. В качестве примера давайте разберем условие клика по ссылке (элемент – кнопка) со значением CSS-селектора и зададим «Проверка ошибок» на главной странице сайта.

Триггеры в Google Tag Manager

В режиме предварительного просмотра при клике на данную кнопку зафиксируется событие gtm.linkClick:

Триггеры в Google Tag Manager

Но если мы поменяем условие проверки ошибок, например, на такое:

Триггеры в Google Tag Manager

Пример условия проверки ошибок

То события gtm.linkClick фиксироваться не будут, поскольку не соблюдено условие ГДЕ. До обновления Google Tag Manager «Проверка ошибок» и условие активации назывались «Условия включения» и «Условия активации». Рядовой пользователь мог легко запутаться в данной терминологии.

Для триггера типа «Отправка формы» распространенным условием активации функции «Проверка ошибок» является указание только тех страниц, на которых есть формы.

Триггер можно использовать со специально встроенными переменными: Click Element, Click Classes, Click ID, Click Target, Click URL, Click Text.

Взаимодействие пользователей

Триггеры в Google Tag Manager

Триггеры «Взаимодействие пользователей»

  • Видео YouTube – срабатывает событие gtm.video когда пользователь просматривает видео на сайте (пока доступен только сервис-поставщик YouTube);
  • Глубина прокрутки – срабатывает событие gtm.scrollDepth в том случае, когда пользователь прокручивает страницу (как горизонтально, так и вертикально);
  • Доступность элемента — срабатывает событие gtm.elementVisibility когда элемент становится видимым на странице;
  • Отправка формы – срабатывает тег gtm.formSubmit в случае, если форма была отправлена.

Видео YouTube

Триггеры в Google Tag Manager

Пример настройки триггера «Видео YouTube»

Тоже самое, что было описано в разделе «Переменные»:

  • Начало (Start) – пользователь начинает просмотр видео;
  • Завершение (Complete) – пользователь достигает конца видео;
  • Приостановка (пауза), перемотка, буферизация (Pause, Seeking, Buffering) – пользователь останавливает, перематывает видео или когда происходит буферизация;
  • Ход просмотра (Progress) – пользователь проходит процентный или временный порог (время измеряется в секундах). Целые положительные числа указываются через запятую.
  • «Включить поддержку JavaScript API для всех видео YouTube»

Установив этот флажок, вы включите YouTube iFrame Player API. В результате ко всем URL видеопроигрывателя YouTube будет добавлен параметр enablejsapi = 1 для управления проигрывателем через iframe или JavaScript.

Как правило, данный триггер используется в связке со встроенными переменными из блока «Видео»: Video Provider, Video Status, Video URL, Video Title, Video Duration, Video Current Time, Video Percent, Video Visible.

Глубина прокрутки

Триггеры в Google Tag Manager

Триггер «Глубина прокрутки»

  • Глубина вертикальной прокрутки в процентах – 10, 25, 50, 75, 90 (пример);
  • Глубина горизонтальной прокрутки в пикселях – 100 (пример);
  • Условия активации триггера – Все страницы.

Как правило, данный триггер используется в связке со встроенными переменными из блока «Прокрутка»: Scroll Depth Threshold, Scroll Depth Units, Scroll Direction.

Доступность элемента

Триггеры в Google Tag Manager

Триггер «Доступность элемента»

Доступны следующие настройки:

Триггеры в Google Tag Manager

Метод выбора — id

В большинстве случаев название атрибута id на странице уникальное.

Триггеры в Google Tag Manager

Метод выбора – Селектор CSS

Применяется, если у отслеживаемого элемента нет атрибута id, а также если нам нужно отследить несколько элементов.

Например, у нас на сайте есть несколько форм отправки. У каждой из них есть свой уникальный id. Отслеживание всех форм через «Идентификатор» нам бы не подошло. А вот привязать метод выбора через «Селектор CSS» элементов вполне можно.

Совет: если не знаете, за что зацепиться, а нужно прослушивать конкретный элемент – цепляйтесь за его CSS-селектор. Получить его легко можно через консоль разработчика (в браузере Google Chrome вызывается через клавишу F12, см. скриншот выше).

Правило запуска этого триггера

Триггеры в Google Tag Manager

Правило запуска триггера

  • Один раз на страницу — если несколько элементов на странице сопоставляются идентификатором или CSS-селектором, этот триггер запускается только один раз, когда первый из них отображается на этой странице.

При перезагрузке страницы триггер сработает повторно;

  • Один раз на элемент — если несколько элементов на странице сопоставляются CSS-селектором, этот триггер будет запускаться когда каждый из них будет видимым на этой странице в первый раз. Если несколько элементов на странице имеют одинаковый идентификатор, только первый согласованный элемент будет запускать этот триггер;

Если на странице несколько форм, по которым по заполнения информации всплывает одно и то же сообщение, используйте эту настройку.

  • При каждом появлении элемента на экране — в этом случае триггер срабатывает каждый раз, когда соответствующий элемент становится видимым.

Минимальный процент видимости – какой процент выбранного элемента должен быть виден на экране для срабатывания триггера. Можно использовать собственную переменные.

Триггеры в Google Tag Manager

Минимальный процент видимости

Укажите минимальное время видимости – как долго выбранный элемент должен быть виден на экране для срабатывания триггера. Время периодов видимости на одной странице суммируется. Например, если элемент был виден в течение 4000 мс (4 секунд), затем скрыт из видимости окна браузера и после этого снова виден в течение 2000 мс, то общее время видимости этого элемента составит 6 000 мс.

Триггеры в Google Tag Manager

Минимальное время видимости

Если галочку не ставить, то время видимости для срабатывания триггера не будет играть роли.

Регистрация изменений DOM — настройка отслеживает элементы, которых изначально нет на странице, которые подгружены динамически и могут не входить в DOM (Объектная Модель Документа). Например, всплывающие формы. Если у вас есть на сайте есть такой контент, поставьте галочку, и такие элементы будут регистрироваться.

Триггеры в Google Tag Manager

Регистрация изменений DOM

Отправка формы

Триггеры в Google Tag Manager

Триггер «Отправка формы»

Триггер аналогичен настройкам другого триггера «Клик – Только ссылки». Можно использовать со специально встроенными переменными: Form Element, Form Classes, Form Target, Form URL, Form Text.

Другое

Триггеры в Google Tag Manager

  • Изменение в истории — срабатывает событие gtm.historyChange если изменился фрагмент URL (хэш, #). Как правило, используется на сайтах, контент которых подгружается динамически, без перезагрузки страниц;

В GTM можно использовать со встроенными переменными: New History Fragment, Old History Fragment, New History State, Old History State, History Source.

  • ОшибкаJavaScript – срабатывает событие pageError если происходит неперехваченное исключение JavaScript (window.onError);

В случае, если в JavaScript мы используем конструкцию «try..catch», то GTM не зафиксирует ошибку. Также триггер не будет сигнализировать об ошибках, которые произошли до загрузки кода Диспетчера тегов. Можно использовать со встроенными переменными Google Tag Manager: Error Message, Error URL, Error Line, Debug Mode.

  • Пользовательское событие – срабатывает событие event, которое отправили с помощью конструкции push();

Пользовательские события позволяют отслеживать те взаимодействия, для которых не подходят стандартные методы. Например, отслеживание отправки формы с переопределением события submit.

Допустим мы хотим отправлять событие на уровень данных (dataLayer) при нажатии кнопки «Отправить заявку». Для этого добавим код: dataLayer.push()

Триггеры в Google Tag Manager

где button1-click – название пользовательского события;

Далее необходимо создать тег, а в настройках триггера «Пользовательское событие» задать название button1-click и условие активации – «Все специальные события». При необходимости можно использовать регулярные выражения.

Триггеры в Google Tag Manager

Пользовательское событие button1-click

Когда пользователь нажмет кнопку, на уровень данных будет отправлено пользовательское событие со значением button1-click. Затем GTM определит button1-click как значение пользовательского события и активирует тег.

Триггеры в Google Tag Manager

В dataLayer.push() можно добавить не только одну переменную вида «ключ=значение», но и целый массив. А чтобы посмотреть порядок в котором события передаются на уровень данных, откройте консоль JavaScript в веб-браузере и введите dataLayer:

Триггеры в Google Tag Manager

  • start – запуск контейнера GTM;
  • dom – модель DOM готова;
  • load – окно загружено;
  • linkClick – открытие формы;
  • button1-click – клик по кнопке.

Таймер

Событие gtm.timer срабатывает через заданный интервал времени (в миллисекундах).

Доступны следующие настройки:

Триггеры в Google Tag Manager

  • Имя события (по умолчанию gtm.timer) – можем изменить на любое другое. Например, timer2018;
  • Интервал — время, через которое должно активироваться событие. Например, через 2,5 секунды;
  • Ограничение — максимальное число активаций события. Например, 1. Если оставить это поле пустым, событие будет активироваться до тех пор, пока пользователь не покинет страницу.

Если необходимо, чтобы таймер срабатывал на всех страницах сайта, воспользуйтесь конструкцией регулярного выражения.

Так выглядит уровень данных события gtm.timer:

Триггеры в Google Tag Manager

gtm.timer в Data Layer

Триггеры в Google Tag Manager делятся на триггеры активации тегов и триггеры блокировки тегов.

Триггер активации — это условие, при выполнении которого срабатывает тег.

Например, вы хотите отслеживать клики по определенной кнопке на сайте. Зная значения переменной, вы можете настроить триггер активации, например, по Click ID:

Триггеры в Google Tag Manager

Пример условия активации триггера

Таким образом, тег активируется только в том случае, когда идентификатор HTML-тега равен menu-item-4306.

Триггеры активации делятся на:

  • встроенные триггеры – доступны к использованию готовые шаблоны;
  • пользовательские триггеры – ручная самостоятельная настройка.

Триггер блокировки — это условие, при выполнении которого активация тега блокируется.

Например, вы хотите активировать тег на всех страницах сайта, кроме одной конкретной. Тогда необходимо создать триггер с условием активации на нужных страницах, а далее в соответствующем теге добавить этот триггер в исключение.

Триггеры в Google Tag Manager

Триггер блокировки или исключения

При конфликте триггеров активации и блокировки, приоритет отдается блокиратору. Добавить триггер блокировки можно с помощью кнопки «Добавить исключение» в настройках тега.

Триггеры в Google Tag Manager

В Google Tag Manager существует триггер, который добавлен по умолчанию и который нельзя удалить. Это All Pages (Просмотр страницы).

Также как и переменные, триггеры в GTM можно копировать, удалять, просматривать изменения, и у них можно вывести примечания. Для этого в правом верхнем углу нажмите на значок «три точки».

Триггеры в Google Tag Manager

Действия над триггерами

В «Просмотреть изменения» можно узнать, что конкретно было изменено в переменной по сравнению с предыдущей версией, а в «Показать примечания» есть возможность заносить какие-то пометки, добавить описание по функциональности и т.д.

После создания триггеров их следует добавить к тегам.

Примечание: для каждого тега не нужно создавать отдельный триггер. Вы можете использовать один триггер в разных тегах.

Тема: Как реализовать T-триггер в CoDeSys?

DiMKiN вне форума

По умолчанию

усё разобрался сам спсб всем.

31.03.2010, 12:59 #12

magirus вне форума

Пользователь Регистрация 18.02.2008 Сообщений 697

По умолчанию

почему люди имея такую мощь (кодесис) спрашивают как реализовать тот или иной функциональный блок
потому что не желают читать документацию. и справку по программе.
делай все на элементах малой степени интеграции

делайте свои функциональные блоки нужной степени интеграции,
сохраняйте их (хоть как фб хоть как библиотеку) и в любой момент их можно использовать в любом проекте.

31.03.2010, 14:04 #13

rovki вне форума

Пользователь Регистрация 03.01.2010 Адрес Чехов Сообщений 12,118

По умолчанию

ЦитатаСообщение от magirus Посмотреть сообщение

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

1.НЕ все люди хотят перед тем как сьесть ложку супа читать на нее инструкцию на ста листах,особенно если это дегустация .А вот если ты хочешь стать поваром- тогда читай,другого выбора нет.
2.Раньше это делали за нас разработчики эл.компонентов(в случае аппаратной реализации).А теперь разрабтчики ПО мне говорят -снова иди в первый класс,
делай N разрядный реверсивный регистр сдвига на логических элементах «и»,»не», или так и быть можешь таймер или счетчик еще использовать на пару с генератором.И это мощь?Не оставили людям выбора.Нужно реализовать простенький алгоритм на ПЛК ,а потом всю оставшуюся жизнь эксплуатировать его(оборудование).Так вот ты с начало кодесис изучи а потом. или оставь все как есть на реле.Это я не про себя.

Последний раз редактировалось rovki; 31.03.2010 в 14:25 .

31.03.2010, 14:42 #14

Pointer вне форума

Пользователь Регистрация 11.03.2010 Адрес Петрозаводск Карелия Сообщений 242

По умолчанию

а может, просто создать копию документов в On-line версии. и направлять новичков по конкретному адресу. а то ссылка на документ в 500 и более страниц, выглядит как посылание по самому распространённому адресу 🙂

Триггер на движения по регистру

Сделал синхронизацию 1С Бухгалтерия с другой учетной системой. Выгрузку данных реализовал по кнопке. Очень хочется сделать так, что бы остатки товаров на складах выгружались по событию их изменения. Т. е. движения по регистру хозрасчетный, счет 41.01. Т. е. что-то типа триггера.
Подскажите возможно ли такое реализовать в клиент серверном варианте базы?

По теме из базы знаний

  • Универсальный редактор реквизитов объектов. Мультиобработчик
  • Сравнение 1С8 и Navision
  • Перенос кадровой информации из ЗУП 2.5 / ЗУП 3.0 / ЗУП 3.1 в БП 3.0. Перенос отражения ЗП и начисления ОО из ЗУП 3.0 / ЗУП 3.1 в БП 3.0
  • Интеграция сценарного тестирования в процесс разработки
  • Нестандартное использование СКД
  • Дата
  • Дата
  • Рейтинг всех уровней
  • Рейтинг 1-го уровня
  • Древо развёрнутое
  • Древо свернутое

Свернуть все
2. starik-2005 3035 23.04.16 13:01 Сейчас в теме

(1) Andrew189100, а в чем проблема использовать событие объекта регистра перед записью набора или при записи набора? Событие срабатывает — запускаете фоновое задание или кладете в регистр сведений признак для синхронизации по указанным записям, по которым произошло движение.

3. Andrew189100 15 23.04.16 13:37 Сейчас в теме

(2) starik-2005, Не хочется менять конфигурацию. Сделал внешнюю обработку, которая выгружает данные напрямую в базу MySQL. Но, по кнопке. Хочется синхронизации онлайн)))

4. starik-2005 3035 23.04.16 17:28 Сейчас в теме

(3) Andrew189100, сдается мне, что не там Вы выиграть пытаетесь. Можно ловушки событий использовать, чтобы почти не менять конфигурацию. Добавить регистр, ловушку и регламентное задание, отрабатывающее раз в минуту.

По поводу триггеров, то Вам придется с MS SQL-сервера дергать MySQL-сервер. Не знаю, есть ли там какие-либо функции для этого. Триггер создать — не велика проблема, конечно.

5. Andrew189100 15 25.04.16 09:33 Сейчас в теме

(4) starik-2005, штука в том, что выгрузка идет в БД интернет магазина. Реализации возможны, как с магазина, так и, непосредственно, в 1С. Есть вероятность в промежутке между выгрузками данных продать товар в интернет магазине, который уже был продан в 1С. Вообщем, буду думать))

Почему для построения регистров лучше всего использовать D триггер?

При выполнении курсовой встал вопрос о использовании D триггера при построении регистра. В разных книгах и сайтах писалось что для построения регистров обычно используют D триггер. Есть ли этому какое то обоснование? В чем его приемущество по сравнению с JK. Если можно дайте развёрнутый ответ.

Лучший ответ

Re: В разных книгах и сайтах писалось что для построения регистров обычно используют D триггер.

Егор, а ведь D-триггер и есть регистр! ОДНОРАЗРЯДНЫЙ РЕГИСТР. Просто сравни определения.

Регистр — ячейка памяти и триггер — ячейка памяти. Если хочешь получить последовательный регистр, соедини последовательно несколько триггеров; если нужен параллельный регистр — просто ставят несколько триггеров рядом.

Все триггеры считаются элементами памяти, но именно D-триггер удобен для пропускания цифровых данных насквозь и хранить их внутри. Другие триггеры реагируют на yправляющие сигналы , а D-триггер принимает данные ; так же и регистр — на его входах именно данные. Вот и всё!

Peer-2-PeerМудрец (16172) 3 года назад

Просто сравни разные типы триггеров. RS- и JK-триггеры обладают только управляющими входами; они приспособлены для хранения СОСТОЯНИЯ, а не ЗНАЧЕНИЯ. Запись цифрового значения в такой триггер только имитируется комбинацией управляющих сигналов.

А в D-триггер записывается именно ЗНАЧЕНИЕ.

Если необходимо собрать регистр из не-D-триггеров, то всё равно приходится имитировать работу D-триггера. В таком случае выгоднее приобрести готовые D-триггеры, нежели коммутировать входы/выходы триггеров другого типа.

Peer-2-Peer Мудрец (16172) Точно так же если в схеме должно присутствовать несколько разрозненных D-триггеров, имеет смысл подумать, а не заменить ли их одной микросхемой параллельного регистра!

Остальные ответы
Оне простчще JK.
Егор МарченкоЗнаток (274) 3 года назад
Хотелось бы услышать конкретику, а не просто этот лучше.

Роман Сергеевич Искусственный Интеллект (181693) Егор Марченко, он про «лучше» тебе ничего не сказал. И дал очень даже конкретный ответ.

Профессор КуропатовОракул (73837) 3 года назад

Ты на схему глянь и назови мне самый используемай тригер JK в 155 серии. Я такех не знаю, зато знаю самый испальзуямый D — тригер, Это К155ТМ2.

устроен проще.

Ну смотря какой регистр вам нужен.
Если вам нужен регистр хранения, то значит у вас есть где-то шина данных. Соответственно каждый её бит проще подать на вход данных соответствующего D-триггера. А с JK-триггером нужно специально заморочиться, чтобы её состояние правильно передавалось в ячейки этого регистра.
А вот если вы хотите сделать сдвиговый регистр, то его вполне можно сделать из JK-триггеров. Но из D-триггеров его сделать тоже несложно :—)
Я не могу сказать, что современные большие логические схемы делаются исключительно на D-триггерах. Но я никогда не видел в них JK-триггер. Даже не знаю, как и объявить-то его на Verilog.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *