Трюки с формами

Передача Client ID в приемщики

Иногда возникает потребность передать в CRM или в систему статистики - код счетчика Я.Метрики или Гугл.Аналитикс
На Тильде есть два вида форм: обычные и формы в зеро. Обычные формы находятся в HTML-страницы, а формы Зеро - создаются через JS. Поэтому поля добавляемые в обычные формы можно просто добавить, а добавляемые в Зеро необходимо вешать на событие render.
Добавление google client id ко всем формам
<script type="text/javascript">
$(document).ready(function(){
    /* флаг загрузки скрипта гугл-аналитикс */
    window.isLoadGA=false;
    /* номер clientId */
    window.clientGoogleID = false;

    /* 
    метод, который ждет пока google-analytics загрузится 
    и после этого добавляет параметр в форму 
    */
    window.addGoogleClientId = function(){
        if (window.ga && typeof window.ga == 'function' && typeof ga.getAll == 'function') {
            window.isLoadGA = true;
        }
        
        if (window.isLoadGA) {
            var gatracker = ga.getAll()[0];
            window.clientGoogleID = gatracker ? gatracker.get('clientId') : 0;
            $('form').each(function(e){
                $(this).append('<input type="hidden" name="gaclientid" value="'+clientGoogleID+'">');
            });
        } else {
            window.setTimeout(function() {
                addGoogleClientId();
            }, 200);
        }
    };

    /* обработка события генерации зеро-блока и добавления параметра в форму */
   $('.t396').on('render', '.t396__elem', function(){
        if (window.isLoadGA && window.clientGoogleID) {
            $(this).find('form').append('<input type="hidden" name="gaclientid" value="'+clientGoogleID+'">');
        }
    });

    addGoogleClientId();
});
</script>
Добавление yandex client id ко всем формам
<script type="text/javascript">
$(document).ready(function(){
    /* флаг загрузки скрипта метрики */
    window.isLoadYM=false;
    /* номер clientId */
    window.clientYandexID = false;

    /* 
    метод, который ждет пока Метрика загрузится 
    и после этого добавляет параметр в форму 
    */
    window.addYandexClientId = function(){
        if (window.mainMetrikaId && window[('yaCounter'+window.mainMetrikaId)]) {
            window.isLoadYM = true;
        }
        
        if (window.isLoadYM) {
            window.clientYandexId = window[('yaCounter'+window.mainMetrikaId)].getClientID();
            $('form').each(function(e){
                if ($(this).find('form name[ymclientid]').length==0) {
                     $(this).append('<input type="hidden" name="ymclientid" value="'+clientYandexId+'">');
                }
            });
        } else {
            window.setTimeout(function() {
                addYandexClientId();
            }, 200);
        }
    };

    /* обработка события генерации зеро-блока и добавления параметра в форму */
   $('.t396').on('render', '.t396__elem', function(){
        if (window.isLoadYM && window.clientYandexId &&  $(this).find('form name[ymclientid]').length==0) {
            $(this).find('form').append('<input type="hidden" name="ymclientid" value="'+clientYandexId+'">');
        }
    });

    addYandexClientId();
});
</script>
По такому же принципу можно добавлять дополнительные параметры и с других счетчиков или систем.
Made on
Tilda