Веб-разработка и интернет-реклама без воды.

Позднее Ctrl + ↑

Битрикс 24: Внедрение

Раньше все внедряли поголовно 1С и зарабатывали хорошие деньги. Сейчас пошла мода на Битрикс 24. Дело наверное даже не в моде, а в том, что предприятия и руководители компаний задумываются об эффективности инвестиций. А инвестицией может быть не только деньги, но и энергия.

Чтобы не быть аутсайдером, я покрутил Битрикс 24, изучил его тонкости и успел его внедрить на двух предприятиях. И чем больше я с ним знакомлюсь, тем более мне интересно.

Сейчас, например, разрабатываю интеграцию 1С, Битрикс 24 и 1С Битрикс. Чтобы вся система была централизованной и была полная автоматизация обработки лидов, формированию коммерческих предложений, выставления счетов и еженедельной отчетности «на стол руководителю».

Рекомендую.

JivoSite: отключить звук появления окна

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

Что ж, будем решать через DOM:

Открываем существующий код JivoSite и добавим в него пару строчек:

<script type='text/javascript'>
(function() { var widget_id = 'YOUR_ID'; var d = document; var w = window;
    function l() { var s = document.createElement('script');
        s.type = 'text/javascript';
        s.async = true;
        s.src = '//code.jivosite.com/script/widget/' + widget_id; var ss = document.getElementsByTagName('script')[0];
        ss.parentNode.insertBefore(s, ss); } if (d.readyState == 'complete') { l(); } else { if (w.attachEvent) { w.attachEvent('onload', l); } else { w.addEventListener('load', l, false); } } })();

// Ниже код, который нужно добавить после вашего скрипта
function jivo_onLoadCallback() {
document.jivo_container.HTMLAudioElement.prototype.play = function () {};
}
</script>

После этого никакие звуки не будут раздражать вас и вашего пользователя.

2018   jivosite   js

JS: Настройки Fancybox 3

Чтобы не писать каждый раз, запишу здесь:

