Местоположение
Россия, Владимирская обл., Владимир

Наибольший вклад в теги

Все теги (6)

Лучшие ответы пользователя

Все ответы (20)
  • Как сделать запрет закрытия задачи, если есть подзадачи в Битрикс24?

    @Kontrael
    Этот пример вам не подойдет. В нем иллюстрируется добавление пункта меню в сделки.
    Файл init.php создается вручную в папке `/local/php_interface/`. Но прежде чем делать это, почитайте про него в курсе
    Бездумное использование этого файла может приводить к падению сайта в любом месте.
    Но в вашем случае, можно обойтись без него.
    В вашем случае алгоритм действий такой:
    1. Почитать про события.
    2. Вам нужны события задач
    Пример подключения обработчика события(это не готовый пример для вас, его нужно изменить под себя):
    \Bitrix\Main\EventManager::getInstance()->RegisterEventHandler(
        'tasks',
        'OnBeforeTaskUpdate',
        $this->MODULE_ID,
        '\MyCompany\Handlers\CTask',
        'OnBeforeTaskUpdate',
        "1"
    );

    Подробнее про 'RegisterEventHandler' тут
    Этот код можно выполнить в консоли, в админке. Но имейте ввиду, что удалять его нужно тоже выполнением кода или вручную в БД.
    3. В этом обработчике вам нужно определять, является ли задача родительской. Если да, то запрашивать ее дочерние задачи и смотреть, если ли среди них открытые. Если да, то отменять событие закрытия задачи.
    Список задач можно получить так
    Ответ написан
    Комментировать
  • В битриксе вместо 404 отдаёт код 200 и не переходит на страницу 404, в чём дело?

    @Kontrael
    1. Проверьте .htaccess в корне. Должна присутствовать строка ErrorDocument 404 /404.php
    2. Перейдите напрямую на файл с 404 //site.ru/404.php Если страница, не белая, значит проблема в логике "какую страницу показывать", если белая, то в самой странице. Возможно, где-то забыли убрать die(); при отладке

    Если после открытия содержимого страницы, все еще будет 200 статус, надо добавить вот это в начало 404.php
    <?php
    include_once($_SERVER['DOCUMENT_ROOT'].'/bitrix/modules/main/include/urlrewrite.php');
    CHTTP::SetStatus("404 Not Found");
    @define("ERROR_404","Y");
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    use Bitrix\Main\Localization\Loc;
    $APPLICATION->SetTitle("Страница не найдена");
    Ответ написан
    Комментировать
  • Как задать правило для данной функции?

    @Kontrael
    У вас не верный подход в принципе. Вы смешиваете логику и представление, но это отдельная тема.

    Вот это:
    if ( '' === $product->get_price() || 0 == $product->get_price() )

    Вообще можно заменить на
    if (!$product->get_price())

    И тогда необходимость в функции
    product_price_free_zero_empty
    отпадает.
    В коде, который собирает html страницы пишете что-то вроде:
    if (!$product->get_price()){
        echo '<span class="woocommerce-Price-amount amount">By request</span>';
    }

    А под тегами, где нужна кнопка:
    if (!$product->get_price()){
        echo '<input type="button" value="Кнопка" /> ';
    }
    Ответ написан
    3 комментария
  • Как профилировать php на 1с-Битрикс через XHProf?

    @Kontrael
    Профилировщик это уже скальпель, для поиска конкретного проблемного куска кода, натравливать его на весь хит - решение сомнительное, которое выльется в проблемы с которыми вы столкнулись.
    Локализуйте проблему и собирайте данные профилировщиком уже внутри компонента. Но по опыту, это действительно нужно процентах в 10 случаев.
    Начните со встроенного отладчика.
    5ec67305b1f79562550586.png
    Посмотрите число запросов с кешем и без, время выполнения. Там же увидите, какие компоненты много себе позволяют, и там уже, при необходимости, запускайте профилировщик. Хотя скорее всего, вы увидите проблему до его запуска.
    Ответ написан
    Комментировать