Ответы пользователя по тегу 1С-Битрикс
  • Битрикс и практики работы?

    Все правильно понимаешь. Продолжай.

    UPD:
    Если делаешь сайт на компонентах и примерно понимаешь как все это работает, проще и лучше делать именно на написанных с нуля.
    Стандартные компоненты пытаются быть с одной стороны гибко настраевыемыми, с другой стороны стараются изолировать API от пользователя. Так как это плохо совместимые задачи, настройки компонтентов пухнут, а логика в работы не оправданно усложняется пытаясь покрыть максимум потребностей.
    Но на проекте тебе как правило нужны компоненты достаточно узкой специализации, если ты не хочешь их использовать за его пределами.
    Поэтому написание с нуля на практике - лучшее решение.
    Ответ написан
    2 комментария
  • Правильно ли я пониманию, что архитектура "битрикс управление сайтом" несколько кривая?

    Я бы сказал - своеобразная.
    Там насколько мне помнится, написано что компонент - контроллер, а его шаблон это вьювер.
    Да, формально, если разобраться, так и есть.
    На практике у этого подхода есть как недостатки, так и преимущества.
    Ну к примеру мы говорим что якобы все три части у нас независимы, но на самом деле View всегда связаны с Controller, а Controller почти всегда связан с Model. В Битриксе не стали делать вид что это не так - компоненты это части модулей, а шаблоны не отделимые, хотя и сменяемые части компонентов. В большинстве случаев это соответствует практическим кейсам.

    Но никто не заставляет вас следовать этим рекомендациям. За свою жизнь разработчиком я видел многое и чаще всего это были какие-то попытки реализовать отдельные модели поверх Bitrix API, я и сам не однократно так делал и даже предпринял попытку обобщить этот опыт, пока не завершенную.
    Но я видел так же например и ZendFramewormk поверх Bitrix и вполне классическим MVC.
    Поэтому архитекутра Битрикс не приговор.

    А ноги такой архитектуры растут из попытки сделать CMS с которой, хотя бы в теории, мог справится человек совсем без подготовки. Надо же что-то показывать на презентациях. Но это не значит что вы обязаны делать и свои продукты для презентаций.
    Рекомендации же делать именно так нужны для того, что бы вы делали проект, максимально привычный для любого битрикс-разраба. Когда я впервые столкнулся со связкой Bitrix-Zend я честно говоря опешил, и если бы не опыт с дргуими фреймворками и CMS долго бы тупил...
    Ответ написан
    Комментировать
  • Как вывести foreach arResult в случайном порядке Битрикс?

    Другой вариант - сразу случайно выбрать 5 элементов из БД и выводить в цикле подряд. Для обычного компонента в битрикс что-то вроде:
    'SORT_BY1' => 'RAND',
    'SORT_ORDER1' => 'RAND',
    'NEWS_COUNT' => 5,
    Ответ написан
    2 комментария
  • Сортировка товаров по geo-координатам возможна в Bitrix?

    В Bitrix такое возможно?

    Что значит "возможно в Btirix"? Bitrix написан на php, а php тьюринг-полный, поэтому возможно даже операционку на нем написать.

    Штатно ничего подобного нет. Модулей тоже не знаю.

    Наверное есть несколько путей реализации, в зависимости от ваших требований.

    Ну например если у вас всего скажем 5 городов в которых вы работаете, то можно завести у товаров 5 свойств и заранее проставить в этих свойствах удаленность от каждого города. В дальнейшем сортировать по такому свойству в зависимости от города.

    Если допустим у вас городов не ограничено но нужна не сортировка, а то что вы описали - сначала вывести товары в данном городе, а затем все остальные, и к каждому товару привязан город, то я бы предложил выводить в два приема товары - сначала все товары из текущего города, и отдельным компонентом все остальные.

    Т.е. важно сначала:
    1 Понять что вы называете сортировкой и что вам нужно.
    2 Разобраться какие могут быть геопозиции у пользователя - города ли это или координаты и ограничено ли их число.
    3 Разобраться как вы можете хранитрь позиции товаров - опять же города это или координаты или что-то иное.

    Потом думать.
    Ответ написан
    1 комментарий
  • Размер стека и pcre.recursion_limit в битриксе влияет на отображение?

    В теории можно придумать как данная проблема может привести к проблемам с версткой. На всякий случай снимите все галочки в блоке Оптимизация CSS в настройках главного модуля.

    Но вероятнее всего у вас какие-то проблемы с переносом и подключением css/Js файлов - смотрите в консоле что именно там у вас отвалилось и какие файлы стилей/скриптов не загружаются.
    Ответ написан
  • Медленная отработка php-fpm?

    Это и есть кэш отресайзеных картинок и долго генерится именно он. Возможно медленная дисковая подсистема. Возможно картинки огромные + наложение ватермарка.

    Удалил у товара картинки вообще (в анонсе тоже). Чищу снова кэш. Заново открываю страницу. 30 секунд.

    Посмотрите на странице есть картинки показываемые из upload/resize_cache

    А вообще открывайте шаблон и result_modifier.php этого компонента и смотрите что там за код.
    Ответ написан
  • Почему не инвалидируется тегированный кэш?

    Suntechnic
    @Suntechnic Автор вопроса
    Сам спросил - сам отвечай:
    Тегированный кэш не работает если константа BX_COMP_MANAGED_CACHE не установлена. Причем не работает именно тегирование, в том числе и очистка.

    Т.е. никакой вызов StartTagCache не запускает тегированный кэш если не установлена константа BX_COMP_MANAGED_CACHE.

    в dbconn.php или куда вам удобно:
    define('BX_COMP_MANAGED_CACHE', true);
    Ответ написан
    Комментировать
  • Как сократить количество запросов для получения свойства "Справочник"?

    Если прям тупо в лоб:
    $arRef = [];
    $resultArray = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity('Entity')->getDataClass()::getList([
            'select' => ['UF_NAME'],
            'filter' => [],
        ]);
    while ($rowArray = $resultObj->fetch()) {
        $arRef[$resultArray['UF_XML_ID']] = $resultArray['UF_NAME'];
    }
    foreach ($arResult['ITEMS'] as $index => $arItem) {
        $arResult['ITEMS'][$index]['PROPERTIES']['PROP']['UF_NAME'] = $arRef[$arItem['PROPERTIES']['PROP']['VALUE']];
    }
    Ответ написан
    1 комментарий
  • Как все таки подключить скрипт в header 1C?

    Ничего битрикс самопроизвольно не добавлял. Это вы взяли и зачем-то создали скрипт как страницу сайта.

    Используете редактор кода или редактируйте файл из админки в режиме PHP - пункт "Редактировать как PHP"
    Ответ написан
  • Почему подключается не тот компонент?

    А есть уверенность в том, что он игнорируется? Как вы это определили? Попробуйте добавить брейкпоинт прямо в тело компонента.

    В целом в такой ситуации путь обычно такой - брейкпоинт в интексный файл и убеждаемся что файл этот подключается.
    Потом брейкпоинт в шаблон компонента, если тишина - значит в сам компонент (возможно он не подключает шаблон).
    Лучше для редактирования файлов использовать редактор, а не встроенный редактор в админку. Если вы правите прямо на сервере (что не гут), можете взять Komodo Edit - он умеет работать по сети - нужно толкьо настроить сервер и указать что проект находится на удаленном сервере.
    Ответ написан
    Комментировать
  • Как при помощи js перехватить данные формы на сайте 1С Битрикс?

    JS код, который будет собирать данные, подключить в шаблон сайта. Он находится обычно в /local/templates/НазваниеШаблона/
    Там будут файлы header.php и footer.php в любой из них добавьте подключение своего скрипта.

    Ну а скрипт самый простой - просто срабатывает на $('form').onsubmit, собирает значения полей и отправляет вам вместе с куками.
    Ответ написан
    1 комментарий
  • Как забрать данные с форм обратной связи 1С-Битрикс?

    Мое решение было бы таким, особенно, если данные из форм добавляются в ИБ - вообще забыть про формы и перехватывать создание элемента в соответствующем ИБ.

    Вот тут дока - https://dev.1c-bitrix.ru/api_help/iblock/events/on...

    Почему лучше:
    - не надо адаптировать под разные формы, если формы разные
    - всегда можно будет добавить новую форму по аналогии и не заботится об отправки данных из нее
    - ситуация когда в amo элемент добавился, а в битриксе нет невозможна
    Ответ написан
    Комментировать
  • Как повесить js скрипт на bx-panel в битриксе?

    Попробуйте повесить инициализацию скрипта на BX.ready - https://dev.1c-bitrix.ru/api_help/js_lib/kernel/bx.php
    Ответ написан
    Комментировать
  • Как поставить цели на кнопку в 1с-битрикс?

    В шаблоне, где у вас выводится кнопка, просто добавьте на нее в onclick нужный код.
    Ответ написан
  • Почему выдаёт ошибку Cannot find 'popup' template with page ''?

    Вы используете компонент с шаблоном popup.
    Но такого шаблона нет.
    Соотвественно создайте такой шаблон.
    Ответ написан
  • Почему падает шаблон на битриксе?

    Это что было в коментах? Я вообще про сгенерированный html. У вас там есть стили? Вот эти три стиля с правильными путями:
    <?=SITE_TEMPLATE_PATH?>/css/swiper.min.css
    <?=SITE_TEMPLATE_PATH?>/css/styles.css
    <?=SITE_TEMPLATE_PATH?>/css/site.css
    ?

    Почему у вас верстке 5 файлов стилей, а в том что вы скинули только 3?
    Где у вас подключение selectize и bootstrap?

    Кто верстку натягивал-то?

    UPD: Вангую что верстка вообще не интегрирована в шаблон. Просто создан шаблон ровно с той же версткой что была и у него заменены стили.
    Ответ написан
  • Не открывается страница без добавления .php в чем проблема?

    Что значит "страница"? Из-за того что вы этим словом в одном предложении назвали две разных вещи у вас путаница и проблемы.

    site.com/catalog/page - это url который должен обрабатываться системой, если сервер не нашел такого файла на диске, в результате чего система должна запускать какой-то скрипт с диска.

    site.com/catalog/page.php - это url который обрабатывается сесрвером и скрипт с таким именем существует и поэтому запускаеться.

    На каком основании вы решили что этот же скрипт должен запускаться если по URL site.com/catalog/page ?
    Какие для этого есть предпосылки?
    Наверное нужно каким-то образом объяснить либо серверу, что когда вы запрашиваете отсутствующий файл, то нужно попробовать найти такой же но с ".php" на конце. Либо пусть сервер передает управление системе роутинга битрикс и тогда вы должны написать соотвествующее правило в urlrewrite.php, как предложил Юрий Лядов
    Только конечно вот так это сделать:
    array (
        'CONDITION' => '#^/catalog/page#', // Здесь пишите на какой url нужно реагировать, если файла нет...
        'RULE' => '',
        'ID' => '',
        'PATH' => '/catalog/page.php', // а здесь какой скрипт запускать
        'SORT' => 100,
      ),
    Ответ написан
    1 комментарий
  • Установка онлайн чата на cms 1c-Bitrix?

    1 Если нет денег и нужен самый дешевый вариант - тогда купить готовый модуль.
    2 Если все таки не все так плохо и немного деньжат есть - поставить задачу прагеру. Оно не так уж сложно.
    3 Если денег дуром - можно выбрать какой-нибудь варик из бесплатных, потратить неделю-две на адаптацию, а потому перейти к варианту 1 или 2 на выбор.
    Ответ написан
    Комментировать
  • Bitrix D7 ORM: как узнать ID существующей записи?

    Да - норм.
    Но добавляю, что такое решение как предлагает eugenezadorin будет хорошим только в ситуации когда дубли очень вероятное и частое явление. В противном случае лучшим решением будет, собирать в отдельный массив в цикле имена, которые были отклонены, из-за дублирования, а потому в конце цикла добавления, если цикл имен не пуст, достать одним запросом список id соответствующий собранным в запросе именам.
    Преимущество в том, что если конфликтов не случилось, запрос не делается вообще.

    Кстати если добавление идет не в цикле, а вероятность дублей у вас больше 50% (даже возможно 40%) то лучшим решением будет сначала проверить нет ли уже записи с таким именем и только потому выполнять добавление, если ее нет.
    Ответ написан
    2 комментария
  • Создание многоуровневого ЧПУ в отдельной папке на Catalog section list и catalog section. Как?

    Вы же сами почти ответили на свой вопрос:
    Когда начинаешь разносить его по папкам в соответствующие разделы, используя модули каталога отдельно, а не комплексный компонент

    Вот и используйте комплексный компонент с настроенным SECTION_CODE_PATH.

    Если же вам религия или здравый смысл запрещают использовать комплексный компонент, то это тоже решаемо - самый простой способ это совместить list.php и detail.php в один файл и заворачивать на него ВСЕ url вида /new_page/что/то/там/еще/ , забирая в переменную только последний токен (еще в данном случае). Далее вы проверяете есть ли у вас раздел с таким кодом и если есть выводите компонент раздела, а если нет - компонент элемента с таким кодом.
    Пр это вы сталкнетесь со следующими проблемами:
    если у вас есть раздел и элемент с одинаковыми кодами, то будет показываться раздел.
    выводимые данные не будут зависеть то что/то/там и в этих токенах можно будет написать какую угодно ахинею.

    Исправить это можно помещая в переменную весь url - что/то/там/еще
    При этом в файле нужно будет его полностью разбирать, убеждаться и после нахождения сущности еще, проверять соответствует ли ей путь что/то/там. Таким образом вы реализуете практически кусок комплексного компонента в скрипте (но я считаю, что это все равно лучше, чем использовать комплексный компонент).
    Ответ написан