Объясните путь данных от БД до Шаблона?

Простите, не знал, как правильно назвать, возможно уже всё есть, но не знаю ключевых слов.
У меня задача такая: есть доп.поле к юзеру. (Временно создал руками в БД).
Нужно его выводить в топике рядом с именем юзера.

Что сделал:
— User.entity.class.php
добавил функцию, коотрая забирает:
    public function getNick() {

        return $this->getProp('user_profile_nick');
    }


в шаблоне топика пытаюсь вывести (topic.type_default-show.tpl):
{$oUser->getNick()} 


Но я полагаю, что сначала данные из БД попадают в кэш или ещё куда-то ...проходят какие-то пути, прежде чем попасть в шаблон.

Объясните плз, что и где ещё нужно дописать, чтобы добиться вывода данных из БД в шаблоне и почему. Хочу понять методику.

9 комментариев

0
Вот добавил статью, наглядно поясняющую базовые принципы архитектуры движка: http://altocms.ru/1568.html

Если более конкретно отвечать на вопрос, то непосредственно с базой данных работает соответствующий компонент Mapper, и в случае с юзером это ModuleUser_MapperUser. И именно там есть методы для сохранения, обновления, получения и удаления данных юзера.

Но править код непосредственно движка — плохая практика. Для расширения функциональности надо использовать либо хуки, либо плагины.
0
Отдуши! Спасибо. Действительно, ведь при одновлении версии — мои правки затрутся. Спасибо ещё раз. Буду изучать
0
Добавлять ничего не нужно, если идет обращение к любому объекту сущности *Entity*, и в БД существует поле prefix_user_nick, сработает «магический» метод getNick() . Почему-то об этом на этом сайте никогда не писали. Выяснил опытным путем.
Отредактирован:
0
Можете конкретно написать, как и что Вы прописывали, а именно:идет обращение к любому объекту сущности *Entity*
0
Чтобы это работало $oUser->getNick() (где $oUser объект типа ModuleUser_EntityUser), нужно всего навсего добавить поле nick в таблицу prefix_user. Тогда обращение к объекту сущности $oUser через несуществующий метод getNick() будет движком преобразовано в правильные запросы к объекту и БД. Аля ORM. Тоже касается и всех прочих сущностей типа топика, и т.д. Имплементировать эти методы нет необходимости (если какая-то специальная логика не требуется).
Кстати зачем вам отдельное поле под ник, если есть login и profile_name и даже специальный параметр для getDisplayName() который говорит движку какой из них использовать в качестве ника?
Отредактирован:
0
Спасибо большое!
Как же всё просто, когда сделано для людей (я про альто).

Действительно 2 действия:
1)в БД в базе prefix_user создаем поле user_nick
2)в шаблоне в нужном месте выводим ник

Подскажите, при сохранении так же легко? или нужно всё же методы писать?


Зачем нужно? Особенности Сайта.
Человек имеет логин (только англ), настоящее имя и ещё ник (из Игры), по которому его знаю другие пользователи сайта.
0
Если честно, не пробовал с сохранением, попробуйте
$oUser->setNick("test");
$this->User_Update($oUser);


Не, не сработает. Придется метод Update() в User.mapper.class.php расширять. Можно написать небольшой плагин и переопределить его через наследование.
Отредактирован:
0
Я пишу обращения в старом стиле, т.к. сижу на версии 1.0.x. В новых версиях вроде так
E::ModuleUser()->Update($oUser);

Но должно насколько я понял и так и так работать. Если что меня поправят.
0
Небольшая поправка к комментариям выше: если поле называется user_profile_nick, то «магический» метод будет такой: getUserProfileNick() для получения свойства и setUserProfileNick() для присвоения.

Специально методы для присваивания и получения свойства имеет смысл писать, если в силу каких-то причин имя метода не эквивалентно имени поля. Напр., поле называется user_profile_nick, а обращаться требуется (или просто хочется) как getNick()/setNick(). Либо если требуются какие-то дополнительные действия, преобразования и т.д. Например:
public function getNick() {
    $sResult = $this->getProp('user_profile_nick');
    if (!$sResult) {
        $sResult = $this->getUserLogin();
    }
}
В этом примере, если поле user_profile_nick не заполнено, то возвращается логин юзера.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.