Добрый день. У меня стоит MODX revo 2.2.9, Ace, AjaxManager. В настройках я убрал расширение '.html' у документов. При редактировании ресурса в modxsdk ace нормально включается, подсвечивает синтаксис и т.п., но при редактировании документа штатными средствами MODX открывается голый редактор (без ace). Обновление страницы не помогает. Может, кто решал подобную проблему? Подобное возникает и при использовании TinyMCE (включается после перезагрузки из-за ajaxmanager), но в случае с Ace не помогает и перезагрузка. P.S.: Пробовал добавить в плагин на событие OnFileEditFormPrerender пустое расширение — не помогло.

Точно нет :-) Но в любом случае, плагин выключен. Надо включать и все.

А там была проверка прав? Я просто думал, что нет :)

Ты про время генерации страницы? Так там же есть плагин memory_get_usage. Активировал его и все. Только если для всех надо, то закомментировать проверку прав.

А логи загрузки страницы по памяти и времени выводятся? Тоже было бы не лишним.

Кстати, с обновлением процессоров маленькая хитрость: активируйте плагин Debug, и на странице будете видеть вот такие уведомления (только когда авторизованы в админке или во фронте как админ): ?

Так и знал, что прозвучит))) К сожалению, там не так было важно и интересно, чтобы потратить пару часов на обработку видео. Поэтому не стал выкладывать. А нумерацию не стал сбивать чисто для себя.

  • И немного интриги))))

?Вышла новая сборка магазина ShopModxBox-2.1.0-beta. Список изменений Обновлен пакет shopModx до версии 0.2.0-beta. Добавлено TV-поле keywords. Теперь легко можно указать ключевые слова для документа. Полностью переписан класс modMgrOrdersProductsAddProcessor компонента billing. Удален метод getInstance(). Теперь логика вызова Add- или Create- процессора выполнена прям в методе process() текущего класса. Это позволяет гораздо легче расширять логику на уровне классов. Улучшен компонент basket: Механизм корзины полностью переписан на основе базы данных. В сессии хранится только id заказа, и то исключительно для того, чтобы поддерживать механизм корзины для неавторизованных пользователей. Если пользователь авторизованный, то будет автоматически получен id его актуальной корзины. В остальном все данные хранятся в базе данных. Созданы новые basket/web/orders/update и basket/web/orders/status/update процессоры. В update-процессоре прописана проверка, действительно ли данный заказ принадлежит текущему пользователю. Переписан процессор очистки корзины. Теперь дополнительно еще проверяется, чтобы статус корзины (заказа) был только 1 — то есть новый. После того, как он оформлен, ее уже нельзя очистить. В дальнейшем еще будет дописан процессор orders/cancel, чтобы пользователь имел возможность отменить уже оформленный заказ, но не взятый в работу менеджерами. Все процессоры теперь не в папке processors/, а в папке processors/basket/. Это необходимо, чтобы не было конфликтов имен классов с процессорами других компонентов (например биллинга). Дело в том, что механизм MODX-а устроен так, что лучше использовать автоматически создаваемые имена классов (MODX имена генерирует). И если у нас процессоры будут лежать в одинаковых папках, но в разных модулях, то имена классов могут совпасть, и будет фатальная php-ошибка. А там процессоры именуются по маске modBasketWeb… и modBasketMgr... Старые процессоры оставлены для обратной совместимости, но они все помечены как _depricated. От их использования необходимо отказываться, изменив пути в вызовах процессоров. Обновляется basket простой заменой файлов. Различные багфиксы и мелкие улучшения. Значительно улучшенный модуль оформления заказов. подробности по нему смотрите в записи с прошлого вебинара. Под катом подробная инструкция по обновлению существующих магазинов на ShopModxBox-2.0.1-beta. Обновление работающего сайта на ShopModxBox-2.0.1 Через пакет ShopModxBox не обновить, так как это пакет всего сайта, и он затрет текущую версию сайта. Тем не менее я приложил максимум усилий для обратной совместимости со старой версией и чтобы легко было обновить существующий сайт. В целом цель достигнута, как правило за счет вот подобных замен старых процессоров: require_once dirname(dirname(dirname(dirname(FILE)))) . '/basket/web/orders/empty.class.php';

class modEmptyProcessor_depricated extends modBasketWebOrdersEmptyProcessor{}

class modEmptyProcessor extends modEmptyProcessor_depricated{

public function initialize(){
    
    $this->modx->log(xPDO::LOG_LEVEL_ERROR, "[- Basket -] Class '". __CLASS__ ."' is depricated. ".__FILE__.":".__LINE__);
    
    return parent::initialize();
}

}

