Задать вопрос
  • Как извлечь несколько классов из html в виде сss кода в phpstorm?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Есть плагин ECSStractor и для шторма тоже.
    Только вот пункт в консольном меню появляется только на HTML файлах и его нету в файлах php. Приходится выделять блок с HTML и копировать в временный scratch-файл (ALT+Enter ->Create new scratch file from selection)
    А из него уже вызвать (Ectract CSS)
    Ответ написан
    1 комментарий
  • Фильтрация по диапазону свойства у товара?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Попробую порассуждать на примере вашего свойства межцентровое расстояние 160-320 (мм)
    В фильтре в виде диапазона (линия с ползунками) - может отображаться только цифровое свойство и значений у нас как будто 2...
    Но если мы заведем множественное свойство MEZCENTR_SIZE и впишем у товара 2 значения 160,320
    то фильтр в виде диапазона будет искать только по этим 2м точкам на его линии то есть товар будет находиться только если в выбранный диапазон на фильтре будет попадать хотя бы одна из точек
    180-350 или 100-200 товар будет найден, а вот при 180-290 не будет хотя нам именно этого надо добиться...

    Дело в том что такой фильтр имеет 2 бегунка
    выставляющие условие 2м инпутам на свойство MEZCENTR_SIZE. Левый MEZCENTR_SIZE(от). Правый MEZCENTR_SIZE(до).

    Есть 2 варианта как сделать то что нам надо.
    1) Простой и не желательный.
    Задавать в свойство MEZCENTR_SIZE не 2 значения (мин/макс) а добавлять еще прямо штук десять промежуточных. Тогда точки от этого свойства у товара равномерно расположатся по линии и будет сложно поставить диапазон так чтобы не одна точка между нашими мин/макс значениями в него не попала.
    Понятное дело - такой подход понижает эффективность фасетного индекса.
    Но иногда и так можно поступить. «Переходи на Тёмную сторону Силы. У нас есть печеньки»

    2) Более затратный но правильный.
    Надо создать 2 разных свойства (для мин/макс значений) MEZCENTR_SIZE_MIN и MEZCENTR_SIZE_MAX
    Но не выводить их в виде 2х разных диапазонов, а кастомизировать вывод в самом компоненте умного фильтра.
    Диапазон кастомного бегунка фильтра должен начинаться от минимального значения MEZCENTR_SIZE_MIN и заканчиваться максимальным MEZCENTR_SIZE_MAX
    Левый бегунок должен фильтровать только MEZCENTR_SIZE_MAX(от), а правый только MEZCENTR_SIZE_MIN(до).

    Из ограничений - в товаре обязательно должны быть заполнены оба поля (если значение одно - то мин/макс должны быть одинаковыми)

    вот ссылка на пример реализации
    https://dev.1c-bitrix.ru/support/forum/forum6/topi...
    Ответ написан
    Комментировать
  • Ошибка 28 VK API Application authorization failed: refresh service token?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Методом научного тыка сообразил.
    Если зайти Мои приложения > Само приложение > Настройки
    Там будет поле "Сервисный ключ доступа" вот его вполне получается подставлять в значение access_token
    и получить данные. по крайней мере с https://api.vk.com/method/wall.get прокатывает.
    Ответ написан
    Комментировать
  • Как убрать из тела страницы системные скрипты ядра битрикса?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Нашел причуну вот тут https://dev.1c-bitrix.ru/support/forum/forum6/topi... в нашем случае эти файлы подключались так как у нас в настройках Главного модуля стояла галочка"Продлевать сессию при активности посетителя в окне браузера".
    Ответ написан
    Комментировать
  • Как в bitrix:form реализовать множественную загрузку файлов?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Ну если делать стандартным способом то можно сделать только много ответов типа файл. и на форме это будет отображаться отдельными полями и по отдельности цеплять в них файлы.

    В моем случае сработал такой способ:
    Насоздавал в вопросе множество ответов типа файл.
    А при выводе формы не отображаю их. Вместо этих инпутов отображаю свой с name="files"
    <input type="file" id="files" name="files[]" multiple>

    Далее подписываюсь на событие form onBeforeResultAdd
    и вручную распихиваю все файлы.
    AddEventHandler("form", "onBeforeResultAdd", ['FormResultAdd', 'before']);
    
    class FormResultAdd
    {
    
    
        /**
         * Вернет input name для ответов типа file вопроса fieldCode
         * @param $formId
         * @param string $fieldCode
         * @return array
         */
        public static function getFilesInputNames($formId, $fieldCode = 'FILES'){
            $res = [];
            if($question = \CFormField::GetBySID($fieldCode, $formId)->Fetch()){
                $by = 's_id';
                $order = 'asc';
                $filter = false;
                if(intval($question['ID'])){
                    $rsAnswers = \CFormAnswer::GetList($question['ID'], $by,$order,["FIELD_TYPE"=>'file'], $filter );
                    while ($arAnswer = $rsAnswers->Fetch())
                    {
                        $res[]='form_file_'.$arAnswer['ID'];
                    }
                }
            }
            return $res;
        }
    
        /**
         * Осуществляем загрузку множества файлов через один input type="file" multiple
         * так как стандартными средствами Битрикс можно сделать только через множество input type="file"
         * @param $WEB_FORM_ID
         * @param $arFields
         * @param $arrVALUES
         * @throws Main\SystemException
         */
        public static function loadMultiple($WEB_FORM_ID, &$arFields, &$arrVALUES) {
            global $_FILES;
            if($_FILES['files']){
                $files = [];
                if(is_array($_FILES['files']['name'])){
                    foreach ($_FILES['files'] as $key => $val){
                        foreach ($val as $k => $v){
                            $files[$k][$key]= $v;
                        }
                    }
                }else{
                    $files = [$_FILES['files']];
                }
                unset($_FILES['files']);
    
                $err = [];
                if($inputsName = self::getFilesInputNames($WEB_FORM_ID)){
                    foreach ($files as $f){
                        if($inputName = array_shift($inputsName)){
                            $_FILES[$inputName] = $f;
                        }else{
                            $err[] = $f;
                        }
                    }
    
                    if($err){
                        $firelds = [
                            'TITLE' => 'Не хватило полей в форме для подгрузки файлов '.__FUNCTION__,
                            'MESSAGE' => print_r($err, true),
                        ];
                        \CEvent::Send('DEBUG_SEND', SITE_ID, $firelds);
                    }
                }
            }
            return true;
        }
    
        public static function before($WEB_FORM_ID, &$arFields, &$arrVALUES) {
            self::loadMultiple($WEB_FORM_ID, $arFields, $arrVALUES);
        }
    
    }


    Из минусов это все таки полей должно хватать на прикрепленные файлы, если нет - лишние файлы удалятся.
    Ответ написан
    Комментировать
  • Почему CIBlockElement::getList не отдает IBLOCK_SECTION?

    randomizex
    @randomizex Автор вопроса
    http://resume.web-ivan.ru
    Почему не приходит этот массив?

    Как я понял из того что увидел в самом классе CIBlockElement поле IBLOCK_SECTION и недолжно приходить в getList нет логики его формирования. Оно есть только в Update этого класса и служит для того чтобы можно было подвязать элемент к нескольким разделам + указать Основной раздел IBLOCK_SECTION_ID

    В каких случаях вообще приходит это поле IBLOCK_SECTION? Ведь в документации оно есть...

    Оно судя по всему не отдается API никогда. Служит только для нужд CIBlockElement::Update

    Как получить список всех разделов к которым подвязан этот элемент?

    Ну тут приходится пользоваться CIBlockElement::GetElementGroups
    Ответ написан
    Комментировать
  • Как вызывать пагинацию для своего orm объекта в админке сайта?

    randomizex
    @randomizex Автор вопроса
    http://resume.web-ivan.ru
    Как "Так себе" решение помогло сменить шаблон на '.default' и "SEF_MODE" => "N"
    а числом элементов на странице можно управлять через $nav->setPageSize().
    Ответ написан
    Комментировать
  • Как изменять данные в сторонней форме созданной во vue через javascript?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Надо пробросить собитие input.
    Или change если у инпута v-model.lazy
    let domme = document.querySelectorAll('input')
    domme[1].value = 'Hello world'
    domme[1].dispatchEvent(new Event('input'));
    Ответ написан
    Комментировать
  • Почему появилась ссылка такого вида в поисковике?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Это русские символы в url преобразуются так %3E%D0%91%D0%B0%D1%80%D1%8C%D0 > Барь
    У вас формируется url вида www.site.ru/razdel/Барь..

    Посмотрите в настройках Компонента или/и Инфоблока как формировать ссылки на детальные страницы.

    Если точнее то у вас ссылка вида >Барьер</a>, <a href= похоже кавычки закрыть забыли
    Ответ написан
    Комментировать
  • В админке битрикса (bitrix) на страницах подгружаются не все скрипты и стили по причине 403?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    1) может часть файлов по протоколу https запрашиваются а у сайта протокол http?
    если .settings.php переносили и там параметр
    "https_request" => array(
          "value" => true
        )

    остался
    или В файле /bitrix/php_interface/dbconn.php насильно проставили $_SERVER["HTTPS"] = "on";
    2) может файлы лежат в папках где доступ через .htaccess закрыт?
    Ответ написан
    Комментировать
  • Можно ли использовать $APPLICATION->ShowProperty() в коде шаблона компонента?

    randomizex
    @randomizex Автор вопроса
    http://resume.web-ivan.ru
    Ярослав Александров, Евгений Спасибо, ответ ясен. Просто иногда очень хочется )
    Еслиб в этот вызов кешировалась строка которая позднее разбералась перед выводом, и подменялось ее значение уже перед самым выводом (как я думал) я бы получал необходимый эфект. Но как вижу эти функции ShowProperty(), ShowTitle() по другому работают (закрывают текущий буфер создают, еще один для вывода результата функции, далее закрывают его и открывают новый) вообщем вообще не так как я думал. Следовательно при кешировании компонента этого всего не происходит, а получается эфект что кешируется только часть вывода компонента после вызова ShowProperty().

    Выводы
    1) ShowProperty(), ShowTitle() нельзя использовать в кешируемых частях кода.
    2) Либо выносим их использование в шаблон сайта, либо на некешируемые страницы комплексных компонентов (типа detail.php section.php news.php и тд.)
    Ответ написан
    Комментировать
  • Как проверить корректность номера телефона?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Если все же на регулярках устроит
    // оголяем телефон до цифр
    function phoneTrim($phone)
        {
            $phone = preg_replace('/([- _()+])?/', '', $phone);
    
            if (mb_stripos($phone, "89") === 0) {
                $phone = '79' . mb_substr($phone, 2);
            }
            return $phone;
        }
    // проверяем на корректность
    function isPhoneValid($phone)
        {
            $phone = phoneTrim($phone);
            $res = false;
            if (mb_strlen($phone) == 11) {
                if (mb_stripos($phone, "79") === 0) {
                    $res = true;
                }
            }
            return $res;
    
        }


    Ну и соответственно если там бОльший беспридел то можно дописать функции.
    Ответ написан
    Комментировать
  • Почему CIBlockElement::Add() не отдает ошибок на обязательные поля?

    randomizex
    @randomizex Автор вопроса
    http://resume.web-ivan.ru
    Разобрался. В CIBlockElement::Add() проверка на свойства работает по другому.
    она проверяет валидность только переданных свойств в 'PROPERTY_VALUES'. То есть чтобы она заругалась что (Обязательное свойство "###" не заполнено). Его надо отдать в 'PROPERTY_VALUES' с пустым значением.
    Также он не проверяет права на запись у пользователя, их надо проверять отдельно через \CIBlock::GetPermission().
    Ответ написан
    Комментировать
  • Где исправить значение mbstring.func_overload = 2 если устанавливаю 1с-bitrix на openserver?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Дополню ответ выше. Если надо эти настройки сделать только для отдельного сайта то в настройках Апача пишем правило на конкретную папку c сайтом
    например у меня сайт в директории mybitrixutf8.loc
    сработало след правило:
    <Directory "%ssitedir%/mybitrixutf8.loc*">
      php_admin_value mbstring.func_overload 2
      php_admin_value mbstring.internal_encoding UTF-8
    </Directory>

    ну и перезагружаем сервер само собой
    Ответ написан
    Комментировать
  • С какого сайта можно брать цены на бензин для проекта?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Если нужны средние по области или городу:
    https://multigo.ru/benzin/info-benzin-price/avprice
    Ответ написан
    Комментировать
  • Почему Bitrix при редактировании включаемой области заменяет style на st yle?

    randomizex
    @randomizex Автор вопроса
    http://resume.web-ivan.ru
    Оказалось надо указать группе редакторов уровень доступа к модулю «Проактивная защита» как «Обход проактивного фильтра».
    Нашел решение тут.
    murzix.ru/2010/11/bitrix-code-trouble
    Ответ написан
    Комментировать
  • Как в битриксе получить значения свойств платежной системы?

    randomizex
    @randomizex
    http://resume.web-ivan.ru
    Параметры хранятся в таблице b_sale_bizval получить их можно https://dev.1c-bitrix.ru/api_d7/bitrix/sale/busine...

    Примеры

    адрес успешной оплаты если не задан свой
    Код
    $successUrl = \Bitrix\Sale\BusinessValue::get(
    "SUCCESS_URL",
    "COMMON"
    );

    параметр "Код магазина" платежной системы с id 8 если задан свой
    Код
    $shopId = \Bitrix\Sale\BusinessValue::get(
    "SHOP_ID",
    "PAYSYSTEM_8"
    );
    Ответ написан
    Комментировать