Пытаюсь добавить поле БД и 2 метода к модулю User, не получается

До этого редактировал напрямую User.mapper.class.php и User.entity.class.php в движке, захотел от этого избавиться, сделал по образцу плагина l10n:
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 комментария

avatar
Почитайте про наследование
  • xyz
  • 0
avatar
Спасибо, всё получилось.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.