Все сервисы Хабра

Сообщество IT-специалистов

Ответы на любые вопросы об IT

Профессиональное развитие в IT

Удаленная работа для IT-специалистов

Войти на сайт
  • Все вопросы
  • Все теги
  • Пользователи

Хабр Q&A — вопросы и ответы для IT-специалистов

Получайте ответы на вопросы по любой теме из области IT от специалистов в этой теме.

Узнать больше
другие проекты хабра
  • Хабр
  • Карьера
  • Фриланс
Задать вопрос

Павел Сидоров

  • 0
    вклад
  • 118
    вопросов
  • 17
    ответов
  • 24%
    решений
Лайки
  • Информация
  • Ответы
  • Вопросы
  • Комментарии
  • Подписки
  • Нравится
  • Как оправить ссылку с во такими данными на почту яндекс или гугл?

    AUser0 @AUser0
    Чем больше знаю, тем лучше понимаю, как мало знаю.
    $link = "<a href='https://securepayments.sberbank.ru/payment/docsite/payform-1.html?token=ТОКЕН&amp;def=".urlencode("{'amount':'".$arResult["ORDER"]["PRICE"]."'}")."&amp;def=".urlencode("{'description':'Оплата по заказу ".$arResult["ORDER"]["ACCOUNT_NUMBER"]." от ".$arResult["ORDER"]["DATE_INSERT"]->toUserTime()->format('d.m.Y H:i')."'}")."&amp;def=".urlencode("{'email':'".$USER->GetEmail()."'}")."&amp;lang=ru'>Ссылка на оплату</a>";


    P.S. А вы в курсе, что в ссылке передаётся 3 (три!) одинаковых аргумента с именем 'def'?
    Ответ написан 14 дек. 2022
    1 комментарий
    1 комментарий
  • Иногда форма отправляет данные множество раз. Где ошибка, можете объяснить?

    Shlop
    Сергей Хлопов @Shlop
    Full Stack Developer (PHP/Laravel/JavaScript)
    Могу предположить из-за того что пользователь может быстро несколько раз нажать на кнопку "Отправить" в результате будет отправлено несколько ajax запросов.

    Можно попробовать сделать вот так:
    Когда событие "submit" выполнится в первый раз кнопка "Отправить" заблокируется, и если пользователь сразу нажмёт её ещё раз то событие уже не будет запущенно т.к. кнопка будет заблокирована до тех пор пока ajax запрос не завершится. Пример скрипта ниже, я его не проверял, если будите использовать то протестируйте, не ломается ли ничего. На кнопку в html нужно будет добавить класс: btn-form-submit.

    Либо может что-то в php скрипте, или на форме устанавливается несколько событий которое отправляет ajax запрос.

    $(function () {
        $("form[data-ajax]").on("submit", function (e) {
            e.preventDefault();
            var $form = $(this);
            var btn = $form.find(".btn-form-submit");
            // Заблокируем кнопку отправить
            $(btn).prop("disabled", true);
            $form.find(".input--error").removeClass("input--error");
            $.post($form.attr("action"), $form.serialize(), function (json) {
                if (json.result == "error") {
                    for (var x in json.errors) {
                        $form.find('[name="' + x + '"]').addClass("input--error");
                    }
                } else if (json.result == "redirect") {
                    window.location.href = json.url;
                } else {
                    $form.html(json.html);
                }
            }, "json").always(function () {
                if (btn.length) {
                    // Разблокируем кнопку отправить когда ajax запрос завершится будь то успех или ошибка
                    $(btn).prop("disabled", false);
                }
            });
        })
    });

    Небольшой совет, лучше давать обратную связь пользователю, когда он отправил форму показывать какую нибудь загрузку/крутяшку/прилоуд, что бы пользователь понимал что какое-то действие происходит.
    Ответ написан 30 нояб. 2022
    2 комментария
    2 комментария
  • Почему json_decode() возвращает тип данных "строка"?

    delphinpro
    Сергей delphinpro @delphinpro Куратор тега PHP
    frontend developer
    я так понимаю, это строка и есть
    console.log(typeof this.dataTest); // string
    далее вы ее пакуете в данные и отправляете
    formData.append('obj', this.dataTest);

    потом на сервере получаете эту строку и декодируете ее
    json_decode($_POST['obj'], true);

    Что получается: отправляем строку, получаем строку и удивляемся, а почему же не массив?

    --------

    Видимо проблема в том, каким образом вы сохраняете данные в локальном хранилище браузера. Ну и понимать бы, какие там данные. Код выкладывайте.

    --------

    Решение
    - this.dataTest = JSON.stringify(localStorage.localStorage);
    + this.dataTest = localStorage.localStorage;
    Ответ написан 19 июл. 2022
    10 комментариев
    10 комментариев
  • Почему json_decode() возвращает тип данных "строка"?

    Rsa97
    Rsa97 @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. localStorage хранит только строки.
    2. localStorage.localStorage - строка.
    3. JSON.stringify(localStorage.localStorage) - JSON, кодирующий строку.
    4. json_decode($_POST['obj'], true) декодирует JSON в исходную строку, которая была в localStorage.localStorage.
    Ответ написан 19 июл. 2022
    1 комментарий
    1 комментарий
  • Telegram Bot Api Как отправить сообщение в приватный канал через бота?

    Islamfon @Islamfon
    Знаю как это сделать!

    1. Сделай канал публичным, установи для него username.
    2. Добавь в канал любого бота.
    3. Перейди по ссылке
    https://api.telegram.org/bot[ТОКЕН_БОТА]/sendMessage?chat_id=@[USERNAME_КАНАЛА]&text=тест
    . После перехода по ссылке будет выведен id канала, сохрани его.
    4. Сделай канал приватным.
    5. Отправляй сообщения вот так:
    https://api.telegram.org/bot[ТОКЕН_БОТА]/sendMessage?chat_id=@[ID_КАНАЛА]&text=тест.
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Как вычесть дату?

    rozhnev
    Slava Rozhnev @rozhnev Куратор тега PHP
    Fullstack programmer, DBA, медленно, дорого
    Если нужно время исполнения скрипта используйте функцию time:

    <?php
    $start = microtime(TRUE);
    
    sleep(3);
    
    $diff = microtime(TRUE) - $start;
    
    printf('Execution time: %s s', $diff);


    PHP time online
    Ответ написан более года назад
    2 комментария
    2 комментария
  • Почему вылетает ошибка агента битрикс?

    PetrPo @PetrPo
    Предположу, что вызывается $USER->GetID(), в документации указано, что Переменная $USER в агентах отсутствует.. По всей видимости, в этом модуле есть событие на добавление элемента инфоблока, в котором вызывается $USER->GetID() и т.к. $USER=null, а не объект класса CUser получаешь ошибку.
    Ответ написан более года назад
    Комментировать
    Комментировать
  • :after Не отображается, сафари, на айфонах?

    Ankhena
    Ankhena @Ankhena Куратор тега CSS
    Нежно люблю верстку
    Нужно задать координаты top, left и т.д., чтобы браузер знал, куда нужно спозиционировать псевдоэлемент.
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Как переехать на новый домен 301 редидрект?

    dodo512 @dodo512
    Страница выдала "слишком много перенаправлений"

    RewriteEngine On
    RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]

    Если два домена ссылаются на одну папку, то нужно добавить проверку %{HTTP_HOST}
    RewriteEngine On
    RewriteCond %{HTTP_HOST}  ^(www\.)?old-domain\.ru$  [NC]
    RewriteRule ^(.*)$ https://new-domain.ru/$1 [R=301,L]


    И ещё в остальных RewriteRule заменить https://old-domain.ru на https://new-domain.ru
    Ответ написан более года назад
    2 комментария
    2 комментария
  • Как получить свойства SKU через api битрикс?

    PetrPo @PetrPo
    "CODE"=>["SIZES_CLOTHES"]
    Ответ написан более года назад
    5 комментариев
    5 комментариев
  • Как сделать склонение слов на php?

    Barmunk @Barmunk
    Ты не искал?
    https://habr.com/ru/post/304804/
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • CIBlockElement::Add - как добавить свойство типа список?

    winer
    Роман Грицук @winer
    занимаюсь разработкой сайтов на 1c-bitrix
    Если у Вас нет возможности передать в качестве входных данных именно ID списочных элементов (внешний импорт или файл какой ни-будь), то делайте поиск по списочным значениям и уже из найденных элементов подставляйте их ID

    $iblockId = 1;//id инфоблока
    $inputValues = [44, 45, 46];//Ваши входные данные
    
    $enumIds = array_column(\Bitrix\Iblock\PropertyEnumerationTable::getList([
        "select" => ["ID"],
        "filter" => [
            "PROPERTY.CODE" => "mylist",
            "PROPERTY.IBLOCK_ID" => $iblockId,
            "VALUE" => $inputValues
        ],
        "cache" => [
            "ttl" => 86400
        ]
    ]->fetchAll()), "ID");

    $enumIds - будет массив с ID списочных значений, который нужен Вам в CIblockElement::Add
    Стоит обратить внимание на то что в примере в метод getList передан параметр cache. Это позволит каждый раз не обращаться к БД, а взять значение из кеша.
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Bitrix api Как добавить торговых предложений к товару?

    Bankir77
    Bankir77 @Bankir77
    Для этого нужно иметь два инфоблока: товары и торговые предложения, инфа по настройке тут https://dev.1c-bitrix.ru/learning/course/?COURSE_I...

    Рабочий пример:
    CModule::IncludeModule('iblock');
    CModule::IncludeModule('sale');
    
    $ciBlockElement = new CIBlockElement;
    
    // Добавляем товар-родитель, у которго будут торг. предложения
    $product_id = $ciBlockElement->Add(
        array(
            'IBLOCK_ID' => 13, // IBLOCK товаров
            'NAME' => "Товар 1",
            "ACTIVE" => "Y",
            // Прочие параметры товара
        )
    );
    // проверка на ошибки
    if (!empty($ciBlockElement->LAST_ERROR)) {
        echo "Ошибка добавления товара: ". $ciBlockElement->LAST_ERROR;
        die();
    }
    // добавляем нужное кол-во торговых предложений
    $arLoadProductArray = array(
        "IBLOCK_ID"      => 14, // IBLOCK торговых предложений
        "NAME"           => "Торговое предложение 1",
        "ACTIVE"         => "Y",
        'PROPERTY_VALUES' => array(
            'CML2_LINK' => $product_id, // Свойство типа "Привязка к товарам (SKU)", связываем торг. предложение с товаром
        )
        // Прочие параметры товара 
    );
    $product_offer_id = $ciBlockElement->Add($arLoadProductArray);
    // проверка на ошибки
    if (!empty($ciBlockElement->LAST_ERROR)) {
        echo "Ошибка добавления торгового предложения: ". $ciBlockElement->LAST_ERROR;
        die();
    }
    // Добавляем параметры к торг. предложению
    CCatalogProduct::Add(
        array(
            "ID" => $product_offer_id,
            "QUANTITY" => 9999
        )
    );
    // Добавляем цены к торг. предложению
    CPrice::Add(
        array(
            "CURRENCY" => "RUB",
            "PRICE" => 999,
            "CATALOG_GROUP_ID" => 1,
            "PRODUCT_ID" => $product_offer_id,
        )
    );
    Ответ написан более трёх лет назад
    1 комментарий
    1 комментарий
  • Почему регулярное выражение захватывает только первый элемент?

    dodo512 @dodo512
    $str = 'Число 560
    Размерный ряд: 42 88,44,46
    #Цена: 400 руб 400коп. шт.
    Место: 2А-75 корпус А';
    
    preg_match('/ряд:.+/', $str, $m);
    
    preg_match_all('/\d+/', $m[0], $r);
    
    print_r($r[0]);


    Или
    preg_match_all('/(?:\G(?!^)|ряд:)[\s,]\K\d+/', $str, $r);

    https://regex101.com/r/aMEAGG/1
    Ответ написан более года назад
    2 комментария
    2 комментария
  • Как осуществить парсинг следующих данных?

    Надим Закиров @zkrvndm
    Софт для автоматизации
    Вытаскиваешь текст и используешь на нем регулярные выражения для получения нужных данных.
    Ответ написан более года назад
    Комментировать
    Комментировать
  • Можете подсказать, как подружить menu.sections и UF_*?

    PetrPo @PetrPo
    Ну как че дальше, надо добавить эти UF в массив $aMenuLinksNew, он заполняется в цикле по $arResult["SECTIONS"], т.е. чтобы не сильно что-то менять, выше после запроса, в цикле while заполняется $arResult["SECTIONS"], там и добавь свои UF.
    Потом где $aMenuLinksNew заполняется, последний массив
    array(
          "FROM_IBLOCK" => true,
          "IS_PARENT" => false,
          "DEPTH_LEVEL" => $arSection["DEPTH_LEVEL"],
        ),

    вот в него и добавляй, в компоненте меню значения будут в ключе PARAMS

    В CIBlockElement::GetList бессмыслено добавлять UF
    Ответ написан более года назад
    4 комментария
    4 комментария
  • Есть ли jquery галерея с подобным функционалом?

    FeST1VaL
    FeST1VaL @FeST1VaL
    Тихий
    Может подойдет вам PhotoSwipe, ну а по факту что вам мешает самому счетчик добавить?
    Ответ написан более года назад
    1 комментарий
    1 комментарий
  • Как сделать массые редиректы в каталоге?

    shambler81
    Виктор Таран @shambler81 Куратор тега htaccess
    не совсем понятно что из них было что стало.
    Дай пару ссылок прям как есть было стало
    С регулярками проблем нет там все можно вставить
    Ответ написан более года назад
    7 комментариев
    7 комментариев
  • Как исключить из регулярного выражения ссылку на файл?

    john36allTa
    Somewhere Intech @john36allTa
    alien glow of a dirty mind
    1. Добавьте вопросу тег "регулярные выражения"
    2. Шаблон:
    let pattern = /(https:\/\/vk\.com.+\b(?<!\.png))$/
    Это исключает совпадение, если строка оканчивается на .png:
    \b(?<!\.png)\b$
    Ответ написан более года назад
    5 комментариев
    5 комментариев
  • Как исключить из регулярки эмоджи?

    rodionme
    Родион Мещеряков @rodionme
    Как минимум, ссылка на картинку отличается от ссылки на страницу наличием расширения файла (в данном случае .png). Можно изменить регулярку, чтобы она отбрасывала ссылки, которые включают в себя/заканчиваются на .png и другие возможные расширения файлов с эмоджи.

    Вообще, регулярка сейчас выглядит слишком громоздко, если все прочие ссылки такого же вида.
    Ответ написан более года назад
    3 комментария
    3 комментария
Оценили как «Нравится»
  • 1
  • 2
  • 3
  • Следующие →
Самые активные сегодня
  • puzaka
    • 10 ответов
    • 0 вопросов
  • mayton2019
    • 8 ответов
    • 1 вопрос
  • freeExec
    freeExec
    • 7 ответов
    • 0 вопросов
  • firedragon
    Владимир Коротенко
    • 7 ответов
    • 0 вопросов
  • vabka
    Василий Банников
    • 6 ответов
    • 0 вопросов
  • rPman
    • 6 ответов
    • 0 вопросов
  • © Habr
  • О сервисе
  • Правила
  • Обратная связь
  • Блог

Войдите на сайт

Чтобы задать вопрос и получить на него квалифицированный ответ.
Войти через центр авторизации