Вызов не-статического метода класса в шаблоне Есть решение

Здравствуйте. Есть банальная задача: для хаба вывести рейтинг авторов не только на спрятанной далеко странице 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), писькомерство - двигатель прогресса. Я хочу, чтобы мои посетители стремились оказаться в топе. А кому захочется быть в топе, спрятанном фиг найдёшь. Ну и если пойти дальше, уже захочется "топ автор за сегодня, за неделю, за месяц", чтобы стимулировать не только матёрых недосягаемых форумных зубров.

1 ответ

  • 2
    Леонид Вакуленко Webasyst 24 апреля 2015 07:15 # Решение

    Метод для получения информации об авторах обязательно появится в следующей версии хаба. Сроков не назову.

    То, что в шаблонах нельзя создать экземпляр абы какого класса - это так задумано и правильно исходя из политики безопасности. Это не поменяется.

    • +1
      Dima Stefantsov Dima Stefantsov 24 апреля 2015 09:23 #

      Спасибо, Леонид. Отсутствие коммитов в исходный код хаба в течение 4-5 последних месяцев немного пугает.

      Экземпляр создавать нельзя, но пользоваться статическими методами абы какого класса можно? Типа "сделал метод статическим - значит сам виноват, подразумеваешь возможность его вызова извне"?

      • +2

        Да. Буквально, так.

        С не-статическими методами идея простая. Чтобы у человека без доступа к файловой системе, но с доступом в админку, не было возможности выполнять произвольный PHP код и SQL запросы. Это одна из причин, почему модели в шаблон никогда не передаются - потому что в них есть метод waModel->query().

        Коммиты будут :) над другими вещами пока работаем, рук не хватает.

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите