VKengine Лицензии Установка Мануал
Телефон +7 (916) 478-23-45
Функция Get_News

function Get_News(
$block_id,//Номер инфоблока
$amount=10,//Количество элементов на страницу
$page=1,//Номер страницы
$properties=Array(),//Фильтр
$orderby="ORDER BY `id` DESC",//Сортировка
$show_query=false//Распечатывать ли запрос на экране
);
Что делает функция
Для успешной работы функции должны быть заданы следующие параметры:
$block_idНомер инфоблока, из которого брать новости. В случае, если инфоблок является папкой, новости также берутся из всех инфоблоков, наследующих данной папке.
$amountКоличество элементов, которые нужно вывести на одной странице. По умолчанию - 10.
$pageНомер страницы. По умолчанию - 1. Функция вернёт $amount элементов, начиная с ($page-1)*amount+1.
Пример: Страница 1, количество элементов на страницу 10. Функция вернёт элементы с 1 по 10.
Пример: Страница 3, количество элементов на страницу 5. Функция вернёт элементы с 11 по 15.
$propertiesФильтр. Параметр является массивом. В нём нужно перечислить несколько условий, которые будут применены для выбора элементов. Условия накладываются совместно ($properties[0] AND $properties[1] AND ...]). По умолчанию условия не заданы. При генерации стандартных страниц по умолчанию предлагается условие active=1 - элемент активен (рядом с ним в инфоблоке горит зелёная точка, а не красная).
$orderbyСортировка элементов. По умолчанию они сортируются по убыванию по порядковому номеру (id DESC). Этот параметр должен быть записан в виде "order by ПЕРЕЧЕНЬсТОЛБЦОВдЛЯуПОРЯДОЧЕНИЯ". Столбцов может быть несколько, но в запросе участвует только таблица текущего инфоблока, поэтому столбцы могут быть только оттуда.
Внимание! Если Вы генерируете этот параметр функции из пользовательских данных, проверьте, что поле, которое выбрал пользователь, есть в списке полей инфоблока. Иначе Вы рискуете стать жертвой SQL-инъекции. То есть прежде чем писать $orderby="order by ".$_GET["order"]." DESC", проверьте, что $_GET["order"] есть в списке полей инфоблока.
В случае, если Вы выбираете поле для упорядочения сами, не используя GET- и POST-данные, переданные пользователем (например, "order by name ASC"), беспокоиться не о чем.
$show_query=falseРаспечатывать ли запрос на экране. Полезный параметр для отладки. Запрос распечатывается в любом случае, если он завершился ошибочно (error). Если же Вам нужно отслеживать текст запроса в процессе написания кода, то этот параметр должен быть указан как true. По умолчанию - false.

Функция возвращает массив $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

Valid HTML 4.01 Strict Valid CSS!