Задать вопрос
  • В чем отличие template_styles.css от styles.css в битриксе?

    gromdron
    @gromdron
    Работаю с Bitrix24
    template_styles.css отвечает за стили шаблона, который будет отображаться у пользователя на странице
    styles.css - стили которые будут использовать в ВИЗУАЛЬНОМ РЕДАКТОРЕ при создании/редактировании страницы.

    Например: в template_styles.css может быть определен стиль:

    div {
    	font-weight:bold;
    }


    И для всего сайта у вас весь текст в div будет жирный.
    Но в визуальном редакторе может быть прописано:

    div {
    	font-weight: normal;
    }


    Таким текст на всем сайте у Вас будет жирный, а в визуальном редакторе нет. Вот и получиться, что Ваш визуальный редактор не такой уж и визуальный.
    Для того чтобы этого не произошло, дополнительно и существует этот файл :)
    Ответ написан
    Комментировать
  • Как создать агента в своём модуле?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А в чем собственно вопрос? Делайте как по документации

    1) При установки модуля добавляем агент:
    \CAgent::AddAgent( "\\Your\\Module\\SuperClass::superAgent();", "your.module", "N", 10 * 24 * 3600, "", "Y");

    где
    "\\Your\\Module\\SuperClass::superAgent();" - код php который должен выполняться (точка с запятой в конце строго!!!)
    "your.module" - название вашего модуля
    "N" - периодичность
    10 * 24 * 3600 = периодичность запуска
    '' - первая дата проверки (оставлять пустой)
    "Y" - активность агента

    2) При удалении - очищаем агенты
    \CAgent::RemoveModuleAgents("your.module");
    3) Если файлы располагаются по канонам d7 ( /your.module/lib/superclass.php ), то ничего больше делать не нужно, если старый - то нужно прописать в include.php автолоадер для вашего класса с агентом
    Ответ написан
    2 комментария
  • На что намекает галочка возле корневой папки проекта в PhpStorm

    DWSVad
    @DWSVad Автор вопроса
    Вообщем долго шарил по статьям посвященным phpStorm, в итоге нашел ответ в статье azverin: Продуктивное использование PHPStorm. Спасибо тебе, azverin за нее.

    Как оказалось это закладка, которую я случайно поставил на корневую папку.
    А ставить ее можно на любое место в проекте и части кода файла, с помощью F11.
    И так же легко просмотреть список закладок комбинацией Shift+F11.
    (Приведенные сочетания клавиш — дефолтные)
    Ответ написан
    1 комментарий
  • Как вывести шаблон одного компонента внутри другого и избежать проблем с кэшированием?

    @anton99zel Куратор тега 1С-Битрикс
    29а класс средней школы №7
    Ответ написан
    Комментировать
  • Bitrix ORM: Как получить элементы с нулевым CNT?

    @Snatch87
    Битриксоид по принуждению
    Если я все правильно понял, то Вам нужно немного дорабоать один из рантаймов
    Приведу пример из своего кода, попробуйте адаптировать под свой:
    ->registerRuntimeField('PRICE', [
                    'data_type' => \Bitrix\Catalog\PriceTable::class,
                    'reference' => [
                        '=this.ID' => 'ref.PRODUCT_ID',
                        '=ref.CATALOG_GROUP_ID' => new \Bitrix\Main\DB\SqlExpression('?', 1)
                    ]
                ])
    Ответ написан
    Комментировать
  • Как актуализировать элементы инфоблока (REST)?

    0 А чо не md5?
    1 Как-то странно - вы проверяете контрольную сумму и обновляете элемент если она совпадает? А зачем? Если у вас контролька от данных и они не изменились - зачем обновлять? Пропустите этот элемент.
    2 Зачем вообще сначала сверять контрольные суммы? Какой в этом смысл если у большинства он будет разный?
    3 Вы понимаете что ваш алгоритм (если вы его правильно описали - я код не смотрел) будет обновлять элементы которы не нуждаются в обновлении (с совпадающем хэшем) и будет создавать дубли объектов, если их надо обновить, так как вы добавляете элементы с отличными хэшами в массив ADD?

    Как делал бы я - получил объекты.
    Собрал их внешние id и извлек из базы справочник по этим id по полю XML_ID, такой где XML_ID => TMP_ID.
    Далее переберал бы входные объекты, вычисляя для них хэш и если объект с XML_ID == id есть в справочнике, то сверял бы хэш. Если он совпадает - пропускаем объект. Если нет - добавляем его в uppdate. Если объекта нет в справочнике - добавляем его в add.
    Ответ написан
    4 комментария
  • Bitrix ORM: Как реализовать импорт в инфоблок нескольких тысяч элементов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Но ведь почему-то разработчики Битрикса решили от него отказаться?


    Они не "решили отказаться", они его архитектурно еще не сделали. Элементы инфоблоков это не только запись в таблице это еще и свойства, которые могут хранится в двух вариантах, так что это вовсе не так просто.

    Выходит нужно использовать старый CIBlockElement::Add() без вариантов?

    Если хотите атомарно и без нарушений логики - да.
    По факту, если у вас простая запись, т.е. без свойств, то можно подглядеть что он делает и выполнить по аналогии. Будет в целом почти равнозначно для импорта.

    Есть какой-то аналог Batch Processing от Doctrine?

    Аналогов нет, но и операция не такая уж частая. Есть потребность в таких объемах - обычно либо это сторонние каталоги (цены, наличие, свойства и т.п.) и тут без CIblockElement::add не обойтись, либо своя таблица (а там уже что хочешь, хоть sql)
    Ответ написан
    4 комментария
  • Bitrix ORM: Как использовать JOIN, чтобы сократить количество запросов?

    @Snatch87
    Битриксоид по принуждению
    В runtime Вы можете передать сколько угодно объектов references.
    Приведу не большой пример, только я использую не гет листы, объект Query:
    $query  = \Entities\Marketing\PostingTmpTable::query()
                 ->registerRuntimeField('CONTACT', [
                     'data_type' => '\Bitrix\Sender\ContactTable',
                     'reference' => [
                         '=this.CONTACT_ID' => 'ref.ID',
                     ],
    //                 'join_type' => 'right'
                 ])
                 ->registerRuntimeField('PROPERTY', [
                    'data_type' => $hlBlockEntity,
                    'reference' => [
                        '=this.CONTACT.CODE' => 'ref.UF_EMAIL'
                    ],
    //                 'join_type' => 'right'
                ])
            ;
    Ответ написан
    4 комментария
  • Как сократить количество запросов для получения свойства "Справочник"?

    Если прям тупо в лоб:
    $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 комментарий
  • Как сократить количество запросов для получения свойства "Справочник"?

    @Snatch87
    Битриксоид по принуждению
    Для начала Вам нужно собрать массив всех xml_id по которым вы будете искать

    $xmlIds = [];
    
    foreach ($arResult['ITEMS'] as $index => $arItem) {
        $xmlIds[] = $arItem['PROPERTIES']['PROP']['VALUE']];
    }

    На всякий уберем дубли:
    $xmlIds = array_unique($xmlIds);

    Найти найти все записи из HL по с UF_XML_ID
    if(!empty($xmlIds)){
    	$resultArray = \Bitrix\Highloadblock\HighloadBlockTable::compileEntity('Entity')->getDataClass()::getList([
            'select' => ['UF_NAME'],
            'filter' => ['@UF_XML_ID' => $xmlIds],
        ]);
        
    	while ($rowArray = $resultObj->fetch()) {
    	    $arRef[$resultArray['UF_XML_ID']] = $resultArray['UF_NAME'];
    	}	
    }
    Ответ написан
    Комментировать
  • Bitrix D7 ORM: как узнать ID существующей записи?

    @eugenezadorin
    Адекватно, если это единичная операция добавления - например если это отправка формы.

    Производительность может упасть, если такое добавление происходит в цикле, и дубликатов имени будет много. В этом случае возможно лучше будет заранее сформировать справочник существующих книг "имя - id", и по нему сверяться перед добавлением.
    Ответ написан
    2 комментария
  • Bitrix D7 ORM: как узнать ID существующей записи?

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

    Кстати если добавление идет не в цикле, а вероятность дублей у вас больше 50% (даже возможно 40%) то лучшим решением будет сначала проверить нет ли уже записи с таким именем и только потому выполнять добавление, если ее нет.
    Ответ написан
    2 комментария
  • Как создать сущность D7?

    winer
    @winer
    занимаюсь разработкой сайтов на 1c-bitrix
    Сущность D7 это обычный класс. Для того чтобы все работало надо этот класс подключить.
    Если класс вне модуля то через autoload или обычным include (или require).

    У вас же судя по всему модуль. Для того чтобы все работало, надо чтобы модуль имел как минимум обязательные файлы и был установлен через меню системы. Именно установлен, а не просто скопирован в папку modules.

    Далее класс который описывает вашу таблицу в БД, нужно разместить в папке lib модуля. Название файла должно быть в нижнем регистре и не должно содержать слова Table.
    Например для класса BooksTable, имя файла должно быть books.php
    Ответ написан
  • Какая разница между ORM-сущностью и Highload?

    sabramovskikh
    @sabramovskikh
    Хайлоад это просто интерфейс для создания таблиц через админку.
    ОРМ это утилита для работы с бд. Его можно с любой таблицей в бд использовать.
    Класс для работы с хайлодами наследуется от ОРМ.
    Ответ написан
    3 комментария
  • Как получить status: error (bitrix ajax d7)?

    winer
    @winer
    занимаюсь разработкой сайтов на 1c-bitrix
    public function sendMessageAction(): string
    {
        $i = 0;
    
        if ($i === 0) {
            throw new Exception('Ошибка');
        }
        
    }
    Ответ написан
    4 комментария
  • Как интегрировать Doctrine 2 в 1С-Битрикс?

    serginhold
    @serginhold
    Ничего хорошего у тебя не получится.
    Но если очень хочется, то пишешь вот такой класс https://github.com/doctrine/dbal/blob/2.7/lib/Doct...
    разница будет в том, что ты должен туда подсунуть уже имеющийся коннект к \mysqli, вместо создания нового.
    Сам готовый коннект берешь из bitrix Connection::getResource().
    Далее смотришь доку и инициализируешь доктрину со своим драйвером.
    Нужно это для того, чтобы не висело два подключения к бд.
    Но если тебе пофигу, можешь просто создать второе подключение, и тогда вообще "красота" будет
    Ответ написан
    Комментировать
  • Как скрестить bitrix с symfony 2?

    @PaulJE
    Смотря что подразумевается по скрещиваением. Symfony весьма гибкий продукт, и есть возможность вытягивать из него отдельные компоненты для внедрения в свое приложение. Но я как понимаю вам нужно решение для администрирования сущностей, аля CRUD для всего и вся? На базе Symfony можно использовать автогенерирование моделей по схеме из БД и прикрутить какой нибудь SonataAdminBundle
    Ответ написан
    1 комментарий
  • Регулярные выражения: как добавить пробел между словами в строке?

    glaphire
    @glaphire Куратор тега PHP
    PHP developer
    preg_split надо заюзать для разбивки по заглавным буквам, дальше mb_strtolower и склеить строку заново
    /(?=[А-Я])/u
    https://www.phpliveregex.com/p/th0
    Ответ написан
    Комментировать
  • Bitrix urlrewrite.php: как подключить папку?

    udjin123
    @udjin123
    PHP, Golang, React
    Urlrewrite.php перенаправляет запросы пользователя, а файлы .section.php и *.menu.php инклюдятся в php, прямого обращения к ним нет, соответственно и перенаправлять не чего.

    Если вы хотите чтобы файлы из папки folder_en были доступны в folder_ru, сделайте символическую ссылку на них в папке folder_ru. Практически все хостинги позволяют проделать эту операцию, а уж про сервер и говорить не чего.
    Команда "ln -s [файл_источник] [файл_ссылки]"
    Ответ написан
    3 комментария
  • Можно ли использовать только PK в таблице?

    @dimuska139
    Backend developer
    1. А почему user_profile и answer нельзя объединить в одну общую таблицу с опциональным значением в поле user_id (некоторые другие поля тоже можно сделать опциональными)? Зачем ответы делить на 2 таблицы? Аналогично и с answer_options и user_profile_options
    2. В любой таблице БД всегда должен присутствовать первичный ключ. Я про таблицы answer_options и user_profile_options - им нужно поле id (первичный ключ). Даже если по смыслу таблицы он не нужен особо, насколько я знаю, СУБД его использует для построения плана запроса.
    Ответ написан
    6 комментариев