Ответы пользователя по тегу 1С-Битрикс
  • Крашится база (Mysql, Bitrix CMS)?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Просто совет: если не пользуетесь - выключите модуль веб-аналитики.
    Ответ написан
    Комментировать
  • Как работает CPHPCache?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Шаг 1: dev.1c-bitrix.ru/api_help/main/reference/cphpcache...
    Шаг 2: dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LES...

    Код ниже:
    use \Bitrix\Main\Loader;
    
    // Это нужно где-нибудь складировать в init.php/других файлах, т.к. много где может понадобится
    define('TARGET_IBLOCK_ID',1);
    
    // Это то, что вернет скрипт
    $arReturn = [
        'result' => 'error',
        'data'   => 'Неправильный запрос',
    ];
    
    $sCode = $_POST["code"];
    
    if ( !empty($sCode) )
    {
        // Инициализируем php-кеширование (в хранилище кеша будет помещен json объект)
        $cache = new CPHPCache();
    
        // Устанавливаем время, на которое нужно кешировать
        $cache_time = 86400*7;
    
        // Уникальный ID
        $cache_id = 'sectCache'.$code;
    
        // Папка для хранения кеша
        $cache_path = '/sectCache/'.$code;
    
        // Проверяем существование кеша
        if ( $cache->InitCache($cache_time, $cache_id, $cache_path) )
        {
            // Кеш есть, достаем данные
            $arCacheData = $cache->GetVars();
    
            // Достаем по ключу, с которым положили
            $arReturn['data'] = $arCacheData['sectCache'.$sCode];
        } 
        else 
        {
            // Кеша нет, нужно получить данные
    
            // Хороший тон - проверить, подключен ли модуль
            if ( Loader::IncludeModule('iblock') )
            {
                $arSelect = [
                    "ID",
                    "NAME",
                    "PROPERTY_YEAR",
                    "PREVIEW_PICTURE",
                    "PROPERTY_MODEL",
                    "PROPERTY_WORKS",
                    "PROPERTY_COST_WORK",
                    "PROPERTY_COST_DETAILS",
                    "PROPERTY_DISCOUNT_WORK",
                    "PROPERTY_DISCOUNT_DETAILS"
                ];
    
                /**
                 * Фильтр лучше использовать всегда, иначе 
                 * при ошибке будет выбор всех элементов 
                 */
                $arFilter = [
                    'IBLOCK_ID' => TARGET_IBLOCK_ID,
                    "ACTIVE"    => "Y",
                ];
    
                if ( $sCode == "all-brands" )
                {
                    $arFilter['INCLUDE_SUBSECTIONS'] = 'Y';
                }
                else
                {
                    $arFilter['SECTION_CODE'] = $sCode;
                }
    
                // Массив элементов
                $arItems = [];
    
                // Получаем данные
                $res = \CIBlockElement::GetList(["ID"=>"DESC"], $arFilter, false, false, $arSelect);
                while( $arElement = $res->Fetch() )
                {
                    $arElement["PREVIEW_PICTURE"] = CFile::GetPath($arElement["PREVIEW_PICTURE"]);
    
                    $arItems[ $arElement['ID'] ] = $arElement;
                }
    
                // Сохраняем данные в кеше
                $cache->StartDataCache($cache_time, $cache_id, $cache_path);
                $cache->EndDataCache(['sectCache'.$sCode => $arItems]);
    
                $arReturn['data'] = $arItems;
            }
            else
            {
                $arReturn['data'] = "Модуль инфоблоков не подключен";
            }
        }
    
    }
    
    echo json_encode($arReturn);
    die();
    Ответ написан
    Комментировать
  • Как запретить загрузку файлов с расширением .php в битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Есть еще настройки поля типа "Файл", в инфоблоках - там тоже можно задать список расширений
    Ответ написан
    Комментировать
  • Bitrix: как правильно сменить адреса с ID на текстовые ЧПУ для хорошо проиндексированного сайта?

    gromdron
    @gromdron
    Работаю с Bitrix24
    1) Пропишите правила в urlrewrite для обоих вариантов работ.
    Т.е. чтобы И по section.php?SECTION_ID=TEST И по /TEST/ открывалась одна и та же страница,
    чтобы И по detail.php?ELEMENT_ID=1234 И по /product/1234/ открывалась одна и та же страница.

    2) Поставьте на сайт канонические ссылки, чтобы на странице section.php?SECTION_ID=TEST каноническая ссылка указывала на /TEST/, а на detail.php?ELEMENT_ID=1234 на /product/1234/

    3) Через пару недель, начните толерантные переадресовки - сначала отдельные разделы (т.е. чтобы section.php?SECTION_ID=TEST переадресовал 301 редиректом на /TEST/, а section.php?SECTION_ID=TEST1 работал как и раньше)

    4) Еще через пару недель сделайте полную 301 переадресацию
    Ответ написан
    Комментировать
  • Выборка товаров по свойству битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А у Вас NEWPRODUCT свойство какой тип имеет ?
    Ответ написан
  • Почему не создает и не возвращает ошибку при создании свойства в Битрикс?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Если он вернул false, ошибку вы можете получить функцией:
    $error = $APPLICATION->GetException();
    Ответ написан
    Комментировать
  • Как добавить скрытое поле в форму 1C Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Все зависит от того как это реализовано.
    Может быть это обычная веб-форма, с дефолтным шаблоном (что можно из админки поправить) или веб-форма с темплейтом на html.
    Быть может это кастомная форма и запись в инфоблок.

    Сначала определитесь с какой формой Вам предстоит иметь дело.
    Ответ написан
  • Пишет 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

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

    gromdron
    @gromdron
    Работаю с Bitrix24
    Жаль что с опозданием, но может другим поможет:

    При экспорте инфоблоков вы должны указать xml-файл экспорта (или csv). Например экспортировать инфоблок "Новости" из типа инфоблока "Новости" в файл news.xml, в таком случае будет создан/изменен существующий файл news.xml и будет создана папка news_export содержащая изображения из инфоблока (собственно их пути и будут прописаны в xml или csv)
    Ответ написан
    Комментировать
  • Максимальный индекс производительности Битрикс 1С?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Самый большой индекс что я видел это 75 попугаев, на собственном сервере

    А вообще индекс производительности это обратная от среднего времени отклика. Например, при среднем времени отклика 0.0216 секунд индекс производительности будет показывать где-то около 46.3.
    Ответ написан
    Комментировать
  • Как сделать в форме отправку прикрепленного файла в (bitrix)?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если не хотите писать рутинные вещи, то для таких вещей в 1С-Битрикс есть Веб-формы. Один раз делаете "натяжку" дизайна на форму, а потом плодите сколько-хотите вопросов.

    А вообще у сервиса веб-форм есть свои плюсы и минусы:
    + Один раз настраивайте форму и "масштабируйте" (увеличивайте число полей) просто
    + Для форм есть своя логика и о валидации не надо думать, большая часть работы сделана за вас
    + В них заложена логика обмена с crm и права доступа
    - Работа модуля не совсем проста, придется покопать документацию
    - О валидации все-таки нужно думать, так как шаг влево и проще будет написать на голом php
    Ответ написан
    Комментировать
  • Как настроить обработку адресов в Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А с чем связан такой необычный кейс ? Может быть цель, которую вы преследуете, решается другими способами ?
    Ответ написан
    Комментировать
  • Избранные товары в Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Давно не работал с интернет-магазинами на битриксе, но я предположу что вариантов 3:

    1) Он же наиболее правильный - прописать таблицу/инфоблок для таких товаров и разработать для них вьюху.
    2) Нещадный вариант - приспособить под это дело "отложенные товары". Механика вроде как одинаковая но вдобавок пару плюшек с уведомлениями
    3) Невероятный - в последних битриксах эта функциональность есть в коробке.
    Ответ написан
    Комментировать