JTable - Как узнать, какие поля обновляются

Я создаю специальный компонент для продажи билетов, где мне нужно отслеживать действия пользователей. Например, если пользователь создал билет, он должен получить сохранение в таблице истории. Предположим, что пользователь хочет обновить одно из полей (предположим, что он является предметом билета), он может просто отредактировать тему в форме и нажать кнопку отправки будет стрелять JTable->save($data), что приведет к сохранению соответствующего поля (в данном случае это Subject)

Мой вопрос: как узнать, какие поля обновляются в базе данных?

Я получу эти поля и сохраню в базе данных следующим образом:

  

Джон Доу изменил Предмет Билета 05/19/2015

     

John Doe создал билет на 05/19/2015

Нужно ли писать плагин для этого? Я не ожидаю наличия кода. Мне просто помог маленький пинок.

2 голоса | спросил Sahil Purav 20 Maypm15 2015, 18:39:28

1 ответ


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 и создайте нужные функции ведения журнала /ведения журнала.

ответил Riccardo Zorn 27 Mayam15 2015, 00:00:24

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132