Совместное использование 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>
Я не совсем понимаю, что вы спрашиваете во второй части вашего вопроса, но, надеюсь, вышеизложенное поможет вам решить.