OctoberCMS: как установить автозагрузку виджета повторителя
Я могу установить виджет повторителя для автоматической загрузки при открытии формы?
он имеет свойство max item, может ли он автоматически загружаться до максимального номера элемента
так что пользователю не нужно нажимать кнопку подсказки
повторно обновлен
это мои fields.yaml
fields:
nowarta:
label: 'No. Warta'
oc.commentPosition: ''
span: auto
placeholder: 'format penulisan ''No. 34 Tahun XIX'''
type: text
tanggal:
label: Tanggal
oc.commentPosition: ''
mode: date
format: 'd - F - Y'
span: right
type: datepicker
ignoreTimezone: false
renungan:
label: 'Renungan Mingguan'
oc.commentPosition: ''
span: full
type: section
renungan[judul]:
label: 'Judul Renungan'
oc.commentPosition: ''
span: storm
type: text
cssClass: 'col-sm-6 col-sm-push-0'
renungan[bahanbaca]:
label: 'Bahan Bacaan'
oc.commentPosition: ''
span: storm
type: text
cssClass: col-sm-6
renungan[isi]:
label: Renungan
oc.commentPosition: ''
span: storm
cssClass: 'col-sm-12 col-sm-push-0'
type: richeditor
size: huge
tabs:
fields:
temakebum:
label: 'Kebaktian Umum'
oc.commentPosition: ''
span: full
type: section
tab: 'Kebaktian Umum & Komisi'
temakebum[tema]:
tab: 'Kebaktian Umum & Komisi'
label: Tema
oc.commentPosition: ''
span: storm
cssClass: col-sm-11
type: text
temakebum[bacaan]:
label: 'Bahan Bacaan'
oc.commentPosition: ''
span: storm
cssClass: col-sm-6
type: text
tab: 'Kebaktian Umum & Komisi'
temakebum[pujian]:
label: Pujian
oc.commentPosition: ''
span: storm
cssClass: col-sm-6
type: text
tab: 'Kebaktian Umum & Komisi'
kebum:
label: ''
oc.commentPosition: ''
prompt: 'Tambah Data'
maxItems: '3'
span: full
type: repeater
tab: 'Kebaktian Umum & Komisi'
form:
fields:
jeniskeb:
label: 'Jenis Kebaktian'
oc.commentPosition: ''
span: storm
cssClass: col-sm-4
type: dropdown
options: jenisKeb
khotbah:
label: Pengkhotbah
oc.commentPosition: ''
span: storm
cssClass: col-sm-4
placeholder: ''
type: text
дд ($ форма-> поля)
array:6 [▼
"nowarta" => array:5 [▶]
"tanggal" => array:7 [▶]
"renungan" => array:4 [▶]
"renungan[judul]" => array:5 [▶]
"renungan[bahanbaca]" => array:5 [▶]
"renungan[isi]" => array:6 [▶]
]
и это то, что я сделал в контроллере, как вы хотите, чтобы это было..
class WartaRutin extends Controller
{
public $implement = ['Backend\Behaviors\ListController','Backend\Behaviors\FormController','Backend\Behaviors\ReorderController' ];
public $listConfig = 'config_list.yaml';
public $formConfig = 'config_form.yaml';
public $reorderConfig = 'config_reorder.yaml';
public function __construct()
{
parent::__construct();
BackendMenu::setContext('Mismaiti.MyWarta', 'main-menu-item', 'side-menu-rutin');
}
public function formExtendFieldsBefore($form) {
// we are checking we are creating record or updating
// or even we can use $form->context here but I used $model->id
// if $form->context == 'update'
// if $form->context == 'create'
if(is_null($form->model->id)) {
// create time
$iteration = $form->fields['kebum']['maxItems'];
if(is_numeric($iteration) && $iteration > 0) {
$emptyFields = [];
while($iteration > 0) {
$emptyFields[] = ['jeniskeb' => ''];
$iteration--;
}
$form->model->kebum = $emptyFields;
}
}
}
}
и он возвращает ошибку, когда я пытался выполнить - я должен заменить все repeater_data в kebum
"Неопределенный индекс: kebum" в строке 30 C:\xampp\htdocs\mywarta\plugins\mismaiti\mywarta\controllers\WartaRutin.php
я что-то здесь упускаю..?
1 ответ
Хм, мы можем использовать one trick
, что, как вам может понадобиться только в create time
или, может быть, вы можете расширить его на update time as well
,
Я использовал поле repeater_data
Вы можете заменить его своим полем field
fields.yaml
fields:
... other fields ...
repeater_data:
label: Repeater
oc.commentPosition: ''
prompt: 'Add new item'
maxItems: '5'
span: auto
type: repeater
form:
fields:
title:
label: Text
oc.commentPosition: ''
span: auto
type: text
category:
label: Dropdown
oc.commentPosition: ''
options:
1: 'Item 1'
2: 'Item 2'
span: auto
type: dropdown
контроллер
внутри вашего controller
вам нужно добавить это method and code
public function formExtendFieldsBefore($form) {
// we are checking we are creating record or updating
// or even we can use $form->context here but I used $model->id
// if $form->context == 'update'
// if $form->context == 'create'
if(is_null($form->model->id)) {
// create time **logic**
$iteration = $form->fields['repeater_data']['maxItems'];
if(is_numeric($iteration) && $iteration > 0) {
$emptyFields = [];
while($iteration > 0) {
// here you need to provide at least one field
// which you used in repeater I used `title`
// and let it be empty or may be some default value
$emptyFields[] = ['title' => ''];
$iteration--;
}
// dummy fields assignment to current form model
$form->model->repeater_data = $emptyFields;
}
// **logic**
}
else {
// if you need to adjust data in update time
// you need to find difference and then need to add
// additional dummy data as we are adding above
}
}
Есть 2 сценария create time
а также update time
Создать время
Когда пользователь создает запись, мы добавим dummy fields
так репитер покажет им как они есть already there
и это делается с помощью maxItems property
того, что field so its fully dynamic
Теперь пользователю не нужно нажимать эту кнопку.
Время обновления (предположим, maxItems=5)
Теперь для 2nd scenario
у нас есть еще условие, если вы хотите, чтобы вы могли добавить некоторую логику и делать свои вещи там, предположим, что пользователь может добавлять только 2 записи одновременно, поэтому в следующий раз нам нужно добавить 3 dummy fields
(2 заполнено + 3 манекена = всего 5 как maxItem), так что вы можете calculate there
а также add it from else part
,
Я надеюсь, что это поможет вам, если вы обнаружите какие-либо трудности, пожалуйста, прокомментируйте.