Требуется разработчик! Поддержка серверов

Сообщения

Bxapi

Тема: Увлечения
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
11.03.2016 14:47
CIBlockElement::GetList
Два простых правила оптимизации самого популярного запроса:
  1. Не используется getNext без надобности. Если нет вывода в публичную часть, лучше fetch. А еще лучше - самим применить htmlspecialcharsbx к нужным ключам.

  2. Указывайте явно в выборке нужные поля. Работаете только с ID - его и пропишите. По умолчанию тянутся все поля таблицы.
Теги:
drIceman
Антон Долганин ( ' " <u>test</u> " ') написал:
Это в доке написано или курсе? А что там в контексте? Просто скорее всего рекомендовали по причине того, чтобы новички не выводили небезопасные переменные. Но getNext(false, false) лучше, соглашусь.
Это в контексте CIBlockResult, там Fetch отсутствует и наследуется от CDBResult. Другими словами Fetch под инфоблоки не заточен.
1 Ещё
Kirill
Правда ли что fetch работает быстрее getNext? Еще столкнулся с проблемой получения DETAIL_TEXT и DETAIL_PAGE_URL у fetch.  
0 Ещё
Антон Долганин ( ' " <u>test2</u> " ')
Kirill, конено, быстрее. В частности как раз потому, что не получает полные ссылки и форматированный подробный текст. Для этих целей и нужен getNext
0 Ещё
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
30.03.2016 06:18
LocalRedirect
У LocalRedirect есть одна особенность. К примеру, вы разместили эту конструкцию на промежуточной странице (редиректнуть дальше пользователя при определенном условие, или всегда). Так вот, если потом на сайте включат защиту редиректов, то пользователь столкнется с формой "вы хотите перейти на другую страницу, подтвердите").

Чтобы таких нюансов избегать, используйте второй параметр true. Естественно, если вы уверенны в этом редиректе как разработчик:
LocalRedirect('/people/user/1/', true);
Никита Ермиличев
стоит отметить, что при использовании LocalRedirect обязательно нужно обрубать скрипт (die, return)
0 Ещё
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
10.08.2016 11:20
Дни рождения в +/- 3 дня на D7
use \Bitrix\Main;

Main\UserTable::getList(array(
   'filter' => array(
      'BIRTHDAY_MONTH' => date('m'),
      '>BIRTHDAY_DAY' => date('d')-3,
      '<BIRTHDAY_DAY' => date('d')+3,
   ),
   'runtime' => array(
               new Main\Entity\ExpressionField('BIRTHDAY_YEAR', 'YEAR(PERSONAL_BIRTHDAY)'),
               new Main\Entity\ExpressionField('BIRTHDAY_MONTH', 'MONTH(PERSONAL_BIRTHDAY)'),
               new Main\Entity\ExpressionField('BIRTHDAY_DAY', 'DAY(PERSONAL_BIRTHDAY)'),
               ),
))->fetchAll();
Никита Ермиличев
А если 29/30/31/1/2 число?
0 Ещё
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
16.09.2016 12:20
Получить телефоны, мейлы, сайты, мессенджеры контакта/компании/... CRM
Получить сабж можно через метод CCrmFieldMulti.
Вторым параметром передается фильтр:
ENTITY_ID - тип сущности (CONTACT, COMPANY)
ELEMENT_ID - id сущности
можно еще TYPE_ID - PHONE, EMAIL, и так далее
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
05.09.2016 11:15
Форматирование цены в CRM
В CRM есть замечательный метод форматирования денег:
echo CCrmCurrency::MoneyToString(123500, 'RUB');
123 500.00 руб.
Максим Богомолов -> Bxapi
22.08.2016 12:31
Получение множественных сущностей CRM
Получаем все контакты для сделки:
$contactsIDs = \Bitrix\Crm\Binding\DealContactTable::getDealContactIDs($dealID);

Получаем все компании для контакта:
$companiesIDs = \Bitrix\Crm\Binding\ContactCompanyTable::getContactCompanyIDs($contactID);
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
18.08.2016 11:38
Добавление адреса подписки в новом модуле sender
if (\Bitrix\Main\Loader::includeModule('sender')) {
   $list = array();
   foreach (\Bitrix\Sender\Subscription::getMailingList(array('IS_PUBLIC' => 'Y')) as $l) {
      $list[] = $l['ID'];
   }
   \Bitrix\Sender\Subscription::add('test@mail.ru', $list, SITE_ID);
}

Сначала получаем списки, потом подписываем адрес. Если массив списков пустой (первую часть кода убрать), то пользователь добавляется без списков подписки.  
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
23.07.2016 07:36
Повторно запустить мастер установки решения (сайта)
Например, при добавлении второго сайта есть возможно указать опционально - "Запустить мастер выбора решения", и после добавления сайта вы перейдете к установке сразу. Но что делать, если мастер надо запустить повторно, без создания сайта? Достаточно в индексной странице сайта /index.php поместить такой код (заменить им текущий). Комментариями помечены места, которые вам возможно надо поменять (site id точно).
<?php
define('B_PROLOG_INCLUDED', true);
define('WIZARD_DEFAULT_SITE_ID', 's2');//site id
define('WIZARD_DEFAULT_TONLY', true);
define('PRE_LANGUAGE_ID', 'ru');//язык
define('PRE_INSTALL_CHARSET', 'utf-8');//кодировка
include_once($_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/install/wizard/wizard.php');
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
20.07.2016 08:25
Переопределить тип почтового события в случае условий
Бывает, что от тех или иных условий надо изменить тип почтового события. К примеру, при отмене заказа в случае оплаты наличными, надо отправить совершенно иной шаблон письма. Сделать это можно через событие OnBeforeEventAdd
public static function OnBeforeEventAdd(&$event, &$lid, &$fields, $messageId)
{
   if ($event == 'SALE_ORDER_CANCEL') {
      /*
       * Тут ваши условия по определению, что оплата заказа стояла наличными.
       */
      $event = 'SALE_ORDER_CANCEL_CASH';
   }
}
Антон Долганин ( ' " <u>test2</u> " ') -> Bxapi
18.05.2016 15:57
Сброс навчайна
Чтобы сбросить навигационную цепочку и начать строить ее сначала. Достаточно выполнить код (первая строчка):
$APPLICATION->arAdditionalChain = array();
$APPLICATION->addChainItem('Подарки к праздникам', '/gifts/');
Обратите внимание, это обращение к массиву класса, недокументированное. Нет гарантий, что поддержка такого хака не прекратится.
Антон Долганин ( ' " <u>test2</u> " ')
Антон Долганин ( ' " <u>test</u> " ') написал:
Обратите внимание, это обращение к массиву класса, недокументированное. Нет гарантий, что поддержка такого хака не прекратится.
Чтобы себя подстраховать, можно оборачивать в блок
if property_exists($APPLICATION, 'arAdditionalChain')  
0 Ещё
Написать сообщение …Загрузить файлы?