Вызов методов других приложений в теме дизайна или плагине для Shop-Script

Вебасист позволяет в исходном коде одного приложения вызывать методы другого приложения. Это допускается делать и в 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 комментария

  • +1


    if (wa()->appExists('blog')) {
        wa('blog');
        //проверяем, доступен ли статический метод с именем getData класса некоторого плагина с идентификатором some
        if (method_exists('blogSomePlugin', 'getData')) {
            $data = blogSomePlugin::getData();
        }
    }

    метод blogSomePlugin::getData(); выполняется даже в том случае, если плагин Some приложения Blog отключен в инсталлере. Является ли этой ошибкой или так и должно быть?

    Пришлось делать дополнительную проверку на статус плагина, готовое решение подсмотрел тут. Думаю, в данной статье этот момент стоит упомянуть.

    • +1
      Михаил Ушенин Михаил Ушенин Webasyst 29 ноября 2021 09:27 #

      Ошибкой это не является. Плагин должен сам реализовать проверку своего статуса в статическом методе, вызываемом в шаблоне.

      Чтобы не внедрять такую проверку в каждом таком методе, начиная с версии фреймворка 1.14.11 можно реализовать в плагинах хелперы для шаблонов. При их использовании фреймворк автоматически проверяет статус плагина в «Инсталлере».

      Добавить комментарий

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