Поддержка серверов

is_set: метод Битрикс

Постоянная ссылка: http://bxapi.ru/src/?id=162552

<?php 
//    /bitrix/modules/main/tools.phpis_set()
//    1690:

function is_set(&$a$k=false)
{
    if (
$k===false)
        return isset(
$a);

    if(
is_array($a))
        return 
array_key_exists($k$a);

    return 
false;
}

Блог разработчика

9 Августа 2016 ResizeImageGet и простой водяной знак налету

Сегодня поговорим о том как проще всего воткнуть водяной знак на картинки в Битрикс. Например, на все изображения каталога.

21 Июля 2016 Добавление вкладки в CRM коробки Битрикс24

В этом посте я покажу, как легко и просто добавить вкладку в сущность CRM. И не просто добавить, а вывести там свой контент.

21 Июля 2016 Как просто обращаться из коробки Битрикс24 на сайт на базе Битрикс

К примеру вам хочется внутренним скриптом дернуть с сайта-магазина информацию, которая там, в свою очередь, закрыта некоторыми правами. Например, админскими. Можно конечно мутить свой REST, или иной формат общения, но проще всего воспользоваться штатным инструментом:

0  
Василий
Никогда, слышите? Никогда (!) не используйте эту функцию :)
Имя Цитировать 0  
0  
Антон Долганин ( ' " <u>test</u> " ')
Василий, какой-то печальный опыт? :)
Имя Цитировать 0  
0  
Василий
Сразу не увидел вопрос  :)  
О да, вполне печальный  :)  

Во-первых, сразу вопрос: а зачем ее использовать? Как минимум, она повторяет нативную функцию isset, а потом джуны путают на экзамене есть ли в php is_set или нету.
Во-вторых, если ей не передать второй параметр - она сделает таки этот нативный isset.
В-третьих, IDE (тот же, любимый джунами, эклипс) автоподставляет is_set при печати &quot;is&quot; + ctrl+пробел

И что мы получаем? событие OnBeforeIBlockElementAdd. Проверка в нем типа такой
Код
is_set($array['PROPERTY_VALUES']['TEST']); 

Никто ведь документацию не читает (особенно коменты к ней) php*точка*net/manual/en/function.isset.php
Если сделать функцию, которая принимает ссылку на переменную и этой ссылке сделать isset *мегапуть* - этот путь будет создан.
Вот вам пример

Код
$array = array(
   "a" => 1,
   "b" => 2
);

is_set($array['PROPERTY_VALUES']['TEST']);   

var_dump($array); 

И что же в итоге?
Контентщик деактивирует элемент в админке из списка. По факту в массиве на апдейт только 'ACTIVE' =&gt; 'N'. После is_set там еще и массив с доп свойствами.
И битрикс после этого изменяет активность и ВСЕ доп свойства. Последние, конечно, обнуляет.

PS У меня был архиважный элемент с 40+ свойствами, код писал сеньер, к нему претензий нет  :)  Не подставляйтесь, парни  :)
Имя Цитировать 0  
0  
Василий
Событие OnBeforeIBlockElementUpdate, я имел в виду :)
Имя Цитировать 0  
0  
Guest
Сразу не увидел вопрос  :)  
О да, вполне печальный  :)  
Во-первых, сразу вопрос: а зачем ее использовать? Как минимум, она повторяет нативную функцию isset, а потом джуны путают на экзамене есть ли в php is_set или нету.
Во-вторых, если ей не передать второй параметр - она сделает таки этот нативный isset.
В-третьих, IDE (тот же, любимый джунами, эклипс) автоподставляет is_set при печати "is" + ctrl+пробел И что мы получаем? Событие OnBeforeIBlockElementUpdate.
Проверка в нем типа такой:

Код
is_set($array['PROPERTY_VALUES']['TEST']);
 
Никто ведь документацию не читает (особенно, коменты к ней) http://php.net/manual/en/function.isset.php Если сделать функцию, которая принимает ссылку на переменную и этой ссылке сделать isset *мегапуть* - этот путь будет создан.
Вот вам пример:

Код
 $array = array( 
    "a" => 1, 
    "b" => 2  
);   

is_set($array['PROPERTY_VALUES']['TEST']);   

var_dump($array);
 
И что же в итоге?
Контентщик деактивирует элемент в админке из списка. По факту в массиве на апдейт только 'ACTIVE' => 'N'. После is_set там еще и массив с доп свойствами.
И битрикс после этого изменяет активность и ВСЕ доп свойства. Последние, конечно, обнуляет.

PS У меня был архиважный элемент с 40+ свойствами, код писал сеньер, к нему претензий нет  :)  Не подставляйтесь, парни  :)
Имя Цитировать 0  
Текст сообщения*
Загрузить изображение