Задать вопрос
  • Как изменить цвет карточки сделки в зависимости от ее статуса?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Есть разные этапы у сделки. К примеру только созданная сделка (новая) и статус оплачено или не оплачено. Не подскажите, как изменить цвет карточки сделки, в зависимости от статуса?


    Вы иметее ввиду покрасить карточку в канбане?
    Размышление можете начать отсюда: Как присвоить стиль через JS?
    Ответ написан
    Комментировать
  • Разработка комплексного компонента, как передавать данные с ЧПУ?

    @kudis
    Bitrix developer
    Для ЧПУ нужно править urlrewrite.php
    например:
    array(
            "CONDITION" => "#^/catalog/(\\d+)/(\\d+)/id(\\d+)/[^\/]*$#",
            "RULE" => "SECTION_ID=\$1&SUBSECTION_ID=\$2&ELEMENT_ID=\$3",
            "ID" => "galament:shop",
            "PATH" => "/catalog/index.php",
        ),

    будет ловить все запросы вида /catalog/123/123/id123/
    и засовывать из в переменные SECTION_ID=\$1&SUBSECTION_ID=\$2&ELEMENT_ID=\$3

    а подключить 'element' нужно в комплексном компоненте, например, как это сделано в Bitrix catalog
    if(isset($arVariables["action"]) && in_array($arVariables["action"], $arCompareCommands))
    		$componentPage = "compare";
    	elseif(isset($arVariables["ELEMENT_ID"]) && intval($arVariables["ELEMENT_ID"]) > 0)
    		$componentPage = "element";
    	elseif(isset($arVariables["ELEMENT_CODE"]) && strlen($arVariables["ELEMENT_CODE"]) > 0)
    		$componentPage = "element";
    	elseif(isset($arVariables["SECTION_ID"]) && intval($arVariables["SECTION_ID"]) > 0)
    		$componentPage = "section";
    	elseif(isset($arVariables["SECTION_CODE"]) && strlen($arVariables["SECTION_CODE"]) > 0)
    		$componentPage = "section";
    	elseif(isset($_REQUEST["q"]))
    		$componentPage = "search";
    	else
    		$componentPage = "sections";
       $this->IncludeComponentTemplate($componentPage);
    Ответ написан
    7 комментариев
  • Битрикс как первая работа?

    AlexeyCaTHaR
    @AlexeyCaTHaR
    N лет веду разработку под Битрикс. Почему?

    1) Довольно много клиентов e-commerce, которые не будут переходить на другой фреймворк, а задачи нужно решать и с улицы первый попавшийся либо напишет говно, либо не напишет ничего. Поэтому оплата там соответствующая. Норм зп для сложных проектов.

    2) Довольно низкий порог вхождения(накидать сайт из компонентов и поправить шаблон сможет и ололо. И частенько это приходится переписывать более оптимизированно, т.к. родные компоненты = мрак). Работа есть всегда.

    3) Работа с 1с из коробки(в большинстве случаев всё заводится сразу). Не надо фантазировать и писать то, что уже написано.

    4) Никогда не поздно мигрировать в сторону на Yii\Laravel\Symfony если у тебя есть голова на плечах.

    P.S> видел проект, где от битрикса только админка, а бэк на симфони))
    Ответ написан
    Комментировать
  • Битрикс как первая работа?

    @anton99zel Куратор тега 1С-Битрикс
    29а класс средней школы №7
    Стоит ли в качестве первого места работы выбирать компанию, специализирующуюся только на Битриксе?

    Я и мои сверстники в годы юности выбирали заводы и фабрики в качестве первой работы....
    Ответ: Да, но вам может не понравится или вы не сможете в нём разобраться, и будете потом на форумах писать, что Битрикс - Г.
    Заказчикам от Битрикс нужен не код, а решение задач по связкам 1с, оплаты, эквайринг, сдэки, маркеты....
    Тут думать надо! Ничего плохого не вижу, если вы пару лет посвятите Битриксу.
    Ответ написан
    Комментировать
  • Битрикс как первая работа?

    Ramapriya
    @Ramapriya
    Говнокод пишут люди. Можно и на Symfony/Laravel/Yii такую кашу наворотить, что разработчиков, которые будут поддерживать ваш код, будет преследовать навязчивое желание оторвать вам руки, а можно и на битриксе написать хороший структурированный код, легко читаемый даже без комментариев.

    Понятно, что в битриксе есть старое ядро, которое часто рождает в голове вопрос "Это ещё что за хрень?", но в то же время Битрикс развивается и становится похожим на уже полноценный фреймворк.

    И потом, нежелание разработчиков "пачкать руки" битриксом даёт преимущество в виде низкой конкуренции на вакансии, а это, в свою очередь, заставляет бизнес предлагать более выгодные условия для кандидатов.

    Да и вообще, если лично вам битрикс интересен, то не слушайте никого и не оглядывайтесь на тренды. Работа должна приносить не только деньги, но и удовольствие.
    Ответ написан
    Комментировать
  • Битрикс как первая работа?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    70% екомерц в россии это битрикс
    остальные 30 самопись других движков на данный момент для екомерц нет.
    А на " серьезные" проекты берут программистов в теме.
    Так что совершенно нормальным будет решение работать на самом массовом движке в россии.
    Ответ написан
    Комментировать
  • Битрикс как первая работа?

    Zoominger
    @Zoominger
    System Integrator
    Правда, что разработка под битрикс по умолчанию означает получение плохого опыта

    Нет. Это большой серьёзный продукт, который используется огромным количеством фирм. Не слушайте дурачков, идите, если берут.
    Ответ написан
    1 комментарий
  • Битрикс24 Коробочная версия, как реализровать через PHP код создание события - напоминания в календаре на опреденно число и время?

    @DRusak
    $arParam = [
        'arFields' => [
            'ID' => $id, // or 0 for add new event
            'OWNER_ID' => 5,// group 5
            'SECT_ID' => 13, // group 5
            'ATTENDEES_CODES' => ['U'.$userId],
            'CREATED_BY' => $userId,
            'IS_MEETING' => true,
            'SKIP_TIME' => false,
            'CAL_TYPE' => 'group', // 'user', 'company_calendar', 'events'
            'TZ_FROM' => 'America/Atikokan',
            'TZ_TO' => 'America/Atikokan',
            'DATE_FROM' => $from, // 01/19/2021 12:00
            'DATE_TO' => $to,     // 01/19/2021 14:00
            'NAME' => $name,
            'DESCRIPTION' => $text,
        ],
        'userId' => $userId,
        'checkPermission' => false,
    ];
    
    $resId = CCalendar::SaveEventEx($arParam)['id'];
    Ответ написан
    Комментировать
  • Как сделать подмену файла на событии OnBeforeCrmDealUpdate?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вы уже правильно ответили в своем вопросе: Как прикрепить файл к сделке в множественное поле типа Файл?

    1) При работе с коробочным API использование облачного API не допустимо.
    Вместо конструкции:

    $fields['UF_CONTRACT_REGISTER_DOCUMENT'][] = [  
                    'fileData' => [
                        preg_replace('#.*/#', '', $resPdf['path']),
                        base64_encode(file_get_contents($protocol . '://' . $_SERVER["SERVER_NAME"] . $resPdf['path']))
                    ]
                ];


    Вам необходимо использовать \CFile::MakeFileArray() в который вы передадите абсолютный путь к необходимому файлу.

    2) Не обязательно получать все поля сделки сразу. Для начала имеет смысл проверить: а пришло ли у вас в $fields поле UF_CONTRACT_REGISTER_DOCUMENT. Дело в том, что в новой карточке к вам может прийти только NAME (например меняете заголовок) или набор других полей. Нет смысла каждый раз получать эти поля и сравнивать с возможным null-значением ибо null значение всегда не будет равно существующему элементу.

    Можно использовать для проверки конструкцию array_key_exists('UF_CONTRACT_REGISTER_DOCUMENT', $fields)

    3) Генерация pdf файла может занять продолжительное время, а запрос на сохранение имеет таймаут в 30 секунд. Если вы не успеете то для пользователя он вызовет бесконечную загрузку и нерабочую карточку. Имеет смысл делать отложенную генерацию. т.е. регистрировать агента на дальнейшую генерацию или использовать другие механизмы для заполнения данного поля
    Ответ написан
    Комментировать
  • Стоит ли делать проект специально для гитхаба?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Довольно часто предлагают тестовое задание, на которое у меня нет времени.

    В таких ситуациях правильнее будет сказать "Каковы условия оплаты данного задания?". Большинство неадекватов на этом этапе отсеиваются. Просто потому что не только вы что-то делаете для работодателя, но и он вам что-то дает. Если работодатель хочет получить какую-то работу еще до начала трудовых отношений - то следует задуматься, а нужен ли вам такой работодатель? Я просто из исследовательского интереса прошел несколько десятков тестовых заданий и я НИ РАЗУ не получил какого-либо фидбэка. По ощущениям - на результаты тестового никто не смотрит и всем тупо пофиг на него. Поэтому когда мне предлагают тестовое задание - всегда сразу спрашиваю оплату. Никто не хочет платить - это факт, тут ничего не сделать. Почти всегда сразу в отказ идут. Было несколько случаев, когда вроде согласились - но все равно ушли в закат. В целом же, в практике был лишь один случай, когда ко мне пришли и сказали - вот ты умеешь то-то и то, вот тебе тестовое задание, оцени, мы тебе денег сразу заплатим, а там если все пучком - будем работать дальше. И еще несколько случаев, когда работодатели сразу в описании вакансии писали, что тестовое задание оплачивается. Смотреть код тоже почти никому не интересно - такой случай тоже был лишь один, когда я предложил показать код, согласились посмотреть и поспрашивать про него. В абсолютном большинстве остальных случаев, адекватные работодатели сразу говорят: по результатам собеседования нас все устраивает, далее делаем так - вот тут у нас список задач, выбирай одну-две-три простых задачки, если все отлично - работаем дальше, если нет - ну что ж, выдадим зарплату за эти задачки и разбежимся миром. Все остальные, где там сложные и долгие интервью то с одним, то с другим, то задание такое, то сякое - больше на лотерею похоже, когда крутишь барабан и гадаешь - будет сектор приз или сектор ноль.

    Разумно ли написать проект с нуля, скажем, интернет магазин, залить все это на гитхаб и давать ссылку работодателям каждый раз когда просят пройти тестовое задание?

    Специально - нет, не нужно. Разве что по результатам прохождения курса учебного какого - можно выложить. Ну и пет-проекты никто не отменял - вот их да, можно и нужно выкладывать на гитхаб и периодически подкармливать.
    Ответ написан
    Комментировать
  • Где и как хранить языковые фразы для javascript в Битрикс?

    @ZardoZAntony
    программист, сис. админ
    Я так делаю в шаблоне:
    <script>
      BX.message({
        'BTN_MESSAGE_BASKET_REDIRECT': '<?=GetMessageJS("BTN_MESSAGE_BASKET_REDIRECT")?>',
        'BTN_MESSAGE_CLOSE_POPUP': '<?=GetMessageJS("BTN_MESSAGE_CLOSE_POPUP")?>',
        'CART_CAPTION_ADD': '<?=GetMessageJS("CART_CAPTION_ADD")?>',
        'CART_ADDED_TEMPLATE': '<?=GetMessageJS("CART_ADDED_TEMPLATE")?>'
      });
    
      console.log(BX.message("CART_CAPTION_ADD"));
    </script>
    Ответ написан
    Комментировать
  • Пишет Class not found. Как правильно определить пространство имен?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Эээ... а что вы сделать то хотите ?

    Я вот о чем говорю: при использовании ООП в bitrix вы сталкиваетесь сразу с 2 большими стенами - применение ооп и битрикс. Прежде чем разбирать конкретный код хотелось бы немножко просветить вас в самой архитектуре битрикса.
    В терминологии Битрикса он использует концепцию MVC, но в рамках битрикса, а это означает что на любой странице где вы общаетесь с ним вы должны подключить пролог (хотя бы prolog_before) и эпилог (хотя бы epilog_after, ну в идеале). Именно "компонент" и является тем самым MVC (Вообще это скорее VC + row access, так как модели по сути нет). Есть класс CBitrixComponent (контроллер) и класс CBitrixComponentTemplate (который совместно с файлами шаблона и образует view).

    Вызов компонента происходит из глобальной переменной $APPLICATION путем метода IncludeComponent. До версии 14 (если мне не изменяет память) вообще не было такого понятия как class.php, где можно было отнаследоваться от CBitrixComponent и перекрыть какие-нибудь функции (шаблонизатор к примеру сменить), а после нового ядра d7 появилась возможность отнаследоваться от CBitrixComponent и в файле class.php разместить свой код (таким образом мы сохраняем и class.php с новыми функциями и component.php с логикой), а перекрывая метод executeComponent вы можете избавиться и от component.php.

    С точки зрения архитектуры (рекомендую изучить документацию, она очень обширна и познавательна) все компоненты должны лежать в так называемом пространстве имен, чем обычно служит ник-нейм или название компании (Естественно начинается не с цифры и содержит только латинские буквы), которые в свою очередь могут располагаться в /bitix/components/#пространство_имен#/#название_компонента#/

    Теперь построчно разберем Ваш вопрос:

    Вы положили свой класс сюда: /bitrix/templates/app/Pi/Test.php, что является неверным с точки зрения архитектуры, так как поместили класс отвечающий за контроллер в папку с шаблоном. Если вы не пишете свой модуль вы можете подключить его например в /local/php_interface/classes/ (пример надуманный, можете просто в /local/php_interface положить или сразу в init.php), однако для этого вы должны будете написать autoloader, так как у битрикса он работает только для модулей. Предположим вы в init.php напишете грубый require_once с файлом.

    Затем вы делаете следующее:

    Что является неверным, так как по сути вы обьявляете неймспейс для файла и это с точки зрения php выглядит вот так в конечном итоге:

    class app\Pi\test extends app\Pi\CBitrixComponent
    {
    // ...
    }

    А класса app\Pi\CBitrixComponent не существует. Так что вам нужно поправить пример хотя бы так:

    class test extends \CBitrixComponent

    Настоятельно рекомендую прочитать документацию или хотя бы посмотреть видео с академии битрикс. Сама система не подарок, а другой программист который увидит ваш код будет говорить что это битрикс виноват.
    Ответ написан
    Комментировать
  • Vue3 как показать скрыть элемент внутри v-for?

    0xD34F
    @0xD34F Куратор тега Vue.js
    Показываем не более одного - добавляем в компонент свойство, которое будет содержать id, индекс или ещё что-то уникальное для каждого из элементов данных (да хоть бы и ссылку на сам элемент). Показываем скрытое в зависимости от равенства значения этого свойства тому, что доступно в текущей итерации v-for.

    Или, показываем несколько сразу - создаём отдельный компонент, в экземпляры которого будут передаваться элементы данных. Внутри компонента свойство, в зависимости от значения которого (истина-ложь) показываем или скрываем чего там надо.
    Ответ написан
    Комментировать
  • Хочу сделать таблицу на vue3 которая не будет однофайловым компонентом, какой запрос вводить чтобы найти статью описывающую как это сделать?

    Aetae
    @Aetae Куратор тега Vue.js
    Тлен
    Цитата из официальной документации:
    If you prefer a plain HTML setup without any build steps, you can use this JSFiddle as your starting point.


    Вот открывать тот филдл:
    код оттуда на всякий случай
    <script type="importmap">
      {
        "imports": {
          "vue": "https://unpkg.com/vue@3/dist/vue.esm-browser.js"
        }
      }
    </script>
    
    <div id="app">{{ message }}</div>
    
    <script type="module">
      import { createApp } from 'vue'
    
      createApp({
        data() {
          return {
            message: 'Hello Vue!'
          }
        }
      }).mount('#app')
    </script>

    И делаешь также у себя.
    А дальше все статьи для однофайловых компонентов подойдут и тебе. Ну и плюс немного знания js для импорта и использования библиотек.

    Единственное, что следует помнить, это то что ты пишешь в html, а потому если в статье кто-то использует компоненты так:
    <SomeComponent :someProp=""val"/>
    то тебе надо ручками сделать так:
    <some-component :some-prop=""val"></some-component>
    Почему? Птому что 1 - html регистронезависимый и SomeComponent читается как somecomponent, а vue такого не знает, 2 - список тэгов которые могут самозакрываться ограничен.
    Ответ написан
    Комментировать
  • Ваши действия, если джуниор не успевает выполнить задачу?

    bk0011m
    @bk0011m
    Системный администратор
    А какие варианты? Не можешь грамотно поставить задачу - делай сам.
    В данном случае все по ситуации. Если сроки оттянуть нельзя, садишься рядом и начинаешь ваять. Или садишь рядом с джуниором более опытного коллегу. В любом случае совместно можно что-то придумать
    Я так думаю на собеседовании пытались выяснить кто вы, руководитель или исполнитель. Или типа того.
    В любом случае я бы не парился. Если задают подобные вопросы, я бы сразу послал их подальше.
    Ответ написан
    2 комментария
  • Как в гугл хром изменить внешний вид вкладок?

    Wispik
    @Wispik
    Просто поменяй тему
    Ответ написан
    Комментировать
  • Какой пароль от mysql -u root -p в BitrixVM?

    shambler81
    @shambler81 Куратор тега 1С-Битрикс
    cat /root/.my.cnf | grep password
    Ответ написан
    Комментировать
  • Как скрыть первый option в списке select помощью jquery?

    @sdgroup14
    <opition hidden>
    Ответ написан
    Комментировать
  • Slick для мобильных устройств?

    AntonLitvinenko
    @AntonLitvinenko
    HTML coder
    $(window).on('resize', function(e){
      // Переменная, по которой узнаем запущен слайдер или нет.
      var initLib = $('.library-slider').data('init-slider');
    
      if(window.innerWidth < 768){
        // Если слайдер не запущен
        if(initLib != 1){
          // Запускаем слайдер и записываем в data init-slider = 1
          $('.library-slider').slick({
            arrows: false,
            dots: true,
            slidesToShow: 3,
            slidesToScroll: 1,
            responsive: [
              {
                breakpoint: 576,
                settings: {
                  slidesToShow: 2,
                  slidesToScroll: 1,
                }
              },
              {
                breakpoint: 480,
                settings: {
                  slidesToShow: 1,
                  slidesToScroll: 1,
                }
              }
            ]
          }).data({'init-slider': 1});
        }
      }
      // Если десктоп
      else {
        // Если слайдер запущен
        if(initLib == 1){
          // Разрушаем слайдер и записываем в data init-slider = 0
          $('.library-slider').slick('unslick').data({'init-slider': 0});
        }
      }
    }).trigger('resize')
    Ответ написан
    Комментировать
  • При использовании ftruncate после сохранения файла fwrite появляются много NULL в начале строки, что сделать чтобы их там не было?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    используй rewind() после ftruncate()
    Ответ написан
    Комментировать