在 2 个插件之间共享 Partials/Components
Share Partials/Components between 2 Plugins
有没有办法从另一个组件或另一个插件访问部分?
我有一个显示某种消息的模态组件。现在我有另一个组件在模态对话框中显示复杂的表单。它们位于 2 个插件中。
是的,在一个插件组件内,您可以从同一插件中的另一个组件(您将设置一个共享的部分)访问部分,也可以从其他插件访问组件和部分。
为了访问同一插件中组件之间的共享部分,see this section of the docs.:
Multiple components can share partials by placing the partial file in
a directory called components/partials
. The partials found in this
directory are used as a fallback when the usual component partial
cannot be found. For example, a shared partial located in
/plugins/acme/blog/components/partials/shared.htm
can be displayed on
the page by any component using:
{% 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>
好的,我们已经设置了注册 Thud 组件的 Foo 插件。该组件中有一些基本的默认标记以及组件文件夹中的部分标记。现在,让我们设置另一个插件,它有一个组件 Grunt
,它可以使用这个组件和来自 Foo
:
的部分 Thud
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' %}
请注意,在 Bar 中 Grunt 组件的上述组件默认标记文件中,我们从 Thud 组件调用了 Thud 组件和 partial.htm
部分。
虽然我们还没有完全完成,但我很确定它必须以这种方式完成(尽管可能有一种我不知道的更优雅的方式),但我们已经在我们要调用的页面来自:
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>
我不完全明白你在问题的第二部分问的是什么,但希望以上内容能帮助你解决问题。
有没有办法从另一个组件或另一个插件访问部分?
我有一个显示某种消息的模态组件。现在我有另一个组件在模态对话框中显示复杂的表单。它们位于 2 个插件中。
是的,在一个插件组件内,您可以从同一插件中的另一个组件(您将设置一个共享的部分)访问部分,也可以从其他插件访问组件和部分。
为了访问同一插件中组件之间的共享部分,see this section of the docs.:
Multiple components can share partials by placing the partial file in a directory called
components/partials
. The partials found in this directory are used as a fallback when the usual component partial cannot be found. For example, a shared partial located in/plugins/acme/blog/components/partials/shared.htm
can be displayed on the page by any component using:{% 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>
好的,我们已经设置了注册 Thud 组件的 Foo 插件。该组件中有一些基本的默认标记以及组件文件夹中的部分标记。现在,让我们设置另一个插件,它有一个组件 Grunt
,它可以使用这个组件和来自 Foo
:
Thud
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' %}
请注意,在 Bar 中 Grunt 组件的上述组件默认标记文件中,我们从 Thud 组件调用了 Thud 组件和 partial.htm
部分。
虽然我们还没有完全完成,但我很确定它必须以这种方式完成(尽管可能有一种我不知道的更优雅的方式),但我们已经在我们要调用的页面来自:
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>
我不完全明白你在问题的第二部分问的是什么,但希望以上内容能帮助你解决问题。