Оптимизация MODX Evolution для работы с большим числом документов
- Перемещение и создание копий документов работает не корректно
- Сохранение документа в который вложенно много других документов немного подтормаживает из-за необходимости обновления URI адресов (если изменение alias-ов у документов не предвидится, то избавиться от этого минуса можно отключив плагин созданный на 5 шаге установки)
-
Закачиваем содержимое папки manager в папку с админкой MODX Evolution
-
Добавляем в таблицу modx_site_content новую колонку uri типа varchar длинной 255
-
Запускаем скрипт
$q = $modx->db->query("SELECT id FROM ".$modx->getFullTableName("site_content"));
$q = $modx->db->makeArray($q);
foreach($q as $item){
$url = $modx->makeURL($item['id']);
$modx->db->update(array('uri'=>$url),$modx->getFullTableName("site_content"),'id='.$item['id']);
}
-
Добавляем уникальный индекс колонке uri в таблице site_content
-
Добавляем плагин на события OnDocDuplicate, OnBeforeDocFormSave и OnDocFormSave
require MODX_BASE_PATH .'assets/plugins/makeuri/makeuri.plugin.php';
Не забываем разместить папку makeuri с плагином из архива в папку assets/plugins
-
Проверяем порядок вызова плагинов и убеждаемся, что наш плагин запускается последним
-
Добавляем в файл manager/includes/document.parser.class.inc.php строку
include_once(dirname(dirname(__FILE__)) . '/custom/includes/document.parser.class.inc.php');
- Заменяем в файле manager/includes/document.parser.class.inc.php строку
class DocumentParser{
на
class DocumentParserOriginal{
- Добавляем в файл manager/processors/cache_sync.class.processor.php строку
include_once(dirname(dirname(__FILE__)) . '/custom/processors/cache_sync.class.processor.php');
- Заменяем в файле manager/processors/cache_sync.class.processor.php строку
class synccache{
на
class synccacheOriginal{
- Добавляем в начало файла manager/processors/move_document.processor.php строку
include_once(dirname(dirname(__FILE__)) . '/custom/processors/move_document.processor.php');
exit();
-
Отчищаем кеш
-
Добавляем 3 индекса unpub_date, pub_date, menuindex в таблицу site_content
-
Добавляем в начало файла manager/actions/mutate_content.dynamic.php строку
include_once(dirname(dirname(__FILE__)) . '/custom/actions/mutate_content.dynamic.php');
exit();
- Пример обновления uri всех дочерних документов при помощи API можно подсмотреть в файле rewrite-uri.php