Да, внутри компонента плагина вы можете получить доступ к партиалам как из другого компонента в том же плагине (вы бы настроили общий партиал), так и к компонентам и партиалам из других плагинов.
Чтобы получить доступ к общим фрагментам между компонентами в одном и том же подключаемом модуле, см. этот раздел документации. а>:
Несколько компонентов могут совместно использовать партиалы, поместив файл парциала в каталог с именем 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