Вебасист позволяет в исходном коде одного приложения вызывать методы другого приложения. Это допускается делать и в PHP-коде, и в коде шаблонов (включая темы дизайна), как показано в следующих примерах.
PHP
//прежде всего убеждаемся в том, что стороннее приложение установлено //вызов функции wa() с идентификатором стороннего приложения необходим для того, //чтобы сделать его классы доступными в коде вашего собственного приложения или плагина if (wa()->appExists('blog')) { wa('blog'); $blog_authors = blogHelper::getAuthors(1); }
Smarty
//для того чтобы сделать классы другого приложения доступными в шаблоне Smarty, //необходимо обратиться к полю объекта $wa, имя которого совпадает с ID приложения, //чтобы убедиться, что это поле не пустое {if $wa->blog} {$blog_authors = blogHelper::getAuthors(1)} {/if}
Вызов методов плагинов
Помимо методов другого приложения допускается вызывать и методы плагинов другого приложения. Для этого нужно немного усложнить проверку в вашем коде:
PHP
if (wa()->appExists('blog')) { wa('blog'); //проверяем, доступен ли статический метод с именем getData класса некоторого плагина с идентификатором some if (method_exists('blogSomePlugin', 'getData')) { $data = blogSomePlugin::getData(); } }
Smarty
{if $wa->blog} //проверяем, доступен ли статический метод с именем getData класса некоторого плагина с идентификатором some {if method_exists('blogSomePlugin', 'getData')} {$data = blogSomePlugin::getData()} {/if} {/if}
2 комментария
метод blogSomePlugin::getData(); выполняется даже в том случае, если плагин Some приложения Blog отключен в инсталлере. Является ли этой ошибкой или так и должно быть?
Пришлось делать дополнительную проверку на статус плагина, готовое решение подсмотрел тут. Думаю, в данной статье этот момент стоит упомянуть.
Ошибкой это не является. Плагин должен сам реализовать проверку своего статуса в статическом методе, вызываемом в шаблоне.
Чтобы не внедрять такую проверку в каждом таком методе, начиная с версии фреймворка 1.14.11 можно реализовать в плагинах хелперы для шаблонов. При их использовании фреймворк автоматически проверяет статус плагина в «Инсталлере».