На данный момент, плагин полностью готов к работе только на сборке Дмитрия версии не ниже 1.1b-d7.1
Чтобы детальней понять суть данного компонента советую ознакомиться со следующим материалом:
- Презентация Билла Карвина о способах хранения и обработки иерархических данных в MySQL
- Описание паттерна Closure Table
SELECT `c`.`id`, `c`.`pagetitle`, `t`.`descendant`, `t`.`depth`
FROM `modx_site_content` as `c`
JOIN `modx_site_content_tree` as `t` ON `c`.`id` = `t`.`descendant`
WHERE `t`.`ancestor` = 666 AND `t`.`depth` > 0
ORDER BY `t`.`depth` ASC, `c`.`menuindex` ASC
SELECT `c`.`id`, `c`.`pagetitle`, `t`.`descendant`, `t`.`depth`
FROM `modx_site_content` as `c`
JOIN `modx_site_content_tree` as `t` ON `c`.`id` = `t`.`ancestor`
WHERE `t`.`descendant` = 666 AND `t`.`depth` > 0
ORDER BY `t`.`depth` DESC
- Нет жесткой привязки к массиву aliasListing в отличии от UltimateParent
- Возможность получения 1 SQL запросом всего дерева дочерних ресурсов без цепочки запросов в стиле
SELECT `id` FROM `modx_site_content` WHERE `parent` IN(
SELECT `id` FROM `modx_site_content` WHERE `parent` IN (
SELECT `id` FROM `modx_site_content` WHERE `parent` IN (
....
)
)
)
После установки плагина ClosureTable, необходимо переиндексировать дерево для уже существующих документов. Чтобы это сделать, нужно пересохранить каждый имеющийся документ в дереве. Если установка плагина выполнялась на чистый MODX, а в дереве не так много документов, то выполнить процедуру пересохранения можно и руками. В противном же случае потребуется установить MODxAPI из репозитория DocLister. После чего воспользоваться следующим кодом:
include_once(MODX_BASE_PATH.'assets/lib/MODxAPI/modResource.php');
$DocObj = new modResource($modx);
$q = $modx->db->query("SELECT id FROM ".$modx->getFullTableName('site_content'));
while($row = $modx->db->getRow($q)){
$DocObj->edit($row['id'])->save(true, true);
}
http://agel-nash.ru ICQ: 8608196 Skype: agel.nash Email: modx@agel-nash.ru |
WMZ: Z762708026453 WMR: R203864025267 PayPal: agel_nash@xaker.ru |