Пытаюсь добавить поле БД и 2 метода к модулю User, не получается
До этого редактировал напрямую User.mapper.class.php и User.entity.class.php в движке, захотел от этого избавиться, сделал по образцу плагина l10n:
plugins/sport/classes/hooks/HookSport.class.php:
plugins/sport/classes/modules/modules/user/User.class.php:
Определяю 2 новых метода:
plugins/sport/classes/modules/modules/user/entity/User.entity.class.php:
Пытаюсь поменять значение в БД(поле создается при активации плагина):
plugins/sport/classes/modules/modules/user/mapper/User.mapper.class.php:
И ничего не происходит. Смущает то, что в плагине l10n нигде не определены функции getUserLang и setUserLang, возможно, они должны как-то автоматически определяться, что-ли? В чем м.б. ошибка?
plugins/sport/classes/hooks/HookSport.class.php:
<?php
class PluginSport_HookSport extends Hook {
public function RegisterHook ()
{
$this->AddHook('template_form_registration_end','RegEnd',__CLASS__);
$this->AddHook('template_form_settings_profile_end','RegEnd',__CLASS__);
$this->AddHook('template_menu_topic_action','TopicMenu',__CLASS__);
//обновляем новые поля при регистрации и редактировании профиля
$this->AddHook('module_user_add_after', 'ModuleUserAddAfter', __CLASS__);
$this->AddHook('module_user_update_after', 'ModuleUserAddAfter', __CLASS__);
}
public function TopicMenu () {
return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__).'menu_end.tpl');
}
public function RegEnd () {
if(Router::GetActionEvent()=='profile')
{
$oUser=$this->User_GetUserCurrent();
$sport = $oUser->getSport();
$sarr = explode(' ',$sport);
if(in_array('football',$sarr))
$this->Viewer_Assign('football','true');
if(in_array('basketball',$sarr))
$this->Viewer_Assign('basketball','true');
if(in_array('volleuball',$sarr))
$this->Viewer_Assign('volleuball','true');
if(in_array('hockey',$sarr))
$this->Viewer_Assign('hockey','true');
}
return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__).'reg_end.tpl');
}
public function ModuleUserAddAfter()
{
$oUser=$this->User_GetUserCurrent();
$sports = getRequest('sports');
$res = implode(" ",$sports);
$oUser->setSport($res);
$this->PluginSport_User_UpdateUserSport($oUser);
}
}
?>
plugins/sport/classes/modules/modules/user/User.class.php:
<?php
/**
* Модуль User плагина sport
*/
class PluginSport_ModuleUser extends Module {
/**
* Метод инициализации модуля
*
* @return void
*/
public function Init() {
}
/**
* Сохранить поле sport пользователя
*
* @param ModuleUser_EntityUser $oUser
* @return boolean
*/
public function UpdateUserSport(ModuleUser_EntityUser $oUser) {
return Engine::GetMapper(__CLASS__)->UpdateUserSport($oUser);
}
}
Определяю 2 новых метода:
plugins/sport/classes/modules/modules/user/entity/User.entity.class.php:
<?php
class PluginSport_ModuleUser_EntityUser extends Entity {
public function getSport() {
if(isset($this->_aData['user_profile_sport']))
return $this->_aData['user_profile_sport'];
else
return null;
}
public function setSport($data) {
$this->_aData['user_profile_sport']=$data;
}
}
?>
Пытаюсь поменять значение в БД(поле создается при активации плагина):
plugins/sport/classes/modules/modules/user/mapper/User.mapper.class.php:
<?php
/**
* Маппер User модуля User плагина Sport
*/
class PluginSport_ModuleUser_MapperUser extends Mapper {
/**
* Сохранить настройки пользователя
*
* @param ModuleUser_EntityUser $oUser
* @return boolean
*/
public function UpdateUserSport(ModuleUser_EntityUser $oUser) {
$sql = 'UPDATE
' . Config::Get('db.table.user') . '
SET
user_profile_sport = ?
WHERE
user_id = ?d';
$this->oDb->query($sql, $oUser->getSport(), $oUser->getId());
return true;
}
}
И ничего не происходит. Смущает то, что в плагине l10n нигде не определены функции getUserLang и setUserLang, возможно, они должны как-то автоматически определяться, что-ли? В чем м.б. ошибка?
2 комментария