Ответ
Саян 24.02.2013 09:34
Зачем нужен дизайн на стороне сервера? Возьмем отображение данных пользователя, как оно делается в типовых форумах типа iconboard. Это блок слева от сообщения. Один вариант:
Имя пользователя
Статус
Картинка
Дата регистрации
Другой:
Никнейм
Карма (рейтинг)
Картинка
Возраст
Подпись.
Я исхожу из того, что для разных тематических форумов, для удобства их пользователей, может потребоваться совершенно разное отображение всех полей, поэтому внутри класса forum сделал такие методы только для первого, дефолтного юзербокса:
@forum_userbox[message]
<div class="forum_userbox">
<span>^forum_ub_name[$message]</span>
<span>^forum_ub_status[$message]</span>
<span>^forum_ub_picture[$message]</span>
<span>^forum_ub_userage[$message]</span>
</div>
Предполагается, что в дизайн-шаблоне можно переопределить как общий метод (например, если нужно заменить дату регистрации на рейтинг пользователя), так и каждый по отдельности.
Идя логически дальше, обнаруживаем, что хорошо бы иметь еще и возможность указывать, какие дополнительные поля таблицы users джойнить с таблицей forum. Причем тоже в дизайн-шаблоне, раз они используются только в нем.
И если здесь пользоваться wrapper'ами, как
^if($hParams.bDefault || !def $oForum){
стандартное поведение
}{
^oForum.print[hParams]
}
,то @forum_userbox[message] разрастается до совсем неприличных размеров. И по-прежнему нельзя переопределить произвольный метод.
Давайте подойдем с другой стороны. Как я понимаю, в Парсере есть ровно три способа автоматических переопределений
1. наследование класса с переопределением методов
2. переопределение внутри класса через partial
3. ^хэш.add. (и далее работаем через ^хэш.имя_метода[])
Или есть еще что-то?