12.2 Расширение модулей
- 12.2.1 Mappers
12.2.1 Mappers
Часто бывает, что необходимо поменять некоторые вещи в коробочных модулях MZZ, например, модифицировать $map (todo: ссылка туда, где знают, что такое MAP объекта) или же просто добавить недостающий метод в маппер. В таком случае подойдет способ, описанный в этой главе, но он не очень удобен по ряду причин.
MZZ предлагает немного иной подход к проблеме переопределения частей модуля в приложениях. Рассмотрим его на примере модуля user.
Мы имеем userMapper.php следующего содержания (тело класса скрыто, весь листинг вы можете посмотреть, открыв файл <MZZ>/system/modules/user/mappers/userMapper.php):
class userMapper extends mapper { /* ... */ } ?>
И мы хотим переопределить этот маппер с целью добавить новый метод searchAllLastLoggedIn — метод, возвращающий нам всех пользователей, которые
приходили на сайт не ранее заданной даты
Для реализации этой идеи достаточно создать файл в каталоге <project>/modules/user/mappers/appUserMapper.php, где <project> это путь до
вашего приложения (опция systemConfig::$pathToApplication), а appUserMapper.php — новое имя маппера, которое
было образовано путем добавления приставки app к базовому имени маппера. Префикс app в данном случае является стандартным и одинаковым для всех переопределяемых мапперов.
appUserMapper.php будет выглядеть примерно так:
fileLoader::load('modules/user/mappers/userMapper'); class appUserMapper extends userMapper { public function searchAllLastLoggedIn($time) { $criteria = new criteria; $criteria->where('last_login', $time, criteria::GREATER); return $this->searchAllByCriteria($criteria); } }
Несложно догадаться, что теперь можно добавлять, переопределять любые методы и свойства базового маппера userMapper