return 'modEmptyProcessor'; Здесь сразу и обозначение, что он устаревший, и сохранение старого названия (на случай, если вы где-то его переопределили и явно указали имя класса, и чтобы переименование процессора не привело к фатальной ошибке), и сразу логирование в MODX, что процессор устарел, и что от него надо избавляться. Процесс избавления очень просто: в том месте, где вызывается этот процессор, меняете вызываемый процессор на актуальный, то есть тот, который расширяет depricated (да, меня уже поправляли, что правильно deprecated, но сейчас буду писать так, как в коде, чтобы не путать. В новой версии переименую или удалю нафиг :-) ). В нашем случае это modBasketWebOrdersEmptyProcessor. Путь к нему указан выше. Итак, перейдем непосредственно к процессу обновления. 1. Обновите пакет shopModx до последней версии. Текущая актуальная версия — shopModx-0.2.0-beta. Это необходимо сделать, так как если не сделать, то процессор modxsite/processors/web/getdata.class.php почти наверняка развалится по причине того, что новый процессор требует метода в родительском процессоре, который появился как раз в shopModx-0.2.0. 2. Скачайте и распакуйте у себя git-репозиторий ShopModxBox Да, мы выложили гит-репозиторий сборки :-) Адрес: https://github.com/Fi1osof/ShopModxBox Конечно, это не вся сборка, а только самые основные пакеты (basket, billing, modxsite), и то не установочные, а только их файлы, тем не менее это во-первых, позволит мне же гораздо проще тыкать в нужную строчку кода, чтобы показать где что происходит, а во вторых у нас сборка на 98% основывается на файлах (процессоры, xPDO-объекты и т.п.), так что всегда можно будет их репозитория быстро обновиться. Если вы умеете работать с гитом, то конечно же лучше всего как раз делать клон проекта. Но если нет, или какие-то сложности, то можно и просто скачать zip-архив репозитория. ? 3. Залейте поверх новые файлы Целевые папки: assets/componensts/basket/ core/components/basket/ core/components/billing/ core/components/modxsite/ (Убедитесь, что у вас не используется default шаблон. Переименуйте его в core и в assets и укажите смените настройку шаблона в modxSmarty). 4. Добавьте новый MODX-сервис basket. Для этого в консоли выполните следующий код: <?php $modx->removeExtensionPackage('basket'); $modx->addExtensionPackage('basket', '[[++core_path]]components/basket/model/', array( "serviceName" =>"basket", "serviceClass"=>"Basket", )); Теперь у вас всегда будет доступен новый объект-сервис компонента basket. Пока в нем мало что есть, но как минимум есть следующее: $modx->basket->getActiveOrderID(); То есть в любом месте можно получить id текущей корзины (именно новой, не оформленной корзины, которую набивает пользователь товарами). 5. Добавьте в свой Smarty-шаблон новые шаблоны писем В новом модуле оформления заказов появились отдельные письма для конечных пользователей, и для менеджеров. Эти письма отправляются, когда пользователь оформляет заказ на сайте. Скопируйте в свой Smarty-шаблон папку core/components/modxsite/templates/default/message Там два шаблона: contractor.tpl и manager.tpl 6. Обновите вызовы старых процессоров. После обновления скорее всего вам в MODX-логи начнут сыпаться сообщения по поводу устаревших процессоров. Я про это написал выше. Просто обновите вызовы этих процессоров. UPD: Нашел место, где параметр один старый потерян. То есть он устаревший, но вот надо шаблон поправить. Шаблон shop/basket/overview/index.tpl Надо заменить $object.order_price на $object.price, и значение key подправить gist.github.com/Fi1osof/ed7d055071b2e80fd84e/revisions Это на странице просмотра корзины. 7. Подредактировать плагин basket. Там появились две переменные: $basket_processor и $basket_namespace. В параметрах этого процессора надо указать basket/web/public/action и basket соответственно. ? Эти параметры для того, чтобы можно было изменить вызываемый роутер-класс. Вот, собственно, и все. Обновление прошло :-) Если у кого-то возникнут сложности, пишите прям здесь. P.S. Если кому помогает наша работа, не стесняйтесь слать донейты ;-) Больше донейтов — больше нашей занятости над сборкой. Координаты указаны в верхнем правом углу.

Ну собственно, первый и самый логичный вопрос: а где вторая часть?)