public function initialize(){ $this->modx->addPackage('component', MODX_CORE_PATH.'components/component/model/'); return parent::initialize(); } Не?
Спасибо, Николай. Как раз то что нужно! Будем надеятся на новый компонент от тебя с особым менеджером картинок. )
Куда именно добавляешь? Да в консоль же добавляю. Отписал отдельную тему modxclub.ru/topics/vyizov-svoego-proczessora-1632.html
Я хочу вызвать в смарти свой процессор, чтобы дергать данные из своих таблиц не через package + newQuery. Был поставлен modExtra, переименован, написаны схемы баз, созданы классы — поднята CMP, которая дергает классы из процессора через контроллер, ну все как обычно в общем. Далее я создаю в процессорах папку web, копирую туда обычный наследующий modObjectGetListProcessor процессор class ComponentWebClassGetListProcessor extends modObjectGetListProcessor { public $objectType = 'ClassName'; public $classKey = 'ClassName'; public $defaultSortField = 'id'; public $defaultSortDirection = 'DESC'; //public $permission = 'list';
return 'ComponentWebClassGetListProcessor'; Теперь вызываю это дело в консоли вот это // $modx->addPackage('component', MODX_BASE_PATH.'Component/core/components/component/model/');
// $d= $modx->getObject('ClassName',1); // print_r($d->toArray()); print '<pre>'; ini_set('display_errors', 1); $modx->switchContext('web');
$action = 'web/rooms/getlist'; $ns = 'myNamespace'; $params = array( // "limit" => 6, ); //echo $modx->getObject('modNamespace', $ns)->getCorePath(); if(!$response = $modx->runProcessor($action, $params , array( 'processors_path' => $modx->getObject('modNamespace', $ns)->getCorePath().'processors/', ) )){ print "Не удалось выполнить процессор"; return; }
print_r($response->getResponse()); На выходе Could not get table class for class и {«success»:true,«total»:«0»,«results»:[]} Схожая картина во фронте, когда вставляю в шаблон {processor} Расскомментирую $modx->addPackage('component', MODX_BASE_PATH.'Component/core/components/component/model/'); — все начинает работать. Собственно, вопрос что прописать в процессоре, чтобы не нужно писать можно было не вызывать addPackage extension_packages в консоли спасает — во фронте не хочет.
Продолжаю делать новостной портал и вот с какой проблемой столкнулся — загрузка файлов в корневой раздел источника файлов. На новостном портале это действительно проблема, а не мелкая неприятность. К примеру гляньте что было в корневой папке картинок в прошлой версии разрабатываемого сайта (который пытались разрабатывать до меня). Обратите внимание на скролл — там много экранов вниз. Всего в корне лежит почти 500 картинок. А ведь это пока еще просто разрабатываемый сайт, то есть он даже не начал работать нормально. Когда он заработает, с учетом того что там уже 75 000 статей и в день добавляется еще несколько десятков, вы можете представить что там будет твориться в корневом разделе. Так вот, не смотря на то, что я сделал особый менеджер картинок специально для этого проекта, чтобы легко можно было работать с многими тысячами файлов, я заметил, что некоторые люди с достаточными правами нет-нет, да загрузят картинки в корневой раздел (то есть не через этот менеджер картинок). Считаю, что это не порядок и решил запретить загрузку файлов в корневой раздел, но как оказалось, это та еще проблема :) Во-первых, в MODX-е нет политики безопасности, решающей можно загружать в корень или нельзя. Хотя вот для документов такая политика есть — new_document_in_root. Если у пользователя нет этого права, он не сможет создать документ в корне контекста. Во-вторых, процесс загрузки в объекте медиасурса прописан таким образом, что в нем просто нет точек прерывания процесса. Есть целых два вызова плагинов (раз и два), но для них не прописан обработчик, как это, к примеру, сделано в create-процессорах. В upload-процессоре вообще ни одно событие не вызывается. Вот такие вот не приятные моменты с довольно тривиальной задачей. В общем, я решил не останавливаться и написал вот такой вот небольшой плагин. Он не может запретить загрузку файлов по вышеуказанным причинам, но в случае если файлы загружаются в корень папки и ошибок при этом не возникло, он просто удаляет сразу эти файлы :) При этом еще и сообщение выводит, что нельзя в корень файлы грузить. ? На первое время этого будет достаточно. А вообще, кому не лень, допишите и отправьте пулл-реквест в MODX, чтобы была нормальная обработка событий в медиасурсе. Дело нужное.
P.S. Добавил небольшой коммит в модуль. Странно, раньше все работало, а сейчас что-то с неймспейсами затык возник. Возможно из-за того, что я в настройках MODX-а установил медиасурс Dropbox как основной, и из-за этого несколько изменился механизм его инициализации. Так все работает.
Пришлите мне на почту n.lanets@modxclub.ru данные доступа в вашу админку, я посмотрю что и как. И какая у вас версия MODX? Я у себя на MODX2.3 попробовал в миге галерею сделать с источником файлов Dropbox, все робит. joxi.ru/Q2KndEBsaoD1mj А судя по ошибке просто не инициализировался контекст. К сожалению, некоторые процессоры в MODX не идеальны, иногда требуют передачи дополнительных параметров. К примеру в resource/create надо передавать context_key, хотя процессор мог бы получить его из объекта самого документа. Здесь видимо тот же случай. Но что интересно, в initialize() медиасурса контекст автоматически подхватывается. Судя по всему выполнение медиасурса идет без выполнения initialize(), или у пользователя нет прав на загрузку данного контекста (хотя в таком случае обламывалось бы все еще в методе initialize()). Пришлете доступы, изучу детальней. P.s.: c Gallery пришлось попрощаться, так как я не нашел как сменить ее медиаресурс на Dropbox. В системных настройках gallery.mediaSource. Но попрощаться видимо все равно придется. Что интересно, в Gallery из управления альбомами картинки создаются в Dropbox и удаляются, но затык именно в получении превьющки. Gallery юзает свой собственный не class-based процессор для этого, который не учитывает различные типы источников файлов. Если его в этом прокачать, то все будет робить как положено :) Но пока MIGX в этом плане более продвинутый получается. Собственно, я все чаще для галерей использую именно мигу, а не Gallery. Gallery годится именно для создания и вывода нескольких галерей на одной странице, но если задача на странице выводить только ее галерею, то мига здесь лучше подходит, так как выбирать в TV-Gallery определенную галерею именно для этого документа как минимум не удобно.
спасибки — девать некуда, в отличии от донейтов. Это уж точно :) Добавляю $d= $modx->getObject('myClass',1); — работает! Куда именно добавляешь? И выложи полный листинг твоего процессора и скрин файловой структуры твоего компонента, чтобы было видно что и как у тебя там лежит.
Да и если require в процессоре не верно прописан — ошибка об этом вылезает.