Совместное использование Partials/Components между 2 плагинами

Есть ли способ получить доступ к частям из другого компонента или другого плагина?

У меня есть модальный компонент, показывающий какое-то сообщение. Теперь у меня есть другой компонент, показывающий сложную форму в модальном диалоге. Они находятся в 2 плагинах.

1 ответ

Решение

Да, внутри компонента плагина вы можете получить доступ к частям как из другого компонента в том же плагине (вы бы настроили общий партиал), так и к компонентам и частям из других плагинов.

Для получения доступа к общим частям между компонентами в одном плагине, см. Этот раздел документации.:

Несколько компонентов могут совместно использовать частичные файлы, поместив частичный файл в каталог с именем components/partials, Частицы, найденные в этом каталоге, используются в качестве запасного варианта, когда обычный частичный компонент не может быть найден. Например, общий частичный находится в /plugins/acme/blog/components/partials/shared.htm может отображаться на странице любым компонентом, используя:

{% partial '@shared' %}

Для получения доступа к компонентам или частям из другого плагина внутри вашего компонента, см. Следующие примеры Foo а также Bar плагины:

plugins/montanabanana/foo/Plugin.php:

<?php namespace MontanaBanana\Foo;

use System\Classes\PluginBase;

class Plugin extends PluginBase
{
    public function registerComponents()
    {
        return [
            'MontanaBanana\Foo\Components\Thud' => 'thud'
        ];
    }

    public function registerSettings()
    {
    }
}

plugins/montanabanana/foo/components/Thud.php

<?php

namespace MontanaBanana\Foo\Components;

class Thud extends \Cms\Classes\ComponentBase
{
    public function componentDetails()
    {
        return [
            'name' => 'Thud Component',
            'description' => ''
        ];
    }
}

plugins/montanabanana/foo/components/thud/default.htm

<pre>Thud component, default.htm</pre>

plugins/montanabanana/foo/components/thud/partial.htm

<pre>This is the thud partial</pre>

Итак, мы настроили плагин Foo, который регистрирует компонент Thud. Этот компонент имеет некоторую базовую разметку по умолчанию, а также часть в папке компонента. Теперь давайте настроим другой плагин, который имеет компонент Grunt который может использовать этот компонент и частичный Thud от Foo:

plugins/montanabanana/bar/Plugin.php

<?php namespace MontanaBanana\Bar;

use System\Classes\PluginBase;

class Plugin extends PluginBase
{
    // We should require the plugin we are pulling from
    public $require = ['MontanaBanana.Foo'];

    public function registerComponents()
    {
        return [
            'MontanaBanana\Bar\Components\Grunt' => 'grunt'
        ];
    }

    public function registerSettings()
    {
    }
}

plugins/montanabanana/bar/components/grunt/default.htm

<pre>Grunt component, default.htm</pre>

{% component 'thud' %}

{% partial 'thud::partial' %}

Обратите внимание, что в приведенном выше файле разметки компонента по умолчанию для компонента Grunt в Bar мы назвали как компонент Thud, так и partial.htm частичное от компонента Thud.

Мы еще не совсем закончили, и я уверен, что это нужно сделать таким образом (хотя, может быть, есть более элегантный способ, о котором я не знаю), но мы определили оба компонента на странице, которую мы хотим вызвать это все из:

themes/your-theme/pages/example.htm

title = "Example"
url = "/example"

[grunt]
[thud]
==
{% component 'grunt' %}

Выход которого:

<pre>Grunt component, default.htm</pre>
<pre>Thud component, default.htm</pre>
<pre>This is the thud partial</pre>

Я не совсем понимаю, что вы спрашиваете во второй части вашего вопроса, но, надеюсь, вышеизложенное поможет вам решить.

Другие вопросы по тегам