Продолжаем тему компонент 2.0. На сей раз опишу потенциальную проблему, с которой можно столкнуться при написании своих компонент. В качестве примера берем типовой bitrix:news.list. [spoiler] Создаем инфоблок с несколькими свойствами, у которых не указываем символьный код (не обязаны):
Кидаем на страницу компонент bitrix:news.list и начинаем настраивать. Выбираем инфоблок, переходим к выбору свойств, которые надо показывать. Упс:
Для выбора доступно только последнее Лезем в настройки инфоблока, прописываем символьные коды для пары свойств, одно оставляем пустым (бедна фантазия на символьные коды под вечер ):
Смотрим настройки компонента - отлично, все свойства есть:
Все окей, настроили компонент, смотрим публичку (пардон, набивать элементы было лень, придется поверить ). Все выводится, вот только свойство с пустым символьным кодом не показывается, хоть ты тресни. Вместо того, чтобы истерить на форуме и мотать нервы саппорту, лезем в код и начинаем разбираться.
Как получается перечень значений для параметра "Свойства" (PROPERTY_CODE) (.parameters.php компонента):
Нас интересует массив $arProperty_LNS. Ключами массива как раз и являются символьные коды свойств инфоблока. Натурально, если у нескольких свойств код пустой, остаться должен только один - последний Это ответ на первую пару скриншотов. Вторая пара скринов требует залезть уже в component.php:
if(!is_array($arParams["PROPERTY_CODE"]))
$arParams["PROPERTY_CODE"] = array();
foreach($arParams["PROPERTY_CODE"] as $key=>$val)
if($val==="")
unset($arParams["PROPERTY_CODE"][$key]);
В переводе на русский - пустые ключи выбрасываются. Причем самое грустное то, что в методе _CIBElement::GetProperties() проблема пустых символьных кодов решена - если их нет, ставятся ID свойств.
Вывод - в своих компонентах в качестве ключей лучше использовать ID свойств:
if (false == is_array($arParams['PROPERTY_CODE']))
$arParams['PROPERTY_CODE'] = array($arParams['PROPERTY_CODE']);
foreach ($arParams['PROPERTY_CODE'] as $key => $value)
{
if (0 >= intval($value))
unset($arParams['PROPERTY_CODE'][$key]);
}
Преимущества - избавлены от проблем, описанных выше, легкость валидации в component.php Недостатки - неудобно переносить страницы с тестовой машины на боевую, если, к примеру, не совпадают ID инфоблоков.
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».