@bitrixfordevelopers

Страница 274 из 1492
B3x
24.11.2016
16:27:58
404 мембера. Однако

Maxim
24.11.2016
16:31:14
Я не нашел

ht,zn

ребят

Google
Maxim
24.11.2016
16:35:41
/** * Sets a list of filters for WHERE clause * * @param array $filter * @return Query */ public function setFilter(array $filter) { $this->filter = $filter; return $this; } /** * Adds a filter for WHERE clause * * @param string $key * @param mixed $value * @return Query */ public function addFilter($key, $value) { if (is_null($key) && is_array($value)) { $this->filter[] = $value; } else { $this->filter[$key] = $value; } return $this; }

зацените эдд филтер

какй костыль

или его вижу только я?

Артём
24.11.2016
16:37:03
А в чем костыль?

Бернгардт
24.11.2016
16:37:41
скорее не костыль, а бага.. скорее всего должно было быть $this->filter = array_merge($this->filter, $value)

Артём
24.11.2016
16:38:19
Ох уж этот ваш php...

Maxim
24.11.2016
16:38:20
костыль в том, что функция ждет два параметра. при чем первый должен быть стринг

Бернгардт
24.11.2016
16:38:36
хотя.. возможно это для сложной логики было сделано.. хм.. интересно было бы посмотреть где применяеться с $key=null

Maxim
24.11.2016
16:38:48
ну мне сейчас нужно

я надеялся метод принимает массив

придется юзать через костыль

Бернгардт
24.11.2016
16:39:09
ну.. в доке указывается что должен быть стринг методу пофиг что это будет

Google
Maxim
24.11.2016
16:39:27
if (is_null($key) && is_array($value)) вот это я считаю костыль

Артём
24.11.2016
16:40:29
Типа ключик не может быть нулом?

Бернгардт
24.11.2016
16:40:47
вот и получается.. что это возможно для сложной логики filter=> ["LOGIC"=>"OR", 0=>$arFilter1, 1=>$arFilter2] чтоб такое собрать к примеру

странно было бы для такого key передавать 0 и 1

но это лишь предположения.. надо смотреть где применяется key=null

Maxim
24.11.2016
16:42:16
здесь надо применять массив.

Бернгардт
24.11.2016
16:42:29
* @param string $key надо просто заменить на * @param string | null $key и сразу все ок будет гыгы

ну да, надо ..

такие вещи обычно бывают когда - сначала один говорит, да что там такого, все просто же.. быстро внедряют, используют в 10+ местах а потом вспоминают про "незначительный нюанс"

а вообще в битриксе есть более ржачные места.. это да )

Maxim
24.11.2016
16:49:42
$query->addFilter('=GS.SITE_ID', $siteId); $query->addFilter(null, array( 'LOGIC' => 'OR', '=VISIBLE' => 'Y', '<=UG.ROLE' => \Bitrix\Socialnetwork\UserToGroupTable::ROLE_USER ));

Бернгардт
24.11.2016
16:50:39
ну вот.. сложная логика, почти слово в слово.. почему я не удивлен

а ключа нет - т.к. там должно быть число.. иначе битрикс не работает в другом месте затычка стоит) гыгы да и не считать же.. количество предыдущих вызовов, иначе будет третья затычка )

хотя логичнее конечно было бы зарезервировать слово key=>complexFilter к примеру.. хм

Maxim
24.11.2016
16:52:48
А завтра!!!!

Бернгардт
24.11.2016
16:53:23
ага.. восьмая уже.. а послезавтра девятая )

Maxim
24.11.2016
16:53:26
Всем хорошего вечера ребят!

Виталий
24.11.2016
16:54:33
есть каталог с разделами и элементами. как можно забубенить слайдер так, чтобы на каждый раздел можно было задать свои слайдеры?

Бернгардт
24.11.2016
16:55:01
доп.свойство секции?