$("[data-fancybox]").fancybox({
    loop: true,
    gutter: 30,
    buttons: [
        "zoom",
        "share",
        "slideShow",
        "fullScreen",
        "thumbs",
        "close"
    ],
    protect: true,
    transitionEffect: "circular",
    slideShow: {
        autoStart: true,
        speed: 5000
    },
    lang: "ru",
    i18n: {
        ru: {
            CLOSE: "Закрыть",
            NEXT: "Вперед",
            PREV: "Назад",
            ERROR: "Ошибка загрузки. <br/> Повторите запрос позднее.",
            PLAY_START: "Начать демонстрацию",
            PLAY_STOP: "Приостановить демонстрацию",
            FULL_SCREEN: "На полный экран",
            THUMBS: "Миниатюры",
            DOWNLOAD: "Скачать",
            SHARE: "Поделиться",
            ZOOM: "Увеличить"
        },
    }
};
2018   fancybox   js

VPN: Подключаемся к Telegram в обход РКН

Заблокировали Телегу, а в ней столько контактов по работе. Ну какого русского мужика можно этим испугать? Мы законов то не особо боимся. Что ж, погнали на VPN:


Простой и безгеморройный вариант:


  1. Заходим вот сюда
  2. Скачиваем и устанавливаем программулину
  3. Подключаемся к VPN и радуемся жизни
  4. Программулина платная, от 350 рублей в месяц (оптом дешевле)

P.S. Промокод NEXTLIMITED даст +10% к оплаченному сроку действия


Геморройный вариант с рекламой:


  1. Заходим вот сюда
  2. Скачиваем и устанавливаем программулину
  3. Запускаем программу и жмём Connect
  4. Программа бесплатная, но есть незначительные ограничения
2018   telegram   vpn

Simpla: Показываем JivoSite в определённое время

Сделал на одном сайте привязку кнопок «Обратный звонок» и «Отправить заявку» к JivoSite.
Возможно для кого-то это покажется дикостью, но это на самом деле удобно — обратный звонок должен происходить моментально, а не через три часа, когда менеджер по продажам, который отсиживает жопу на зарплате, накурится сигарет и напьется кофе. И JivoSite в этом плане оказался очень удобен.

Но столкнулся с интересной проблемой. В JivoSite есть настройки времени, когда можно совершать звонок с сайта. Чтобы появилась форма обратного звонка нужно нажать на соответствующую кнопку/ссылку. Конкретный пример:

Предположим мы поставим в настройках JivoSite часы работы с 9 до 18 часов. Как вы думаете, что произойдет, если мы нажмём на ссылку «Обратный звонок» в 18:02? Правильно. Ничего. Она не сработает, а это проёбаный лид. Техподдержке передал, но нужно сохранить лид уже сегодня и своими силами.

Чтобы лид остался с нами, нужно проверить сколько сейчас на часах и предложить альтернативу, например, оффлайн форму того же JivoSite. И в SimplaCMS это решалось так:

<a href="tel:{$settings->company_phone|escape}"><h3>{$settings->company_phone|escape}</h3></a>
{if $smarty.now|date_format:'%H.%M' > '09.00' && $smarty.now|date_format:'%H.%M' < '18.00' }
{literal}<a href="#" onclick="jivo_api.open({start : 'call'});">Обратный звонок</a>{/literal}
{else}
<a href="#" onclick="jivo_api.open();">Обратный звонок</a>
{/if}

Если время сервера попадает в заданный интервал, показать ссылку №1. В противном случае №2.

2018   jivosite   simplacms

JS: Вешаем события GA через DOM для плагина Wordpress Contact Form 7

После опыта с LP Generator, нашёл такое же решение для самого популярного плагина Wordpress Contact Form 7. Согласно официальной документации плагина, начиная с версии 7.5.0 они убрали возможность установки событий onsubmit и onclick через интерфейс админки. И предлагают вешать его через скрипт. Пример:

<script>
document.addEventListener( 'wpcf7mailsent', function( event ) {
    yaCounterXXXXXX.reachGoal('ORDER'); gtag('event', 'order', { 'event_category': 'ORDER', 'event_action': 'ORDER', });
}, false );
</script>

Зачем убрали — не понятно, но точно ясно, что усложнили жизнь новичкам.

2018   js   wordpress

JS: Цели Яндекс Метрики в LP Generator

В этом конструкторе всё сделано как то через жопу, даже настройка целей Метрики. Например, чтобы повесить onSubmit цель, которую на обычном сайте/шаблоне можно повесить в 2-3 действия, в LP Generator нужно повесить на каждую форму вот такой скрипт, который предлагает сам LP Generator:

<script>
    jq_144('#block-new2').on('submit', '.our_form', function() {
        // block-new2 - id формы
        var form = jq_144(this);
 
        jq_144('#lp_form_target').on('load', function() {
 
                if (!window.frames.lp_form_target.data_json ||
                    (window.frames.lp_form_target.data_json.length == 0)) {
                    yaCounterID.reachGoal('ORDER');
                    // ЗАМЕНИТЬ ИДСЧЕТЧИКА - на номер вашего счетчика
                    // ЗАМЕНИТЬ ORDER - на идентификатор вашей цели
                }
 
                timerName255 = setInterval(function(){
                    // ЗАМЕНИТЬ 255 на id формы
                    if (jq_144('#form_submit_message').css('display') == 'block') {
                        clearInterval(timerName255); // ЗАМЕНИТЬ 255 на id формы
                    }
                }, 100);
        });
    });
 </script>

Принцип — скрипт выбирает блок и привязывает к форме указанного блока цель Метрики. Ну что за рукожопство?

Интерфейсы: Beget vs. Hetzner

Не буду говорить о красоте. Это субъективно. Но удобство — штука важная.
Где найти информацию про DNS сервера у немцев я не сразу догадался.

Лечим Obfuscated.Globals.5.4

В последнее время прилетает много заявок на лечение сайтов от вирусов. Распространенным из них стал Obfuscated.Globals. Что ж, погнали.

P.S. Вылечу весь сайт за 2500 рублей. Пишите на a@chudenkov.ru

  1. Для начала соберем список всех зараженных файлов с помощью скрипта антивируса AI-Bolit. Скачать можно здесь
  2. Загружаем на хостинг, запускаем сканирование. Если сайт большой, можете сходить в магазин и взять пивка. Процесс долгий. Можно воспользоваться SSH и выполнить проверку за 5 минут.
  3. Получаем отчёт о заражённых файлах. В первую очередь смотрим php файлы.

  1. Открываем зараженные файлы и ищем в самом начале PHP-файла что-то подобное:

  1. Удаляем этот кусок PHP кода от <? до ?>

  1. Проходимся по всем файлам и чистим файлы от «злого» кода.
  1. Для контроля результата можно запустить AI-Bolit ещё раз.
2018   вирусы

Вторая цена в Simpla CMS

На базе Simpla CMS делаю каталог объектов. Возникла необходимость вывести две цены, например, за час и за смену. Реализация:

  1. Делаем SQL запрос в таблицу s_variants:
ALTER TABLE `s_variants` ADD `price2` TEXT NOT NULL AFTER `price`;
  1. Обновим запрос в /api/Variants.php в двух местах:
$query = $this->db->placehold("SELECT v.id, v.product_id , v.price, v.price2, NULLIF(v.compare_price, 0) as compare_price, v.sku, IFNULL(v.stock, ?) as stock, (v.stock IS NULL) as infinity, v.name, v.attachment, v.position
...
  1. Чтобы вторая цена выводилась в админке в общем списке товаров, добавим в /simpla/design/default/products.tpl ~80 строка:
<input class="price" type="text" name="price2[{$variant->id}]" value="{$variant->price2}" />{$currency->sign}
  1. Чтобы можно было редактировать цену в карточке объекта, добавим ~585 строчка:
<li class="variant_price">     <input name="variants[price2][]"         type="text"   value="{$variant->price2|escape}" /></li>
  1. Чтобы вывести в фронтэнде:
{if $v->price2 > 0}{$v->price2|convert} {$currency->sign}

Готово.

2018   simplacms
Ранее Ctrl + ↓