Как в админке с помощью ExtJS отследить изменение значения TV и поменять его сразу или перезагрузкой стараницы?
Есть плагин изменения значения tv при определенных условиях.
Пробовал так, при изменении значения TV присваивать переменной значение true ($a=true;) и передать значение переменной в код с событием OnDocFormPrerender для проверки, но ничего не выходит.
Нужно чтобы при изменении значения определенного tv поля в плагине на событие 'OnDocFormSave' значение tv сразу менялось в инпуте в админке.
А то получается, что значение поля изменено, а в инпуте этого TV поля остается старое значение. И получается, что так до бесконечности можно изменять, а значение в инпут будет старое, и при сохранении ресурса будет опять меняться в базе, а в инпут оставаться старое… пока не перезагрузишь страницу Ctrl+F5
Подскажите как правильно реализовать сию задумку?
Заранее. благодарю!
if ($modx->event->name == 'OnDocFormSave' && $mode != 'new') {
//куча условий
//.......
// меняем значение TV
$resource->setTVValue('my_tv', 'Новое значение');
//...
}
//перезагружает страницу в админке при каждом сохранении ресурса
//НЕ пойму как сделать, чтобы перезагружалось только при изменении значения TV
if ($modx->event->name == 'OnDocFormPrerender' && $mode != 'new') {
$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(){
//Перезагрузка страницу после сохранения
location.reload();
});
});
</script>');
}
Данная конструкция перезагружает страницу в админке при каждом сохранении ресурса, НЕ пойму как сделать, чтобы перезагружалась только при изменении значения TV… Не могу передать значение переменной из кода на событие OnDocFormSave в код на событие OnDocFormPrerender, представляется, что это невозможно...Пробовал так, при изменении значения TV присваивать переменной значение true ($a=true;) и передать значение переменной в код с событием OnDocFormPrerender для проверки, но ничего не выходит.
Нужно чтобы при изменении значения определенного tv поля в плагине на событие 'OnDocFormSave' значение tv сразу менялось в инпуте в админке.
А то получается, что значение поля изменено, а в инпуте этого TV поля остается старое значение. И получается, что так до бесконечности можно изменять, а значение в инпут будет старое, и при сохранении ресурса будет опять меняться в базе, а в инпут оставаться старое… пока не перезагрузишь страницу Ctrl+F5
Подскажите как правильно реализовать сию задумку?
Заранее. благодарю!
Комментарии: 17
А разве событие OnDocFormPrerender не раньше срабатывает?
Раньше, запускается до загрузки формы редактирования ресурса в менеджере и регистрируется ExtJS.
Тогда не понятна логика
Не могу передать значение переменной из кода на событие OnDocFormSave в код на событие OnDocFormPrerenderКак можно передать из кода, который выполняется позже в код, который выполняется раньше?
Это я в качестве примера указал, а так видимо отслеживать изменение полей надо на ExtJS, но документации по MODX ExtJS нет, как и примеров.
Поменял заголовок вопроса, кто знаком с MODX ExtJS, прошу помочь!
Как в админке с помощью ExtJS отследить изменение значения TV и поменять его сразу или перезагрузкой стараницы?
Как в админке с помощью ExtJS отследить изменение значения TV и поменять его сразу или перезагрузкой стараницы?
Повесь отдельный js на инпут и отслеживай изменение, а дальше по обстоятельствам… либо меняй значение, либо перезагружай страницу.
По ExtJs куча документация на офф сайте docs.sencha.com/extjs/3.4.0/
По ExtJs куча документация на офф сайте docs.sencha.com/extjs/3.4.0/
Повесь отдельный js на инпут и отслеживай изменение, а дальше по обстоятельствам… либо меняй значение, либо перезагружай страницу.Сомневаюсь, что обычным js это получится, так как сами изменения происходят не в инпут, а в базе (как я понимаю). А в инпуте происходят изменения как раз после перезагрузки страницы.
По ExtJs куча документация на офф сайте docs.sencha.com/extjs/3.4.0/Да офф документация есть, но документации именно по MODX ExtJs нет. И как применить это все к MODX никак не могу разобраться.
Если нужно изменить TV во время сохранения (в базе), думаю это событие подойдет OnDocFormSave. По событиям гуглится на ура, например pitrooo.ru/note/modx-plaginyi-i-sobyitiya-dlya-nix-(events).html
Если нужно на лету подменять значение, то js в помощь
Если нужно на лету подменять значение, то js в помощь
Если нужно изменить TV во время сохранения (в базе), думаю это событие подойдет OnDocFormSave. По событиям гуглится на ура, например pitrooo.ru/note/modx-plaginyi-i-sobyitiya-dlya-nix-(events).htmlТак у меня так и меняется, но изменение в админке не видно, значение TV в инпут изменяется только после перезагрузки страницы. Если страницу не перезагружать, то в инпут значение не меняется. Как в этом случае воспользоваться событием js или jquery на изменение.
Например
$("#tv10").on("input",function() {
console.log($("#tv10").val());
});
будет отслеживать в реальном времени при вводе в инпут, но никак не будет отслеживать изменение значения в базе.Если нужно на лету подменять значение, то js в помощь
можно пример. применительно к поставленной задаче…
$("#tv10").on(«input»,function() {
console.log($("#tv10").val());
});
вместо консоль лога, делай запрос на самописный контроллер и проверяй то что нужно изменить, очень извращенный вариант)))
лучше напиши задачу полностью, может есть более элегантное решение
console.log($("#tv10").val());
});
вместо консоль лога, делай запрос на самописный контроллер и проверяй то что нужно изменить, очень извращенный вариант)))
лучше напиши задачу полностью, может есть более элегантное решение
вместо консоль лога, делай запрос на самописный контроллер и проверяй то что нужно изменить, очень извращенный вариант)))так это будет меняться только при ручном вводе в инпут
лучше напиши задачу полностью, может есть более элегантное решениеНужно чтобы при изменении значения определенного tv поля в плагине на событие 'OnDocFormSave' значение tv сразу менялось в инпуте в админке.
А то получается, что значение поля изменено, а в инпуте этого TV поля остается старое значение. И получается. что так до бесконечности можно изменять, а значение в инпут будет старое, пока не перезагрузишь страницу Ctrl+F5
А попробуйте в скрипте вместо события beforeSubmit
поставить submit
поставить submit
А попробуйте в скрипте вместо события beforeSubmitЭто ничего не даст.
поставить submit
Неужели в MODX ExtJS все настолько запутано, и никто в нем не разбирается, что уже 3 суток знающих не находится?
Пример кода, вводишь что-то в одной TV, это значение автоматом в другую дублируется:
Другие события можно тут подсмотреть — docs.sencha.com/extjs/3.4.0/#!/api/Ext.form.TextField
Ext.onReady(function () {
let tv1 = Ext.get('tv17');
// console.log(tv1);
tv1.on('keyup', function() {
let tv2 = Ext.get('tv18');
// console.log(tv2);
tv2.dom.value = this.dom.value;
});
});
Другие события можно тут подсмотреть — docs.sencha.com/extjs/3.4.0/#!/api/Ext.form.TextField
Благодарю, но немного не то.
Задача отловить изменение значения TV при сохранении ресурса и передать новое значение скрипту, а не отлавливать ввод с клавиатуры в одно поле с тем чтобы значение менялось в другом
Задача отловить изменение значения TV при сохранении ресурса и передать новое значение скрипту, а не отлавливать ввод с клавиатуры в одно поле с тем чтобы значение менялось в другом
Пока получилось добиться следующего.
Значение поля меняется сразу после сохранения без перезагрузки страницы. Вставляется сразу значение и оно видно в поле, исключение TV поле типа image, так как в image вставляется вначале в скрытое поле (как сделать чтобы в TV типа image значение сразу было видно в поле, пока не понял).
Значение вставляется, однако это значение получено из базы до изменения (то есть старое значение), поскольку событие «OnDocFormPrerender» происходит до загрузки формы редактирования ресурса в менеджере и скрипт регистрируется со старым значением.
Проблемы (задачи/вопросы).
1. Как отловить изменение значения при сохранении ресурса и передать новое значение скрипту, не могу понять. Ведь как-то, думаю, на ExtJS можно отловить это событие (изменение значения при сохранении ресурса «OnDocFormSave») и передать уже зарегистрированному скрипту???
2. Как сделать, чтобы в TV поле типа image вставляемое скриптом значение сразу становилось видимым?
А пока данный кодом можно воспользоваться (может кому пригодиться), если нужно вставить при сохранении ресурса значение из одного TV поля в другое, при этом значение сразу видно в админке и сохраняется в базе.
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(){
// Меняем зачение TV поля
Ext.get("tv45").dom.value = "'.$resource->getTVValue(6).'";
});
});
</script>');
break;
}
Значение поля меняется сразу после сохранения без перезагрузки страницы. Вставляется сразу значение и оно видно в поле, исключение TV поле типа image, так как в image вставляется вначале в скрытое поле (как сделать чтобы в TV типа image значение сразу было видно в поле, пока не понял).
Значение вставляется, однако это значение получено из базы до изменения (то есть старое значение), поскольку событие «OnDocFormPrerender» происходит до загрузки формы редактирования ресурса в менеджере и скрипт регистрируется со старым значением.
Проблемы (задачи/вопросы).
1. Как отловить изменение значения при сохранении ресурса и передать новое значение скрипту, не могу понять. Ведь как-то, думаю, на ExtJS можно отловить это событие (изменение значения при сохранении ресурса «OnDocFormSave») и передать уже зарегистрированному скрипту???
2. Как сделать, чтобы в TV поле типа image вставляемое скриптом значение сразу становилось видимым?
А пока данный кодом можно воспользоваться (может кому пригодиться), если нужно вставить при сохранении ресурса значение из одного TV поля в другое, при этом значение сразу видно в админке и сохраняется в базе.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.