Полезные методы xPDOCacheManager
Класс xPDOCacheManager реализует механизм кеширования в MODX. Кеш у нас хранится в файлах, а значит, этот класс может помочь нам в работе с файловой системой.
Чтобы иметь доступ к методам класса xPDOCacheManager, нужно получить экземпляр этого класса. Это делается одной строчкой:
xPDOCacheManager::writeFile
Первый метод поможет нам записывать данные в файл. Работает он очень просто:
В итоге в корне сайта будет создан указанный файл с нужным содержимым. Причём можно не волноваться о том, создана ли соответствующая структура папок — нужные папки будут созданы автоматически:
Если файл уже был ранее создан, то он будет перезаписан. Если нам нужно дописать содержимое в конец файла, просто указываем третий параметр:
Причём создавать можно любые файлы, а не только текстовые:
xPDOCacheManager::writeTree
Как вы поняли, кэш-менеджер умеет создавать структуру папок. Делает это метод writeTree:
xPDOCacheManager::copyFile
Думаю, понятно, что этот метод создаёт копию файла:
xPDOCacheManager::copyTree
А вот это уже бомба — метод copyTree копирует все вложенные файлы, папки, подпапки и пр.:
xPDOCacheManager::deleteTree
Раз мы можем создавать целые структуры папок, значит, мы можем с такой же лёгкостью их удалять. Посмотрите, какие «красивые» примеры кода используются в PHP для удаления папок: PHP удалить папку с содержимым. Такой вариант мне нравится больше:
Если мы хотим удалить только файлы и папки внутри указанного каталога, то указываем 'deleteTop' => false. Параметр extensions нужно указывать, потому что по умолчанию будут удаляться только файлы кеша (.cache.php)
Вот, вроде бы и не много методов, но если вы будете их использовать, ваш код станет чище, логичнее и понятнее.
Чтобы иметь доступ к методам класса xPDOCacheManager, нужно получить экземпляр этого класса. Это делается одной строчкой:
$cache = $modx->getCacheManager();xPDOCacheManager::writeFile
Первый метод поможет нам записывать данные в файл. Работает он очень просто:
$cache->writeFile(MODX_BASE_PATH . 'filename.txt', 'Текст');В итоге в корне сайта будет создан указанный файл с нужным содержимым. Причём можно не волноваться о том, создана ли соответствующая структура папок — нужные папки будут созданы автоматически:
$cache->writeFile(MODX_BASE_PATH . 'test/folder/filename.txt', 'Текст');Если файл уже был ранее создан, то он будет перезаписан. Если нам нужно дописать содержимое в конец файла, просто указываем третий параметр:
$cache->writeFile(MODX_BASE_PATH . 'filename.txt', 'Текст', 'a');Причём создавать можно любые файлы, а не только текстовые:
$img = file_get_contents('https://via.placeholder.com/300');
$cache->writeFile(MODX_BASE_PATH . 'img.png', $img);xPDOCacheManager::writeTree
Как вы поняли, кэш-менеджер умеет создавать структуру папок. Делает это метод writeTree:
$cache->writeTree(MODX_ASSETS_PATH . 'template/main/css/');xPDOCacheManager::copyFile
Думаю, понятно, что этот метод создаёт копию файла:
$source = MODX_MANAGER_PATH . 'templates/default/images/modx-icon-color.svg';
$target = MODX_BASE_PATH . 'logo/modx-logo.svg';
$cache->copyFile($source, $target);xPDOCacheManager::copyTree
А вот это уже бомба — метод copyTree копирует все вложенные файлы, папки, подпапки и пр.:
$source = MODX_MANAGER_PATH . 'templates/default/images/';
$target = MODX_BASE_PATH . 'logo/';
$cache->copyTree($source, $target);xPDOCacheManager::deleteTree
Раз мы можем создавать целые структуры папок, значит, мы можем с такой же лёгкостью их удалять. Посмотрите, какие «красивые» примеры кода используются в PHP для удаления папок: PHP удалить папку с содержимым. Такой вариант мне нравится больше:
$cache->deleteTree(MODX_BASE_PATH . 'logo/', ['deleteTop' => true, 'extensions' => []]);Если мы хотим удалить только файлы и папки внутри указанного каталога, то указываем 'deleteTop' => false. Параметр extensions нужно указывать, потому что по умолчанию будут удаляться только файлы кеша (.cache.php)
Вот, вроде бы и не много методов, но если вы будете их использовать, ваш код станет чище, логичнее и понятнее.
Комментарии: 30
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
Друзья, ответьте мне на один вопрос — как вы считаете, это нормально для кэш-менеджера имплементировать данный функционал?
А если серьёзно — то да, это кажется не очень логичным)
Ответ-то очевиден. Просто хотелось подискутировать и потихоньку придти к новости, что в MODX3 появился FlySystem.
MODX3 насколько я знаю нуждается в тестировании, да и работа идёт. Чтобы это увидеть, нужно смотреть на гитхабе.
Для того чтобы сидеть и говорить, будто обещали и ни… уя, нужно хотя бы помочь… Хотя бы что нибудь сделать. Я так считаю. Можете плюнуть в меня и не согласиться, ваше право.
Я вот из-за малых знаний в back-end'е при всем желании не смог бы помочь проекту, потому и не ворчу мол зажрались, деньги собрали и ни шиша, сидят и ничего не делают… Немного повзрослев понял, что скорее моё мнение и тем более желание никого не должно волновать и скорее всего не волнует. Просто нужно пытаться самому что-то делать для улучшения своей жизни и если остается желание, силы и возможности, то делать что-то для других и всё)
Пользуясь случаем (так как давно меня эта мысль не покидает и до сих пор стыдно) прошу прощения у Василия Наумкина за неадекватные ответы в тех. поддержке modstore.pro по поводу mSearch2 и у Ивана Климчука за комментарии на данном форуме по одному моему вопросу. Долго думал и не мог определиться как мне извиниться и тут решился. Протягиваю вам руку и надеюсь, что вы поймёте меня.
Уверен, что за словом в карман я не лазил и мы весело пообщались =)
Ну и хорошо, раз нет обид!)
Т.е. не кеш-менеджер работает через файловый менеджер, а наоборот. Реакция одна — WTF. И подобного говнокода в ядре я встречал неоднократно. О некоторых моментах я уже писал раньше.
Если это понимаю я со своими средненькими познаниями, то что уж говорить про профи.
Заключение. Если вы ни слова не поняли, о чём тут написано, не расстраивайтесь. У вас ещё всё впереди. :)
А вот так добавляются скрипты в классе modX
У меня одного ощущение, что писал практикант? ))
Может Евгений меня поправит, но работа с сессией имеет слабые места. Достаточно добавить в сессию один ключик и вы авторизованы в админке.В свете недавней уязвимости сделать это раз плюнуть.
Т.е. если пользователя залогинен только в админке, то он автоматически аутентифицируется на сайте. Вот зачем? Многие уже на этом попадались.
Как пример функция email из библиотеки modHelpers заменяет такой код
Правда короче и удобнее?
Да вообще в статье все написано, напиши аналог метода copyTree, ну как? Удобно?
В 514 строке '7f9b2119f1e00b7ae4b3f2fe555fb5b7' постоянно меняется название, с чем это может быть связано?