问题描述
我在后端有一个表单来创建新条目。我也想允许我的网站的前端用户也创建这些条目,因此,由于我已经在后端具有这样的表格和控制器,因此我也希望在前端中使用它。>
我已经为前端创建了一个组件,并试图在其中渲染后端表单,如下所示:
# components/NewEntryForm.PHP
<?PHP namespace Author\PluginName\Components;
use Cms\Classes\ComponentBase;
use Author\PluginName\Models\Entry;
use Author\PluginName\Controllers\Entries as EntryController;
class NewEntryForm extends ComponentBase
{
public function componentDetails()
{
return [
'name' => 'NewEntryForm Component','description' => 'No description provided yet...'
];
}
public function onRun()
{
// New back-end form with the context of 'frontend'
$formController = new EntryController();
$formController->create('frontend');
// Append the entryController to the page
$this->page['form'] = $formController;
// Add backend styles to the form
$this->addCss('/modules/backend/assets/css/controls.css','core');
}
}
组件的default.htm
:
<!-- components/newentryform/default.htm -->
<form role="form"
data-request="{{ __SELF__ }}::onSave"
data-request-success="$el.hide();$('.confirm-container').removeClass('hide');">
{{ form.formRender()|raw }}
<div class="form-group">
<button class="btn btn-primary btn-block btn-lg" type="submit" value="register">Create</button>
</div>
</form>
但是,出现以下错误:
在呈现模板的过程中引发了异常(“ 找不到部分“ _field_richeditor.htm”。”
解决方法
您需要resister
个widgets manually
,就像backend
中的registered by backend provider
。
用于在前端注册小部件的代码,您需要将此代码放入插件的
Plugin.php
文件中
// import
use Backend\Classes\WidgetManager;
class Plugin extends PluginBase
{
public function register() {
WidgetManager::instance()->registerFormWidgets(function ($manager) {
// You can add them as per need
$manager->registerFormWidget('Backend\FormWidgets\RichEditor','richeditor');
// $manager->registerFormWidget('Backend\FormWidgets\CodeEditor','codeeditor');
// $manager->registerFormWidget('Backend\FormWidgets\MarkdownEditor','markdown');
// $manager->registerFormWidget('Backend\FormWidgets\FileUpload','fileupload');
// $manager->registerFormWidget('Backend\FormWidgets\Relation','relation');
// $manager->registerFormWidget('Backend\FormWidgets\DatePicker','datepicker');
// $manager->registerFormWidget('Backend\FormWidgets\TimePicker','timepicker');
// $manager->registerFormWidget('Backend\FormWidgets\ColorPicker','colorpicker');
// $manager->registerFormWidget('Backend\FormWidgets\DataTable','datatable');
// $manager->registerFormWidget('Backend\FormWidgets\RecordFinder','recordfinder');
// $manager->registerFormWidget('Backend\FormWidgets\Repeater','repeater');
// $manager->registerFormWidget('Backend\FormWidgets\TagList','taglist');
// $manager->registerFormWidget('Backend\FormWidgets\MediaFinder','mediafinder');
// $manager->registerFormWidget('Backend\FormWidgets\NestedForm','nestedform');
});
}
// ... other code ...
}
它将注册小部件,您可以在前端使用它们而不会出现任何问题。
如有任何疑问,请发表评论。