JTable - Как узнать, какие поля обновляются
Я создаю специальный компонент для продажи билетов, где мне нужно отслеживать действия пользователей. Например, если пользователь создал билет, он должен получить сохранение в таблице истории. Предположим, что пользователь хочет обновить одно из полей (предположим, что он является предметом билета), он может просто отредактировать тему в форме и нажать кнопку отправки будет стрелять JTable->save($data)
, что приведет к сохранению соответствующего поля (в данном случае это Subject)
Мой вопрос: как узнать, какие поля обновляются в базе данных?
Я получу эти поля и сохраню в базе данных следующим образом:
Джон Доу изменил Предмет Билета 05/19/2015
John Doe создал билет на 05/19/2015
Нужно ли писать плагин для этого? Я не ожидаю наличия кода. Мне просто помог маленький пинок.
1 ответ
Ваш вопрос не совсем корректен.
Кнопка отправки вызывает метод save()
на контроллере. Вы можете узнать правильный контроллер, проверив поле задачи формы
<input name="task" value="controllername.save" />
, или он может быть в параметре атрибута action
формы
<form action="index.php?option=com_component&task=controllername.save">
Теперь откройте controllername.php
и найдите save()
.
Там вы найдете экземпляр модели; в случае, если это неявно, например
$this->getModel()
найдите модель, названную как контроллер. В противном случае имя будет прописано.
Откройте модель и найдите функцию save()
. Скорее всего, он получит экземпляр объекта JTable
, затем вызовет save()
на нем.
Теперь, в самом начале функции save()
в вашей модели, вы получите новые данные и еще не базы данных.
Если это изменение, будет установлено поле id
, иначе в случае новой записи оно будет 0 или null.
Если код id
действителен, запросите базу данных для текущих значений, то есть
$oldValues = $db->setQuery('select * from #__tablename where id='.$db->quote($id))->loadObject();
Посмотрите вниз на функцию и найдите место, где вызывается $someTableInstance.save()
, и проверьте результат. Если это удается, редактирование было успешным.
Теперь вы можете проверить предыдущие данные, хранящиеся в $oldValues
, сравнить его с содержимым $data
и создайте нужные функции ведения журнала /ведения журнала.