К содержанию
VKengine | Лицензии | Установка | Мануал |
Телефон +7 (916) 478-23-45
|
Функция Get_News
function Get_News(
Что делает функция
Для успешной работы функции должны быть заданы следующие параметры:
Функция возвращает массив $arResult следующей структуры: Подмассивы $arResult["id"], $arResult["name"], $arResult["type"], $arResult["name_rus"], $arResult["order1"], $arResult["info"], $arResult["list"]. В каждом из подмассивов, кроме $arResult["list"], поля пронумерованы по порядку их следования в базе данных. Соответственно, можно быть уверенным, что данные $arResult["id"][$i], $arResult["name"][$i], $arResult["type"][$i] и т.д. относятся к одному и тому же полю. В подмассиве $arResult["id"] находятся номера полей в таблице ПРЕФИКСтАБЛИЦ_reg_fields. В подмассиве $arResult["name"] находятся названия полей (английские, которые используются в базе данных). В подмассиве $arResult["type"] находятся типы полей (английские). В подмассиве $arResult["name_rus"] находятся названия полей (русские, которые видны в меню). В подмассиве $arResult["order1"] находится порядок вывода полей для списка новостей в админке. В подмассиве $arResult["info"] находятся массивы значений для полей типа "Привязка к элементу раздела". Структура каждого из таких массивов: $arResult["info"][НОМЕРпОЛЯ]["block"] - информация об инфоблоке, к элементам которого привязано поле: $arResult["info"][НОМЕРпОЛЯ]["block"]["id"] - номер инфоблока. $arResult["info"][НОМЕРпОЛЯ]["block"]["name_main"] - название инфоблока по-английски. $arResult["info"][НОМЕРпОЛЯ]["block"]["name"] - название таблицы, в котором хранятся данные этого инфоблока. Отличается от названия инфоблока, если инфоблок наследует другому инфоблоку. $arResult["info"][НОМЕРпОЛЯ]["block"]["name_rus"] - название инфоблока по-русски. $arResult["info"][НОМЕРпОЛЯ]["block"]["parent_id"] - номер родительской папки для инфоблока. $arResult["info"][НОМЕРпОЛЯ]["block"]["folder"] - является ли инфоблок папкой. $arResult["info"][НОМЕРпОЛЯ]["block"]["nasl"] - наследует ли инфоблок от другого. $arResult["info"][НОМЕРпОЛЯ]["block"]["table_id"] - id инфоблока, от которого данный инфоблок наследует и у которого есть своя таблица. Бывает нужен для того, чтобы вызвать Get_News по всему инфоблоку, от которого наследует данный. $arResult["info"][НОМЕРпОЛЯ]["field"] - массив информации о текстовом поле, из которого берутся данные для нумерации. Это первое (в соответствии со столбцом order1) строковое поле инфоблока, на который ссылаются. Массив состоит из id и name поля. $arResult["info"][НОМЕРпОЛЯ]["field_values"] - массив номеров элементов инфоблока, на который ссылаются, и значений поля, указанного в предыдущем массиве. Например: $arResult["info"][НОМЕРпОЛЯ]["field_values"][0]["id"]=1; $arResult["info"][НОМЕРпОЛЯ]["field_values"][0]["value"]="Афанасьев"; $arResult["info"][НОМЕРпОЛЯ]["field_values"][1]["id"]=2; $arResult["info"][НОМЕРпОЛЯ]["field_values"][1]["value"]="Иванов"; и т.д. В подмассиве $arResult["list"] находится нумерованный по порядку (0, 1 и т.д.) массив данных про каждый элемент. Массив содержит следующие поля: $arResult["list"][НОМЕРэЛЕМЕНТАпОпОРЯДКУвдАННОМмАССИВЕ]["id"] - идентификатор элемента в таблице ПРЕФИКСтАБЛИЦ_blocks_ИДЕНТИФИКАТОРбЛОКА. $arResult["list"][НОМЕРэЛЕМЕНТАпОпОРЯДКУвдАННОМмАССИВЕ]["active"] - показатель активности элемента (1 - активен, 0 - неактивен). $arResult["list"][НОМЕРэЛЕМЕНТАпОпОРЯДКУвдАННОМмАССИВЕ]["parent_id"] - номер инфоблока, в котором находится элемент. Каждый элемент приписан к своему (только одному!) инфоблоку внутри папки. Поэтому если функция Get_News вызывается от инфоблока, который является папкой, то этот элемент массива будет равен номеру инфоблока, который наследует от родительской папки и в котором лежит данный элемент. $arResult["list"][НОМЕРэЛЕМЕНТАпОпОРЯДКУвдАННОМмАССИВЕ][ИМЯпОЛЯ] - для значений всех полей, кроме полей "привязка к элементу раздела", "привязка к элементу любого раздела", привязка к разделу. Внимание! Значение поля типа "Да/нет" указывается как "Да" либо "Нет", а не как "1"/"0" (хотя в базе данных sql хранятся именно 1 и 0). $arResult["list"][НОМЕРэЛЕМЕНТАпОпОРЯДКУвдАННОМмАССИВЕ][ИМЯпОЛЯ_b], [ИМЯпОЛЯ_b_id], [ИМЯпОЛЯ_id] - для значений полей "привязка к элементу раздела". В первом из них хранится русское название блока, во втором - номер блока, в третьем - номер элемента, к которому привязан данный элемент. Название элемента можно взять из массива $arResult["info"][НОМЕРпОЛЯ]["field_values"]. $arResult["list"][НОМЕРэЛЕМЕНТАпОпОРЯДКУвдАННОМмАССИВЕ][ИМЯпОЛЯ_b], [ИМЯпОЛЯ_b_id] - для значений полей "привязка к элементу раздела". В первом из них хранится русское название блока, во втором - номер блока, к которому привязан данный элемент. $arResult["list"][НОМЕРэЛЕМЕНТАпОпОРЯДКУвдАННОМмАССИВЕ][ИМЯпОЛЯ_b], [ИМЯпОЛЯ_b_id], [ИМЯпОЛЯ_i], [ИМЯпОЛЯ_i_id] - для значений полей "привязка к элементу любого раздела". В первом из них хранится русское название блока, во втором - номер блока, в третьем - название элемента, в четвёртом - номер элемента, к которому привязан данный элемент. Подробности работы функции
Функция работает следующим образом.
Сначала функция получает все номера инфоблоков, наследующие данному. И ставит это первым условием при запросе. Далее добавляются условия из массива $properties. Далее делается запрос к базе данных - получить все поля из таблицы при заданных условиях. Если в запросе есть синтаксическая ошибка, то программа остановит работу (die(mysql_error)). Далее функция распечатывает этот запрос, если $show_query=true. Далее функция делает запрос к таблице ПРЕФИКСтАБЛИЦ_reg_fields о списке полей и начинает заполнять результирующий массив. Если в таблице есть поля типа "привязка к элементу раздела", то на каждое такое поле выполняется дополнительный запрос, забирающий из базы данных отфильтрованные по указанным при создании поля параметрам номера и названия элементов блока, к которому мы привязываем данные. Названием поля считается название первого (по order1) строкового поля в соответствующем инфоблоке. Если в таблице есть поля типа "привязка к разделу", то на каждое такое поле выполняется запрос о списке всех блоков, и данные об этом заносятся в $arResult["info"][НОМЕРпОЛЯ]["blocks"]. Внимание! Если в таблице есть поля типа "привязка к элементу любого раздела", то НА КАЖДЫЙ ЭЛЕМЕНТ для каждого поля (то есть $amount раз для каждого поля) выполняется запрос по поиску названия элемента в инфоблоке и названия инфоблока. Поэтому мы не рекомендуем использовать поля такого типа для вывода каких-либо данных сайта конечному пользователю. В конце своей работы функция возвращает массив $arResult. Файл, содержащий функцию
engine/controllers/blocks/blocks.php
| ||||||||||||||||||||||||