<![CDATA[ TV - копирование документов и SQL запросы - My Forums]]> https://forums.modx.com/thread/?thread=60130 <![CDATA[TV - &#1082;&#1086;&#1087;&#1080;&#1088;&#1086;&#1074;&#1072;&#1085;&#1080;&#1077; &#1076;&#1086;&#1082;&#1091;&#1084;&#1077;&#1085;&#1090;&#1086;&#1074; &#1080; SQL &#1079;&#1072;&#1087;&#1088;&#1086;&#1089;&#1099;]]> https://forums.modx.com/thread/60130/tv---sql#dis-post-349306
Интересный глюк выявляется.. Создал небольшой каталог, в TV содержатся некоторые данные для каждого документа, все эти документы содержатся в одной родительской папке. Сайт двуязычный, поэтому потребовалось скопировать всю структуру для перевода на другой язык. При копировании выявилось, что TV некоторых документов перемешались, кое-где пропали данные вообще, кое-где нормально все. При чем в некоторых документах произошло дублирование TV, т.е. было например 18 дополнительных текстовых полей, а стало 36, каждого поля по 2 штуки smiley) Решалось только полным удалением документа и созданием нового smiley. Ну это так просто написал, может у кого-то еще встречалось такое smiley
Меня больше интересует другое - если в каждом документе много TV (как у меня например было - 18, и всего 10 документов), то MODx при выборе значений из этих полей генерирует очень большое количество запросов в БД. Это ведь ненормально... Вот например:
<!--
****** TIMING ******
Query Time 0.0087 s
Query Count 80
Parse Time 0.0662 s
Total Time 0.0749 s
Source database
****** TIMING ******
-->
Возможно, просто руки не программиста, кривоватые smiley Поэтому приведу основу кода здесь:

Для получения массива ID всех документов из родительской папки делаю так:
if (!$id) {
$id = $modx->documentIdentifier;
}
$resource = $modx->getAllChildren($id, ’menuindex’, ’ASC’, $fields=’id’);

Считаю количество документов
$limit=count($resource);

В массиве ниже хранятся все названия TV для данного документа:
$tvnames = array ("catprice","catsmmainfoto","catfsmainfoto","catdescr1","catdescr2","catdescr3","catdescr4",
"catdescr5","catdescr6","catdescr7","catdescr8","catdescr9","catdescr10","catdescr11","catdescr12","catdescr13",
"catdescr14","catdescr15");

В цикле прохожу все документы и считываю значения их TV
for ($x = 0; $x < $limit; $x++) {
$value = $modx->getTemplateVarOutput($tvnames, $resource[$x][’id’], 1);
}

Дальше в этом же цикле использую полученные данные для вывода на странице, уже без запросов в БД. Вот в общем то и все.

Any ideas? smiley]]>
suhinin Sep 30, 2006, 05:48 AM https://forums.modx.com/thread/60130/tv---sql#dis-post-349306