Делитесь частями/компонентами между двумя плагинами

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

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


person dark_982    schedule 14.03.2018    source источник


Ответы (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>

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

person Joseph Oppegaard    schedule 15.03.2018