Задать вопрос
  • Как сделать подмену файла на событии 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()
    Ответ написан
    Комментировать
  • У меня php скрипт не обрабатывает до конца данные когда его веб-хук со стороннего ресурса повторно запускает, что сделать чтобы обрабатывал?

    ThunderCat
    @ThunderCat Куратор тега PHP
    {PHP, MySql, HTML, JS, CSS} developer
    В какую сторону копать?
    Очереди. Если хуки последовательные, а не дубли - заносите в очередь и на этом задача хука должна быть завершена, дальше должен работать механизм очереди, что там будет - раббитмкю или кафка или ларавель уже не суть важно.
    Ответ написан
    Комментировать
  • Есть ли смысл изучать 1с битрикс?

    alexyarik
    @alexyarik
    Битрикс разработчик
    Вы не написали свои навыки и опыт, но смысл есть:
    0) Без усилий ничего не будет. Любой путь начинается с первого шага.
    1) Изучать Битрикс с нуля проще так как для начинающих порог вхождения ниже, меньше календарный срок вхождения.
    2) Входить в веб разработку через Битрикс направление действительно проще, так как вы будете работать с готовыми продуктами Битрикса.
    3) Вакансии это как средняя температура по больнице. Начинающие 1Сники тоже мало получают, а например тот кто дорабатывает 1с ERP получает в разы выше. Уровень зарплаты напрямую зависит от опыта и сложности решаемых задач.
    4) 1с битрикс представляет из себя готовые продукты и решения на базе битрикс фреймворка. Всё это подкреплено маркетингом, обновлениями и технической поддержкой. Поэтому 60% рынка платных систем занимает Битрикс.
    5) Сложность понятие растяжимое, изучение нового это всегда сложно. Изучение Битрикс это путь по лестнице. Сделал шаг и опыт этого шага помогает подняться ещё выше. Лёгкой прогулки не будет.
    6) Перспектив у вас будет полно. Разработка готовых решений, модулей, различные интеграции.
    На данный момент в сегменте рынка занимаемом Битриксом не видно серьёзных конкурентов способных его подвинуть.
    Ответ написан
    3 комментария
  • Есть ли смысл изучать 1с битрикс?

    @anton99zel Куратор тега 1С-Битрикс
    29а класс средней школы №7
    Я бы не рассматривал Битрикс только по принципу "Там зарплаты больше...сказала одна бабка..."
    Если Вам Битрикс интересен, то учите, почему бы и нет.
    Я работаю с Битриксом уже 10 лет и о - до сих пор учу и до сих пор спрашиваю что да как сделать. И это не потому, что знания не даются, а потому, что, как выше заметили - это огромный API набор инструментов.
    Для своих проектов я не пользуюсь компонентами, а делаю все чисто кодом и api.
    Второй момент - сегодня Битрикс нужно рассматривать как CMS для магазинов, даже сама компания давно забила на остальные свои модули, такие как форум, опросы и прочее.
    Третий момент, если вы собрались зарабатывать на Битриксе, то нужно понять на чем именно - внедрение решений, разработка с нуля, и написание своих модулей с последующей продажей?
    В большинстве случаев, заказчиков не устраивает решения Битрикса или сторонних компаний. Заказчикам нужно, чтобы магазин на битриксе был заточен именно под их задачи. А тут же и не только Битрикс, а и php, js, api.
    И еще - не слушайте людей, которые трындят, что Битрикс низкокачественное Г. Просто они не вникли в него и уверены, что отдельные задачи можно делать в других CMS. Возможно это и так, но только для новостников, блогов, справочников и ландингов. Для крупных мастабируемых проектов в связке 1с-предприятие - лучше Битрикса пока ничего не придумали. Хотя бы посмотрите клиентуру компании и все станет ясно.
    Про ЗП. Тут все как всегда - от минус бесконечности до плюс бесконечности. Разные мы все, как и проекты тоже разные.
    Ответ написан
    4 комментария
  • Почему пишет что нет сайта если он есть?

    возможно нет папки битрикс или каких то служебных файлов в ней
    Ответ написан
    Комментировать
  • Почему не создается виртуальный коммутатор Hyper-V?

    @NortheR73
    системный инженер
    Там же вроде все просто - New-VMSwitch. Для внешнего коммутатора параметр SwitchType не нужен, указывается только имя или описание нужного сетевого адаптера.
    -SwitchType
    Specifies the type of the switch to be created. Allowed values are Internal and Private. To create an External virtual switch, specify either the NetAdapterInterfaceDescription or the NetAdapterName parameter, which implicitly set the type of the virtual switch to External.

    В свойствах физического адаптера, возможно, надо снять флажок Hyper-V Extensible Virtual Switch. Ну и на всех адаптерах его проверить не помешает. Дополнительно посмотрите логи Hyper-V Manager
    Ответ написан
    1 комментарий
  • Как увидеть список всех моих коммитов, PR в Github?

    @sirinitys
    С права над кнопками 5fb692189a2c4780647168.png где можно клонировать репозиторий, есть не заметная ссылка
    Ответ написан
    Комментировать
  • Зачем используют curl когда есть file_get_contents?

    riky
    @riky
    Laravel
    file_get_contents сложновато передавать и получать куки и др заголовки. file_get_contents для POST запроса тоже выглядит многословно, уже наравне с curl. Не очень хорошее поведение при 4xx 5xx ошибках и тд. Хорошей практикой будет использовать file_get_contents только для локальных файлов.
    Ответ написан
    1 комментарий
  • Как и для чего используется php://input?

    @granty
    Данные и так передаются по POST (или GET), но есть нюансы их обработки на стороне сервера.

    1. POST и GET данные в виде parameter=value&param2=val2 автоматически обрабатываются сервером и заполняются глобальные массивы $_POST/$_GET/$_REQUEST:
    $_POST['parameter'] = value;
    $_POST['param2'] = val2;

    GET-параметры при этом ещё и автоматически декодируются по urldecode().
    Через php://input можно получить "сырые" необработанные данные.

    2. Методом POST можно прислать, например, объект JSON, указав 'Content-type: application/json; charset=utf-8'. При этом массив-обёртка $_POST будет пуста, тк не присылается Имя_Параметра, а присылается только Значение_Параметра, и сервер не обрабатывает такие данные автоматически.
    Получить такие данные можно только через php://input, так как глобальные массивы $_POST/$_GET будут пустыми.
    Ответ написан
    Комментировать