On March 26, 2019 we launched new MODX Forums. Please join us at the new MODX Community Forums.
Subscribe: RSS
  • Добрый день! smiley
    Интересный глюк выявляется.. Создал небольшой каталог, в 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
      Разработка сайтов и программных модулей на MODX.
      Опыт работы на MODx с 2005 года. Высокое качество.
      Компания Baltic Design Colors: http://www.bdcolors.ru.