Вопрос: как вставить свои значения в форму редактирования, на наследуя Action (ответ найден)
и вот, почему:
для добавления поля, что бы не переопределять системные функции, пользуюсь хуками на ActionBlog.
все удобно, кроме одного момента:
при редактировании топика\блога вернуть в форму сохраненные плагином значения нельзя посредством хуков, т.к. blog_edit_before обрабатывается только при сабмите формы.
очень нехватает системного хука чуть выше по коду (или ниже, после else) для того, что бы можно было впихнуть $_REQUEST['myfield']='myvalue';
Согласитесь, наследвоать ActionBlog ради добавления одной строчки кода как-то не то, тем более, с учетом вероятных конфликтов с другими плагинами.
код под катом
для наглядности, вот код проблемной функции ActionBlog
protected function EventEditBlog() {
/**
* Меню
*/
$this->sMenuSubItemSelect='';
$this->sMenuItemSelect='profile';
/**
* Проверяем передан ли в УРЛе номер блога
*/
$sBlogId=$this->GetParam(0);
if (!$oBlog=$this->Blog_GetBlogById($sBlogId)) {
return parent::EventNotFound();
}
/**
* Проверяем тип блога
*/
if ($oBlog->getType()=='personal') {
return parent::EventNotFound();
}
/**
* Проверям авторизован ли пользователь
*/
if (!$this->User_IsAuthorization()) {
$this->Message_AddErrorSingle($this->Lang_Get('not_access'),$this->Lang_Get('error'));
return Router::Action('error');
}
/**
* Явлется ли авторизованный пользователь хозяином блога, либо его администратором
*/
$oBlogUser=$this->Blog_GetBlogUserByBlogIdAndUserId($oBlog->getId(),$this->oUserCurrent->getId());
$bIsAdministratorBlog=$oBlogUser ? $oBlogUser->getIsAdministrator() : false;
if ($oBlog->getOwnerId()!=$this->oUserCurrent->getId() and !$this->oUserCurrent->isAdministrator() and !$bIsAdministratorBlog) {
return parent::EventNotFound();
}
$this->Viewer_AddHtmlTitle($oBlog->getTitle());
$this->Viewer_AddHtmlTitle($this->Lang_Get('blog_edit'));
$this->Viewer_Assign('oBlogEdit',$oBlog);
/**
* Устанавливаем шалон для вывода
*/
$this->SetTemplateAction('add');
/**
* Если нажали кнопку "Сохранить"
*/
if (isPost('submit_blog_add')) {
/**
* Запускаем проверку корректности ввода полей при редактировании блога
*/
if (!$this->checkBlogFields($oBlog)) {
return false;
}
$oBlog->setTitle(getRequest('blog_title'));
/**
* Парсим описание блога на предмет ХТМЛ тегов
*/
$sText=$this->Text_Parser(getRequest('blog_description'));
$oBlog->setDescription($sText);
$oBlog->setType(getRequest('blog_type'));
$oBlog->setLimitRatingTopic(getRequest('blog_limit_rating_topic'));
//$oBlog->setUrl(getRequest('blog_url')); // запрещаем смену URL блога
/**
* Загрузка аватара, делаем ресайзы
*/
if (isset($_FILES['avatar']) and is_uploaded_file($_FILES['avatar']['tmp_name'])) {
if ($sPath=$this->Blog_UploadBlogAvatar($_FILES['avatar'],$oBlog)) {
$oBlog->setAvatar($sPath);
} else {
$this->Message_AddError($this->Lang_Get('blog_create_avatar_error'),$this->Lang_Get('error'));
return false;
}
}
/**
* Удалить аватар
*/
if (isset($_REQUEST['avatar_delete'])) {
$this->Blog_DeleteBlogAvatar($oBlog);
$oBlog->setAvatar(null);
}
/**
* Обновляем блог
*/
#Вот этот хук доступен только при сабмите формы
$this->Hook_Run('blog_edit_before', array('oBlog'=>$oBlog));
if ($this->Blog_UpdateBlog($oBlog)) {
$this->Hook_Run('blog_edit_after', array('oBlog'=>$oBlog));
Router::Location($oBlog->getUrlFull());
} else {
$this->Message_AddErrorSingle($this->Lang_Get('system_error'),$this->Lang_Get('error'));
return Router::Action('error');
}
} else {
#Это загружает значения в форму
/**
* Загружаем данные в форму редактирования блога
*/
$_REQUEST['blog_title']=$oBlog->getTitle();
$_REQUEST['blog_url']=$oBlog->getUrl();
$_REQUEST['blog_type']=$oBlog->getType();
$_REQUEST['blog_description']=$oBlog->getDescription();
$_REQUEST['blog_limit_rating_topic']=$oBlog->getLimitRatingTopic();
$_REQUEST['blog_id']=$oBlog->getId();
}
}
5 комментариев
надеюсь понятно обьяснил
собирает данные сохраненные сторонним плагином, по адресу _/profile/_login_/
Как вытащить через шаблонданные из таблицы?
Как я понимаю, только event'ом.
в примере выше файл HookProfession.class.php
в регистрации хуков отлавливаем нужный экшен или эвент или параметр
и выполняем обращение к модулю стороннего плагина
далее просто выводим в шаблон