Добрый день!
Интересный глюк выявляется.. Создал небольшой каталог, в TV содержатся некоторые данные для каждого документа, все эти документы содержатся в одной родительской папке. Сайт двуязычный, поэтому потребовалось скопировать всю структуру для перевода на другой язык. При копировании выявилось, что TV некоторых документов перемешались, кое-где пропали данные вообще, кое-где нормально все. При чем в некоторых документах произошло дублирование TV, т.е. было например 18 дополнительных текстовых полей, а стало 36, каждого поля по 2 штуки
) Решалось только полным удалением документа и созданием нового
. Ну это так просто написал, может у кого-то еще встречалось такое
Меня больше интересует другое - если в каждом документе много 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 ******
-->
Возможно, просто руки не программиста, кривоватые
Поэтому приведу основу кода здесь:
Для получения массива 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?