Перезагрузить страницу при сохр. ресурса в админке
Добрый день!
Подскажите, как можно перезагрузить страницу при сохранении ее в админке, также как это происходит при первом сохранении ресурса.
Т.е. при первом сохранении ресурса MODx перегружает страницу, а при последующих — только лишь отправляет ajax запрос на ее обновление. Вот тут мне и нужно при определенных условиях заставить MODx перезагрузить страницу, так как я в плагине в этот момент изменяю поля ресурса и эти изменения не видны.
Подскажите, как можно перезагрузить страницу при сохранении ее в админке, также как это происходит при первом сохранении ресурса.
Т.е. при первом сохранении ресурса MODx перегружает страницу, а при последующих — только лишь отправляет ajax запрос на ее обновление. Вот тут мне и нужно при определенных условиях заставить MODx перезагрузить страницу, так как я в плагине в этот момент изменяю поля ресурса и эти изменения не видны.
Комментарии: 14
Только разбираться с ExtJS и подгружать свой скрипт при загрузке страницы.
Ну а свой скрипт должен вклиниваться в скрипт страницы и перехватывать обработчик сохранения.
Нетривиальная задача, в общем.
Ну а свой скрипт должен вклиниваться в скрипт страницы и перехватывать обработчик сохранения.
Нетривиальная задача, в общем.
Осталось разобраться с ExtJs.
В принципе у меня custom tv, и в html код я могу написать любой скрипт.
Перезагрузить страницу я могу так:
В принципе у меня custom tv, и в html код я могу написать любой скрипт.
Перезагрузить страницу я могу так:
MODx.loadPage('index.php?bla-bla-bla);
И это действие должно висеть на событии, возникающем после сохранения ресурса. Это мне сейчас не под силу =) Не писал на extjs ничего.
Тут в этом и прикол, что надо найти и перезаписать функцию обработки ответа в форме ресурса.
Если ничего не путаю — вот это место, которое надо изменить плагином.
То есть, надо по Ext.onReady() делать перезапись MODx.panel.Resource.success() — но я так не пробовал, наверняка будут разные грабли.
Разбираться дальше, извини, некогда.
Если ничего не путаю — вот это место, которое надо изменить плагином.
То есть, надо по Ext.onReady() делать перезапись MODx.panel.Resource.success() — но я так не пробовал, наверняка будут разные грабли.
Разбираться дальше, извини, некогда.
Вопрос автора актуален и для меня.
Может быть уже нашлось решение?
Может быть уже нашлось решение?
Неа, мне оно не известно…
Нашел вот такое решение
Но у меня не получилось повесить этот код на событие OnDocFormSave. Плагин запускается, но скрипт не выполняется.
Есть подозрения, что скрипт не регистрируется
<?php
$modx->regClientStartupHTMLBlock('
<script type="text/javascript">
Ext.override(MODx.panel.Resource, {
originalSuccess: MODx.panel.Resource.prototype.success
,success: function(o) {
this.originalSuccess(o);
var tv = Ext.get("tv1").dom.value;
if (tv && tv == "1") {
MODx.loadPage(location.href);
}
}
});
</script>
');
Но у меня не получилось повесить этот код на событие OnDocFormSave. Плагин запускается, но скрипт не выполняется.
Есть подозрения, что скрипт не регистрируется
Ну и наворочено. Не уверен, что пример рабочий. Вот простейший рабочий вариант с примером изменения поля
<?php
switch ($modx->event->name) {
case 'OnDocFormPrerender':
$modx->controller->addHTML('
<script type="text/javascript">
Ext.ComponentMgr.onAvailable("modx-panel-resource", function (e) {
var res = Ext.getCmp("modx-panel-resource");
res.on("beforeSubmit", function(){
// Меняем зачение поля longtitle
Ext.getCmp("modx-resource-longtitle").setValue("Новое значение");
});
res.on("success", function(){
// Перезагрузка страницы после сохранения
location.reload();
});
});
</script>');
break;
}
Не-не-не.
Лично меня интересует изменение значение твшки на событие OnDocFormSave.
Значение-то изменяется, но вот юзер этого после сохранения не видит.
В принципе, я бы мог на это забить, но измененное значение должно блокировать повторный запуск плагина. А если юзер не перезагрузит страницу после сохранения, то он сможет сколько угодно раз запустить плагин, ведь он будет каждый раз посылать старое значение твшки
Лично меня интересует изменение значение твшки на событие OnDocFormSave.
Значение-то изменяется, но вот юзер этого после сохранения не видит.
В принципе, я бы мог на это забить, но измененное значение должно блокировать повторный запуск плагина. А если юзер не перезагрузит страницу после сохранения, то он сможет сколько угодно раз запустить плагин, ведь он будет каждый раз посылать старое значение твшки
Тогда производи изменение на событии OnBeforeDocFormSave.
Принцип таков: если необходимо только изменить значение, то простой плагин на OnBeforeDocFormSave. Если изменить значение после сохранения, то плагин на 2 события:
1. OnDocFormSave для фактического изменения значения
2. OnManagerPageBeforeRender для встраивания скрипта на страницу в админке.
Сергей, подскажи, пжл, второе событие я правильно указал?
1. OnDocFormSave для фактического изменения значения
2. OnManagerPageBeforeRender для встраивания скрипта на страницу в админке.
Сергей, подскажи, пжл, второе событие я правильно указал?
Не успел, ниже уже ответили.
Событие OnManagerPageBeforeRender будет регистрировать скрипт для любого объекта (ресурса, чанка, сниппета), а нужно только для ресурса. Тут подойдет событие OnDocFormPrerender.
В примере моего плагина 2 javacript события — beforeSubmit и success. Если задействовать первое, то второе не нужно. Потому что, во-первых, изменения уже видны в интерфейсе (обновлять страницу не нужно) и, во-вторых, новые значения запишутся в базу (не надо их ловить в OnDocFormSave). Для знатоков яваскрипт не составит труда обработать и ТВшки. Этот вариант более интерактивный.
Ну а если таких знаний не хватает, то подойдет вариант ниже — в OnDocFormSave (можно в OnBeforeDocFormSave) меняются значения ТВ, а в яваскрипте, подключенным в OnDocFormPrerender, обновляется страница. Этот вариант проще.
Событие OnManagerPageBeforeRender будет регистрировать скрипт для любого объекта (ресурса, чанка, сниппета), а нужно только для ресурса. Тут подойдет событие OnDocFormPrerender.
В примере моего плагина 2 javacript события — beforeSubmit и success. Если задействовать первое, то второе не нужно. Потому что, во-первых, изменения уже видны в интерфейсе (обновлять страницу не нужно) и, во-вторых, новые значения запишутся в базу (не надо их ловить в OnDocFormSave). Для знатоков яваскрипт не составит труда обработать и ТВшки. Этот вариант более интерактивный.
Ну а если таких знаний не хватает, то подойдет вариант ниже — в OnDocFormSave (можно в OnBeforeDocFormSave) меняются значения ТВ, а в яваскрипте, подключенным в OnDocFormPrerender, обновляется страница. Этот вариант проще.
Во время OnDocFormSave страница редактирования уже сформирована и отдана пользователю, кроме того, он ей уже воспользовался. Вставить скрипт на сформированную страницу не получится.
Так что надо использовать OnDocFormPrerender и уже самом JS скрипте переопределять функции, которые отвечают за обработку ответа сервера.
Так что надо использовать OnDocFormPrerender и уже самом JS скрипте переопределять функции, которые отвечают за обработку ответа сервера.
Сделал, как посоветовал Илья. Повесил регистрацию js на OnDocFormPrerender
А все остальное – на OnDocFormSave
И получилось! Страница перезагружается после срабатывания плагина.
А все остальное – на OnDocFormSave
И получилось! Страница перезагружается после срабатывания плагина.
Сделал, как посоветовал Илья. Повесил регистрацию js на OnDocFormPrerenderА разве в плагине в третье строчке не это событие указано?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.