Виталий
24.11.2016
16:55:27
да что-то тяжко даётся, надо в разделе показывать и в элементе

Google
Бернгардт
24.11.2016
16:55:32
и доп.логика - дернуть текущую секцию или ее родителей, пока не найдем хоть чтото заполненное один минус - в корне слайдер так не задать

но в корне тогда только доп.галками в самом элементе.. как то так

а в чем проблема - у элемента также есть секция.. у элемента же слайдер секции показвыаем, верно?

Виталий
24.11.2016
16:57:39
да

Бернгардт
24.11.2016
16:58:02
ну вот.. в карточке товара есть section_id, логика не меняется

Виталий
24.11.2016
17:00:00
если у раздела есть подразделы, то тут получается надо будет еще и проверять есть ли у раздела родитель?

Бернгардт
24.11.2016
17:00:24
нет, ни в коем случае

надо логику утвердить другую

на секцию даем элементы, если на подсекцию в слайдере другие элементы - надо заполнить, если нет, не трогать

Анна
24.11.2016
17:00:56
Спасибо всем большое, все сделала, хорошего вечера!

Бернгардт
24.11.2016
17:01:19
тогда получается - дергаем секцию, есил чтото есть, в слайдер, если нет - тогда только дергаем родителя

объединять эти массивы нельзя

Виталий
24.11.2016
17:01:57
Василий, на ты можно?

Igor
24.11.2016
17:02:00
Отдельный инфоблок ? с привязкой к секциям

Бернгардт
24.11.2016
17:02:12
Василий, на ты можно?
не мона, а нуна

Виталий
24.11.2016
17:02:14
а ты где работаешь?))

Бернгардт
24.11.2016
17:02:29
infospice.ru

Виталий
24.11.2016
17:03:20
просто вещи ты дельные говоришь

интересно стало

Dmitry
24.11.2016
17:03:53
хотя.. возможно это для сложной логики было сделано.. хм.. интересно было бы посмотреть где применяеться с $key=null
когда во втором аргументе ты передаешь массив фильтров, то первый аргумент ставишь в null

Google
Dmitry
24.11.2016
17:04:43
ну мне сейчас нужно
так и вводи setFilter(null,массив_с_фильтром)

Бернгардт
24.11.2016
17:04:44
просто вещи ты дельные говоришь
Пойдем в команду, мы эти вещи делаем

А не только говорим. Свету проще будет на новый плакат раскрутить )

Виталий
24.11.2016
17:06:33
да я не особо разработчик, в преоктировщики ушел, проекты еще просто тянутся, где просят что-то сделать и от денег отказываться думаю глупо

Dmitry
24.11.2016
17:06:42
Бернгардт
24.11.2016
17:07:03
Dmitry
24.11.2016
17:08:17
if (is_null($key) && is_array($value)) { $this->filter[] = $value; } setFilter(null,['=ID' => 100500]) работает

Бернгардт
24.11.2016
17:08:44
$class->addFilter('key', 'value'); $filter == ['key'=>'value']; $class->addFilter(null, ['key'=>'value']); $filter == [0=>['key'=>'value']]; вглядись внимательнее

Admin
ERROR: S client not available

Dmitry
24.11.2016
17:12:17
там не merge массива
Несколько массивов работают как AND, если в массиве 1 элемент, то битрикс скушает и применит фильтр '=ID' => 100500, просто в запросе будут двойные скобки WHERE ((ID=100500))

Бернгардт
24.11.2016
17:13:13
я не говорю что нельзя собрать конечный запрос идентичный простому я говорю лишь о том что оно немного для другого - а именно для сложной логики и массив $this->filter отличается, т.к. логика сбора другая

в простом, без null ты логику or не соберешь

Dmitry
24.11.2016
17:14:17
в простом, без null ты логику or не соберешь
не, эт понятно, я ж про то и говорил

