Вызов не-статического метода класса в шаблоне Есть решение
Здравствуйте. Есть банальная задача: для хаба вывести рейтинг авторов не только на спрятанной далеко странице http://1belok.ru/o/authors/ , но и на каждой странице, в сайдбаре над "Сотрудники".
Готового хелпера для этого я в Хабе не нашёл. Страница авторов принимает готовый ответ в модели от контроллера. В контроллере это делается простым исходным кодом на php:
\wa-apps\hub\lib\actions\frontend\hubFrontendAuthors.action.php:
$author_model = new hubAuthorModel();
$authors = $author_model->getList('*,badge', array(
'hub_id' => $this->hub_id,
'offset' => $offset,
'limit' => $limit
), $count);
Проверил на локальной машине в developer, достаточно вызвать этот php код, и результат действительно будет получен (если предварительно сделать wa('hub')). Однако я в вашем облаке, и поэтому не могу создавать свои хелперы, менять существующий php код.
Так что я пытаюсь запустить этот код через Smarty. Я прочитал Вызов методов другого приложения, безуспешно пользовался поиском. Все примеры показывают вызов статического метода какого-либо класса. Вызвать метод объекта я не могу: не могу его создать. Мне недоступны {php}{/php}, не работает {eval()}, просто {new hubAuthorModel()} тоже не работает даже близко.
Поэтому у меня простой вопрос: как из Smarty вызвать не-статический метод доступного мне класса?
И отдельное пожелание: добавьте в hubViewHelper метод типа top_authors(hub_id=1, count=10, offset=0), писькомерство - двигатель прогресса. Я хочу, чтобы мои посетители стремились оказаться в топе. А кому захочется быть в топе, спрятанном фиг найдёшь. Ну и если пойти дальше, уже захочется "топ автор за сегодня, за неделю, за месяц", чтобы стимулировать не только матёрых недосягаемых форумных зубров.
Эта тема в архиве. Добавление комментариев к ней отключено.
3 ответа
Метод для получения информации об авторах обязательно появится в следующей версии хаба. Сроков не назову.
То, что в шаблонах нельзя создать экземпляр абы какого класса - это так задумано и правильно исходя из политики безопасности. Это не поменяется.
Спасибо, Леонид. Отсутствие коммитов в исходный код хаба в течение 4-5 последних месяцев немного пугает.
Экземпляр создавать нельзя, но пользоваться статическими методами абы какого класса можно? Типа "сделал метод статическим - значит сам виноват, подразумеваешь возможность его вызова извне"?
Да. Буквально, так.
С не-статическими методами идея простая. Чтобы у человека без доступа к файловой системе, но с доступом в админку, не было возможности выполнять произвольный PHP код и SQL запросы. Это одна из причин, почему модели в шаблон никогда не передаются - потому что в них есть метод waModel->query().
Коммиты будут :) над другими вещами пока работаем, рук не хватает.