Joomla postSaveHook set jform

Я занят функцией перемещения изображения, поэтому я переопределяю некоторые функции контроллера, и, к сожалению, мне нужен идентификатор элементов для имени изображения, поэтому я изменил форму save() на postSaveHook(), поскольку я не смог получить идентификатор элемента в save() но теперь я сталкиваюсь с другой проблемой, я не могу задать данные формы для недавно переименованного изображения.

Здесь код:

public function postSaveHook($model, $validData){
 $item = $model->getItem();
 $id = $item->get('id');

 $path = JPath::clean(JPATH_SITE. DS ."images". DS ."menu_slider". DS );

 $input=JFactory::getApplication()->input;
 $input->get('jform', NULL, NULL);

 $src_image = $this->moveOriginal($path,$id);

 $imageTest = $this->findImages($src_image);

 if(!empty($imageTest)){
 foreach($imageTest as $images){
 $this->createImageSlices($images,$src_image,$path);
 }
 }else{
 echo 'all images are there';
 }
 /*this part no longer works*/
 $data = JRequest::getVar( 'jform', null, 'post', 'array' );
 $data['image'] = 'images'.DS.'menu_slider'.DS.'original'.DS.$src_image;
 $input->post->set('jform',$data);

 return parent::postSaveHook($model, $validData);
}

есть все равно, я могу сохранить данные из этого? или если я вернусь назад, чтобы сохранить, как бы получить идентификатор?

Любая помощь очень ценится.

1 ответ

Я пробовал разные способы, и самым безопасным для меня способом было добавить следующий код в модель

class DPCasesModelCase extends JModelAdmin {

 public function save($data) {
 new EventHandler(JDispatcher::getInstance(), $this);
 return parent::save($data);
 }
}

class EventHandler extends JEvent {

 private $model = null;

 public function __construct(&$subject, $model) {
 parent::__construct($subject);

 $this->model = $model;
 }

 public function onContentChangeState($context, $pks, $value) {
 if ($context != 'com_dpcases.case' && $context != 'com_dpcases.form') {
 return;
 }

 if (! is_array($pks)) {
 $pks = array($pks);
 }
 foreach ( $pks as $pk ) {
 $this->dowork($this->model->getItem($pk), 'edit');
 }
 }

 public function onContentAfterSave($context, $object, $isNew) {
 if ($context != 'com_dpcases.case' && $context != 'com_dpcases.form') {
 return;
 }

 $this->dowork($object, $isNew ? 'create' : 'edit');
 }

 private function dowork($object, $action) {
 ...
 }
}

licensed under cc by-sa 3.0 with attribution.