@loxnemamont

Делает ли статический метод CIBlock->GetFields() запросы к БД?

Вкратце:
В компоненте с помощью
$res = CIBlockElement::GetList(array(), $arFilter, false, array("nPageSize" => $arParams["ITEMS_PER_PAGE"]), $arSelect);

получаю список элементов инфоблока и передаю их в шаблон, где вывожу с пагинацией:

$res->NavStart();
while ($ob = $res->GetNextElement()) {
		$item = $ob->GetFields();
		echo $item["ID"];
		echo $item["NAME"];
		echo $item["ACTIVE"];
	}
echo $res->NavPrint("Товары");

Вопрос - правильная ли это реализация? Знаю, что в шаблоне делать запросы к БД - не лучшая практика, поэтому хотелось бы узнать - в данной ситуации метод

$ob->GetFields();

совершает запрос к БД или оперирует уже имеющимся объектом типа CIBElement?
  • Вопрос задан
  • 519 просмотров
Решения вопроса 1
Данный метод не статический, сам вызов об этом нам говорит. Запросы в нём не выполняются:
function GetFields()
{
	return $this->fields;
}


Запросы выполняются в методе $res->GetNextElement(). По-хорошему, этот код должен быть в компоненте, либо в result_modifier.php.

UPD. Если вам нужны только те поля, что в примере, то имеет смысл писать так:
while ($item = $res->Fetch()) {
    echo $item["ID"];
    echo $item["NAME"];
    echo $item["ACTIVE"];
}


bitrixcode.ru/neochevidnye-sposoby-optimizatsii-za...
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы