• Как создать цели яндекс метрики на vue?

    @denisromanenko
    Не сильно разбираюсь в целях яндекс метрики, но судя по всему, при подключении метрики нам становится глобально доступна функция "ym"

    https://yandex.ru/support/metrica/general/goal-js-...

    Если в обработчик клика вставитьym(XXXXXX, 'reachGoal', 'TARGET_NAME') - не сработает?
    Ответ написан
    2 комментария
  • Как перекрашивать часть изображения?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    SVG + js для смены цвета
    Ответ написан
    Комментировать
  • Нормально ли на бек отправлять данные формы в виде объекта?

    DevMan
    @DevMan
    например, так.

    google -> js serialize form
    Ответ написан
    Комментировать
  • Как реализовать Mutual TLS?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Сначала немного теории.

    CA - Certificate Authority - доверенный удостоверящий центр, который подписывает сертификаты.
    У каждой стороны есть секретный ключ, который она никому не показывает, и публичный ключ, он же сертификат. Чтобы подтвердить, что сертификат принадлежит обеим сторонам, эти сертификаты должны иметь подпись доверенного лица, в данном случае CA.

    Обычно мы привыкли, что в SSL только серверная сторона доказывает свою подлинность. Идея mTLS в том, что обе стороны должны предоставить свой публичный сертификат, подписанный CA. Тогда если сервер доверяет CA, он будет доверять и клиентскому сертификату.

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

    Итак, что нам нужно для установления сессии?

    1. Сертификат CA - kbs_ca.crt (скорее всего, можно склеить оба CA - промежуточный и корневой - в один файл);
    2. Приватный ключ клиента, который он будет использовать для шифрования - private.key;
    3. Соответствующий приватному публичный ключ-сертификат, который клиент будет сообщать серверу - public.cer.

    Я ввёл в гугл "php curl mtls" и в первой же ссылке есть пример кода: https://smallstep.com/hello-mtls/doc/client/php

    В примере, конечно, нет пароля от ключа, но справка подсказывает, что это опция CURLOPT_SSLKEYPASSWD.
    Ответ написан
  • Как написать бота отслеживающего скидки на маркетплейсах?

    ipatiev
    @ipatiev
    Потомок старинного рода Ипатьевых-Колотитьевых
    Ну что вы как дети?
    Каждый раз этот вечнозелёный вопрос обрастает гроздьями любопытных.
    Спарсить весь интернет мы хочем, а научиться пользоваться одним поисковым сервисом - не можем.
    Ответ написан
    Комментировать
  • Как заставить CentOS правильно отображать длину кириллических символов в консоли?

    shurshur
    @shurshur
    Сисадмин, просто сисадмин...
    Что смотреть:

    locale - показывает текущие параметры локали
    locale -a - показывает весь список доступных локалей
    localectl - утилита от systemd

    Если настроенная локаль отсутствует в общем списке, то locale и некоторые другие приложения (например, perl) будут ругаться на это.

    Чтобы сгенерировать недостающую нужную локаль, можно использовать localedef:

    localedef ru_RU.UTF-8 -f UTF-8 -i ru_RU

    В некоторых системах (в частности, на базе Debian и Gentoo) вместо localedef можно использовать другую утилиту locale-gen. Также в Debian/Ubuntu можно добавить локали галочками в списке с помощью dpkg-reconfigure locales.

    Уже запущенные приложения надо перезапустить, чтобы они увидили новую локаль, в частности, приложения, запускаемые при логине в систему, перезапустятся при следующем входе.
    Ответ написан
    Комментировать
  • Ценообразование за перенос сайтов на битриксе на другой сервер?

    suffix_ixbt
    @suffix_ixbt
    https://www.babai.ru/
    Странный вопрос - ибо у любого "технаря", "системного админстратора" стоящего хотя бы одной ногой во фрилансе обязан быть почасовой тариф. Как правило в настоящее время в зависимости от квалификации/востребованности/понтов это примерно в вилке от 1000 до 2000 руб. в час.

    А уж сколько займёт у Вас эта задача - заранее даже примерно предположить нельзя. Потому что обязательно что-то пойдёт не так :)

    Вопрос доверия и контроля затраченного на работу времени - это отдельный другой вопрос.
    Ответ написан
    1 комментарий
  • Как правильно защитить форму от спама?

    DanArst
    @DanArst Куратор тега HTML
    Гриффиндор в моде при любой погоде!
    Hidden-инпуты для защиты от спама - это фигня. Больше половины ботов раскусят.
    Я на многих сайтах ставлю довольно простую защиту, которая отлично работает.
    Добавь в форму какой-нибудь текстовый инпут и скрой его стилями, но НЕ ЮЗАЙ display: none;, visibility:hidden;, opacity:0;, так как многие боты и это раскусят.

    Например input с name="copyemail":
    <form action="">
    	<input type="text" name="copyemail" placeholder="Email для копии">
    	<input type="text" name="name" placeholder="Имя">
    	<input type="email" name="email">
    	<button type="submit">Отправить</button>
    </form>

    и стили для него:
    input[name="copyemail"] {
        display: block;
        width: 2px;
        height: 2px;
        margin-bottom: -2px;
        border: none;
        padding: 0;
        opacity: 0.01;
    }


    И дальше уже на сервере проверяешь:
    if ($_POST['copyemail']) {    
        //Это спам! Делаем вид, что сообщение отправлено.
        die('Ваше сообщение отправлено');
    } else {
         //Все норм. Метро Люблино, работаем
    }
    Ответ написан
    3 комментария
  • Какой впн-софт посоветуете для линукс?

    justhostRU
    @justhostRU
    вообще на linux самый простой предсказуемый, надёжный и понятный в плане отладки это OpenVPN.
    Ответ написан
    1 комментарий
  • Какой впн-софт посоветуете для линукс?

    CityCat4
    @CityCat4 Куратор тега VPN
    Внимание! Изменился адрес почты!
    Нетрадиционными бывают только отношения.

    Вычисляется VPN вовсе не по "традиционности" и блокируется он вне зависимости от нее. Не думайте, что если Вы используете какой-то протокол - то его кроме Вас никто не знает, security through obscurity сама по себе работает скверно.

    Для линуха хорошо работает либо openvpn, либо чистый IPSec. IPSec настроить не так уж чтобы и просто - понимание требуется, но там все взаимодействие на уровне ядра, а если микротик еще и с аппаратным шифрованием - то вообще шикарно.
    Ответ написан
    Комментировать
  • Существуют ли дистрибутивы Linux где изначально встроен весь основной репозитарий?

    Adler_lug
    @Adler_lug
    Вероятно вам нужно это.
    Ответ написан
    Комментировать
  • Как устанавливать плагины Vue в битрикс?

    @PetrPo
    Опережая ответ, бросай это неблагодарное дело)

    youtube, лучше смотри после прочтения ответа

    Думаю первые два пункта очевидны, но напишу
    1. Устанавливаешь node.js
    Через консоль
    2. Устанавливаешь bitrix cli
    npm install -g @bitrix/cli

    Дальше судя по логике человека из видоса, если у тебя не SPA, а у тебя наверняка не SPA:
    3. Создаешь экстеншен для vue (или другого) плагина, в консоли переходишь в папку /local/js/имя_модуля/
    bitrix create
    отвечаешь на вопросы, имя твоего экстеншена должно быть без точек

    4. Переходишь в папку с экстеншеном, пишешь
    npm init

    5. Скачиваешь нужный плагин
    npm i названиепакета
    проверь что в package.json он добавился

    6. В редакторе открываешь bundle.config.js в нем добавляешь
    plugins: {
    	resolve: true,
    },


    7. Открываешь файл в папке src, который создался через bitirx create, в нем все стираешь и пишешь import плагина, как пример
    import React from 'react'
    
    export {React}


    8. В консоли (проверь что находишься в папке со своим экстеншеном , а не где-нибудь в корне, иначе ядро сбандлишь и будет плохо)
    bitrix build

    9. Смотришь bundle в папке dist, если все ок, там должен быть транспилированный код твоего плагина

    Теперь можешь юзать через битриксовое api
    \Bitrix\Main\UI\Extension::load("имя_модуля.имя_экстеншена")


    import React from 'имя_модуля.имя_экстеншена';
    
    loadExtension('имя_модуля.имя_экстеншена').then(() => {
        // Код который использует `main.loader`
    });


    P.S.
    Сам я пробовал react устанавливать, но у него в файлах используются переменные окружения node.js и т.к. они не определены js валится, как с этим быть я не разобрался и поэтому забил, может с другими плагинами норм будет.

    И опять же судя по словам человека из видоса, так нужно делать для каждого плагина, чтобы код не дублировался в других твоих бандлах
    Ответ написан
    4 комментария
  • Как объединить два файла на php?

    @levantez
    $files = [
      '1.file',
      '2.file',
    ];
    $resultFile = 'result.file';
    $res = fopen($resultFile,'a+');
    foreach ($files as $file) {
      $f = fopen($file,'r');
      while (!feof($f)) {
        $contents = fread($f,8192);
        fputs($res,$contents);
      }
    }
    Ответ написан
    Комментировать
  • Как объединить два файла на php?

    @rPman
    Окей, буду умничать, если нужно объединить файлы именно на php (лимит памяти, нельзя вызывать сторонние утилиты shell_exec и т.п.) то делать это придется по частям.

    Читаем от файла сколько то килобайт в память, пишем столько же в результирующий, снова читаем кусочек... потом повторяем со вторым.

    fopen
    fread
    fwrite
    fclose

    больше работы с отслеживанием граничных ситуаций (пустые или отсутствующие файлы или нехватка места)
    Ответ написан
    5 комментариев
  • Как отфитровать заказы по свойству товаров?

    @PetrPo
    use Bitrix\Main\ORM\Fields\Relations\Reference;
    use Bitrix\Main\ORM\Query\Join;
    use Bitrix\Iblock\ElementPropertyTable;
    
    \Bitrix\Main\Loader::includeModule('sale');
    
    $propertyId = 1;
    
    $result = \Bitrix\Sale\Order::getList([
    	'filter' => ['PROPERTIES.IBLOCK_PROPERTY_ID' => $propertyId, '!PROPERTIES.VALUE' => false],
    	'select' => ['ID'],
    	'runtime' => [
    		new Reference(
    			'PROPERTIES', ElementPropertyTable::class,
    			Join::on('this.BASKET.PRODUCT_ID', 'ref.IBLOCK_ELEMENT_ID')
    		)
    	]
    ])->fetchAll();
    
    print_r($result);


    $propertyId свой укажи
    Ответ написан
    1 комментарий
  • Что значит mail_event_bulk?

    no_one_safe
    @no_one_safe
    Первая ссылка в яндексе по запросу mail_event_bulk
    параметр отвечающий за количество почтовых событий обрабатываемых за раз
    Ответ написан
    Комментировать
  • Как перевести фото в массив?

    gbg
    @gbg
    Любые ответы на любые вопросы
    Есть ровно две практики работы с фотками. Либо вы пихаете их в блоб в БД, но вы должны быть абсолютно уверены в том, что вы делаете и понимать плюсы и минусы, например

    +у вас всегда все консистентно
    -база очень быстро раздувается, но можно выкинуть блобы с фотками в отдельную таблицу

    Либо вы грузите файлы на файловое хранилище, будь то S3 или просто ФС, а в бд храните индекс.
    Ответ написан
    Комментировать
  • Как работают циклы с таймаутом?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    Первое что нужно понять, таймер работает асинхронно, а значит будет выполнен после цикла.
    Второе - let имеет блочную область видимости (переменная видна в том блоке, где была объявлена, при этом первый операнд for считается тем же блоком, что и тело цикла)
    Третье - циклы создают новый скоуп на каждую итерацию (на каждой итерации будет свой let i, при условии что этот оператор внутри цикла)

    Ну и еще, в Ваших примерах 1000 относится не к таймауту, это просто бесполезная операция, а таймаут получит значение по умолчанию - 0, думаю это не совсем то, что Вы ожидаете.

    Еще один важный момент, функциональное выражение (а стрелочная функция - это тоже функциональное выражение) внутри цикла будет создавать по функции на каждой итерации цикла. Это очень плохо и по памяти и по производительности (такие функции еще и компилироваться и оптимизироваться будут раздельно). И если в случае с let внутри цикла функции хотя бы будут отличаться замыканием (каждая замкнет свою i), то в первом случае будет 5 абсолютно идентичных функций.
    Тут можно очень хорошо показать себя, если помимо объяснения принципов работы вспомнить, что setTimeout умеет передавать аргументы в свой колбэк:
    const f = i => {
      console.log(i);
    };
    for (let i = 0; i < 5; i++) {
      setTimeout(f, 1000, i);
    }
    Ответ написан
    Комментировать
  • Интеграция Reactjs в систему управления сайтов 1c-Bitrix?

    BornToFreeFall
    @BornToFreeFall
    Sielu ilman ihmistä
    Возможно, что это вам подскажет путь следования: Ссылка
    Ответ написан
    3 комментария
  • Функции по "Чистому коду" - нужно ли это?

    Zifix
    @Zifix
    Barbatum
    Только ситхи возводят всё в абсолют. Если вы считаете, что какой-то совет даже в распиаренной книге противоречит здравому смыслу, то не обязательно слепо ему следовать. Развивайте критическое мышление.
    Ответ написан
    2 комментария