Примеры небольших, но часто крайне полезных php сниппетов для Битрикса.


Категории: PHP, Bitrix CMS
Пометки: SEO, метатеги, раздел, название раздела, категория, meta,сео, картина раздела категории, фото, все товары. полезное битрикс

Иногда может потребоваться принудительно обновление данных в фасетном индексе Битрикса, делается это просто:

 
    \Bitrix\Iblock\PropertyIndex\Manager::updateElementIndex(IBLOCK_ID, $id);


Категории: Bitrix CMS

Это позволить удобно расположить свой обработчик, например, в файл local/modules/myTools/lib/EventHandlers/Bitrix/Iblock/OnBeforeIBlockElementUpdate.php

 
<?php
namespace myTools\EventHandlers\Bitrix\IBlock;

use myTools\Tools\Events\BaseEvent;

class OnBeforeIBlockElementUpdate extends BaseEvent
{
    /**
     * @eventSort 100
     */
    public static function myEventHandler(&$arFields)
    {
        //код первого обработчика
        if($arFields["IBLOCK_ID"]==1 && is_Array($arFields["PROPERTY_VALUES"])){
            \myTools\Catalog::ChangeSection1C($arFields, 1, 60, 5);
        }
        ...
    }

    /**
     * @eventSort 200
     */
    static function ChangeAddPicName(&$arFields)
    {
        $arFields = \myTools\Catalog::ChangeAddPicName($arFields);
        ...
    }

    static function osAddIdToQueue(&$arFields){

        $sLog = date("Y-m-d H:i:s") . PHP_EOL;
        $sLog .= 'IBLOCK_ID:' . $arFields["IBLOCK_ID"] . PHP_EOL;
        $sLog .= 'PRODUCT_ID:' . $arFields["ID"] . PHP_EOL;
        file_put_contents($_SERVER['DOCUMENT_ROOT']."/local/log/so_OnBeforeIBlockElementUpdate.txt", $sLog, FILE_APPEND);

        if($arFields["IBLOCK_ID"]==1){
            //$e = new \myTools\Opensearch\QueueIndex();
            //$e->addIds([$arFields["ID"]]);
            $result = \myTools\Opensearch\QueueTable::add(['IBID'=>1, 'PRODUCT_ID'=>$arFields["ID"]]);
        } elseif($arFields["IBLOCK_ID"]==178){
            //$e = new \myTools\Opensearch\QueueIndex();
            //$e->addIds([$arFields["ID"]]);
            $result = \myTools\Opensearch\QueueTable::add(['IBID'=>178, 'PRODUCT_ID'=>$arFields["ID"]]);
        }
    }
}


Категории: PHP, Bitrix CMS

Способ работает, только если есть доступ к файловой системе.


Категории: Bitrix CMS

Допустим, что у нас есть раздел Сервис (IBLOCK_ID = 50) и у него несколько подразделов. Один из них, например, акции (SECTION_ID = 44).

Компонент bitrix:news.list не принимает параметр SECTION_ID. Но есть способ решить эту проблему.


Категории: Bitrix CMS

В какой-то "прекрасный" момент начали поступать жалобы, что письма с сайта не всем приходят. При более детальном рассмотрении, оказалось, что не приходят только на ящики @gmail.com.

В логах по ним было сообщение: Messages missing a valid messageId header are not 550 5.7.1 accepted., оказалось, что с сайта уходят письма без заголовка Message-ID.


Пометки: Для Обычного пхп и для биторкса Messages missing a valid messageId header are not 550 5.7.1 accepted.

Появилась задача сделать копию сайта без персональных данных клиентов, для передачи ее третьим лицам.


Категории: Bitrix CMS
Пометки:

При обновлении Битрикса получил ошибку:

MySQL Query Error: CREATE TABLE b_sale_cashbox_check_correction( ID int(11) unsigned not null auto_increment, CHECK_ID int(11) not null, CORRECTION_TYPE varchar(50) not null, DOCUMENT_NUMBER varchar(35) not null, DOCUMENT_DATE date not null, DESCRIPTION varchar(255) default '', CORRECTION_PAYMENT text default '', CORRECTION_VAT text default '', PRIMARY KEY (ID) ) [[1101] BLOB, TEXT, GEOMETRY or JSON column 'CORRECTION_PAYMENT' can't have a default value]

Решение - нужно создать эту таблицу "руками":

 
CREATE TABLE b_sale_cashbox_check_correction( ID int(11) unsigned not null auto_increment, 
CHECK_ID int(11) not null, CORRECTION_TYPE varchar(50) not null, 
DOCUMENT_NUMBER varchar(35) not null, DOCUMENT_DATE date not null, 
DESCRIPTION varchar(255) default '', CORRECTION_PAYMENT text, 
CORRECTION_VAT text, PRIMARY KEY (ID) ) 


Категории: Bitrix CMS

Частая проблема письма с сайта не доходят и не всегда понятно, проблема в сайте, хостинге, промежуточных сервисах или даже конечном ящике получателя. В данной заметке расскажу как можно проверить, что письма ушли из Битрикса.

Отправка писем, попадет в журнал событий Битрикса. Хранятся все события в таблице b_event, посмотреть значения можно через Настройки - Производительность - Таблицы (/bitrix/admin/perfmon_table.php?lang=ru&table_name=b_event)

pic1

Для событий отправки писем нужно смотреть на поле SUCCESS_EXEC Возможные статусы:

SUCCESS_EXEC = Y — сообщение отправлено.
SUCCESS_EXEC = N — не обработано событие (а значит не отправлено)
SUCCESS_EXEC = 0 — не найден шаблон (указан не верный шаблон)
SUCCESS_EXEC = F — надо смотреть логи отправки сервера или хостинга.

Основное на что стоит обратить внимание, что SUCCESS_EXEC = N не значит, что письмо вообще не оправлено, это текущий статус, и если отправка настроена на cron (по расписанию) или на хиты, то нужно подождать перед тем, как проверять статус!


Категории: Bitrix CMS
Пометки: Как посмотреть статус события Битрикс

Часто бывает нужно вывести в определенном месте содержимое какого-либо файла, require в случаи Битрикса это плохая идея, т.к. такие области нельзя будет редактировать через WYSIWYG-редактор.

Поэтому стоит использовать:

 
<?$APPLICATION->IncludeFile(SITE_DIR . "include/contacts.php", Array(), Array("MODE"=>"html"));?>


Категории: Bitrix CMS
Пометки: Битрикс includearea
Яндекс.Метрика