Бернгардт
24.11.2016
17:14:20
с null без LOGIC явно обнозначенной работать не будет просто забыли "небольшой нюанс", либо собирались делать отдельный инструмент, а потом передумали

Бернгардт
24.11.2016
17:15:21
ну тут скорее речь о том что будет когда несколько раз addFilter вызовешь вроде при нескольких без LOGIC уже не сработает

или я не прав? хм

Google
Dmitry
24.11.2016
17:15:57
работает работает

Бернгардт
24.11.2016
17:16:07
хыыы

"это битрикс, детка, в жопу логику"

ну спасибо, буду знать

Dmitry
24.11.2016
17:21:44
нефиг наезжать, очень удобно. Когда компонент через класс делаешь. заводишь поле $baseQuery в куче методов добавляешь по условиям addFilter, причем и a,b и null,arX потом делаешь $q1 = clone $this>baseQuery; $q1->addSelect('CNT', ....) $q1->exec() общее кол-во $q2 = clone $this>baseQuery; $q2->setSelect([туева хуча полей]); чтобы два раза не вставать

Бернгардт
24.11.2016
17:23:01
хм

подумал еще раз - и решил что массив както привлекательнее нового непонятного объекта.. видимо я не познал дзен.. хм

Dmitry
24.11.2016
17:31:55
подумал еще раз - и решил что массив както привлекательнее нового непонятного объекта.. видимо я не познал дзен.. хм
собирай фильтр, юзай getList внутри он все равно выполняется через query. Так что выигрыша/проигрыша особого нет

Бернгардт
24.11.2016
17:32:13
ну это понятно, и этот метод мне больше нравится

просто я не особый сторонник подхода винды - когда одно и тоже можно 10 разными способами сделать, причем совершенно разными и по совершенно разной логике и въезжать сложнее на поддержке, и дообучать

и тут как раз вопрос о том - был бы гдето выигрыш в читаемости, или скорости.. а тут просто сахар

причем весьма сомнительный

Dmitry
24.11.2016
17:34:05
query - это для ООП-шников. Я например делаю компонент на классах. Базовый класс уже содержит всю логику запроса, а в потомках в две строчки добавляю фильтры, которых не достает

Бернгардт
24.11.2016
17:34:35
ну это то понятно

Dmitry
24.11.2016
17:36:39
Ну и опять же ))) UNION можно получить только через $query1->getQuery . ' UNION ' . $query2->getQuery

Бернгардт
24.11.2016
17:36:50
но тут опять же.. или я стал стар, или действительно такой подход не самый хороший неявностями очень попахивает.. но это скорее общий недостаток ооп, если завернуть в более чем три слоя наследования - источник ошибки хрен найдешь в классах впринципе - это допустим хоть както оправдано в компонентах вывода .. оправдано ли.. а хз на самом деле, но дебажить будет сложнее, поддерживать тоже сложнее, т.к. хз сколько еще ссылаются код имеет несколько совершенно разных подходов одно радует - без работы лично меня это еще долго не оставит

union зло в чистом виде )

а, ну да.. волшебное слово, имхо )

Dmitry
24.11.2016
17:41:47
> в компонентах вывода .. оправдано ли.. ну например, у меня куча компонентов выводящих отчет по разным данным, у всех запросов джоинится несколько одних и тех же справочных таблиц, различаются только таблицы с данными. Фильтры одни и теже (дата, юзер, и т.д) Базовый запрос я формирую в одном базовом классе, где через queryформирую весь фарш кроме селекта, метод вызова запроса, вызов шаблона, валидацию входящих параметров и т.д. потом делаю десяток компонентов-потомков, в которых всего 1 (один) метод $this->baseQuery->addSelect() и свой шаблон

Бернгардт
24.11.2016
17:43:14
> различаются только таблицы с данными чистой воды параметр компоненты

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

Dmitry
24.11.2016
17:44:42
зато когда в одном из 10 надо будет переписать функционал, то я только в нем переопределю пару методов

Страница 274 из 1492