I'm trying single-file uploads using Kartik's FileInput.
Things go fine when doing this through standard create form as the following returns non-null:
$filedata = UploadedFile::getInstance($model, 'filedata');
However it always returns null when going into Kartik's DetailView in edit mode and trying to update the file.
In view.php I have:
[
'attribute' => 'filedata',
'visible' => Yii::$app->user->can('doIt'),
'type' => DetailView::INPUT_FILEINPUT,
'rowOptions' => ['class' => 'kv-view-hidden'],
'widgetOptions' => ['options' => ['accept' => 'application/pdf'],
'pluginOptions' => [
'showUpload' => false,
'allowedFileExtensions' => ['pdf'],
'initialCaption' => $model->filename,
],
'pluginEvents' => [
'filecleared' => <whatever>,
'fileloaded' => <whatever>,
],
],
],
while in _form.php (which does work):
<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]); ?>
<?= $form->field($model, 'filedata')->widget(FileInput::classname(), [
'options' => ['accept' => 'application/pdf'],
'pluginOptions' => [
'showUpload' => false,
'allowedFileExtensions' => ['pdf'],
'initialCaption' => $model->getOldAttribute('filename'),
],
'pluginEvents' => [
'filecleared' => <whatever>,
'fileloaded' => <whatever>,
],
])
?>
Any ideas? (BTW, don't know whether 'multipart/form-data' is needed somehow in view.php as it is in _form.php, so anyone confirming this and giving some details should be welcome).
Of course, multipart/form-data is needed both in _form.php and view.php as well, as follows:
'formOptions' => ['options' => ['enctype' => 'multipart/form-data']],
'attributes' => [
...
[
'attribute' => 'filedata',
'visible' => Yii::$app->user->can('doIt'),
'type' => DetailView::INPUT_FILEINPUT,
'rowOptions' => ['class' => 'kv-view-hidden'],
'widgetOptions' => ['options' => ['accept' => 'application/pdf'],
'pluginOptions' => [
'showUpload' => false,
'allowedFileExtensions' => ['pdf'],
'initialCaption' => $model->filename,
],
'pluginEvents' => [
'filecleared' => <whatever>,
'fileloaded' => <whatever>,
],
],
],
....
]
Related
can someone help me, how I can extend an assiociative array with a variable?
I have a loop (foreach):
foreach($this->getWarehouseListForm() as $wareHouse) {
$wareHouseList[] =
[
"title" => "wareHouse[105]",
"form" => [
"storeId[105]" => [
"type" => "inputText",
"options" => [
"name" => "TSL",
],
],
],
];
}
And I want to extend a object like this:
"sections" => [
[
"title" => 'Schuhe24Assistant.ftpServerTitle',
"description" => 'Schuhe24Assistant.ftpServerDescription',
"form" => [
"ftpServer" => [
'type' => 'text',
'defaultValue' => 'ftp.hisasp2.com',
'options' => [
'name' => 'Schuhe24Assistant.ftpServer',
'required' => true,
]
],
"ftpUser" => [
'type' => 'text',
'defaultValue' => 'username',
'options' => [
'name' => 'Schuhe24Assistant.ftpUser',
'required' => true,
]
],
"ftpPassword" => [
'type' => 'text',
'defaultValue' => 'password',
'options' => [
'name' => 'Schuhe24Assistant.ftpPassword',
#'isPassword' => true,
'required' => true,
],
],
"deleteFiles" => [
'type' => 'toggle',
'defaultValue' => true,
'options' => [
'name' => 'Schuhe24Assistant.deleteFiles',
],
],
],
],
], $wareHouseList
But this code produces nothing (no error output) and the structure check fails in this case. If I remove the variable, the structure check is OK.
Can someone help me out?
Kind regards
Henning
Push your $wareHouseList array into the $sections array in the following ways
$sections['wareHouseList'] = $wareHouseList
It should be working.
I have a problem with editable kartik, how can I make editable kartik stored in the database? sometimes BAD REQUEST notifications appear
My Controller
public function actions()
{
return ArrayHelper::merge ( parent::actions () , [
'editable' => [
'class' => EditableColumn::className() ,
'modelClass' => AssetMasterRequest::className() ,
'forceCreate'=> false,
]
]);
}
My View
<?php
$gridColumns = [
'assetMaster.asset_name',
'request_date',
[
'class' => 'kartik\grid\EditableColumn',
'attribute' => 'requested_by',
'pageSummary' => 'Total',
'vAlign' => 'middle',
'width' => '210px',
'editableOptions' => function ($model, $key, $index) use ($ambildata) {
return [
'header' => 'Request By',
'formOptions' => ['action'=>'pru'] ,
'size' => 'md',
'afterInput' => function ($form, $widget) use ($model, $index) {
return $form->field($model, "request_notes");
}
];
}
],
[
'class' => 'kartik\grid\EditableColumn',
'attribute' => 'request_notes',
'vAlign' => 'middle',
'width' => '210px',
'editableOptions' =>[
'formOptions'=>[
'action'=>'editable'
],
]
],
'requested_by',
];?>
Please help. Have spent two days on this. Thanks!
You must return a JSON encoded response in the array format specified above with output and message values. This is important for the AJAX request to be processed and completed successfully.
Here is a grid view configuration with editable column
echo GridView::widget([
'id' => 'kv-grid-demo',
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => $gridColumns, // check the configuration for grid columns by clicking button above
'containerOptions' => ['style' => 'overflow: auto'], // only set when $responsive = false
'headerRowOptions' => ['class' => 'kartik-sheet-style'],
'filterRowOptions' => ['class' => 'kartik-sheet-style'],
'pjax' => true, // pjax is set to always true for this demo
// set your toolbar
'toolbar' => [
[
'content' =>
Html::button('<i class="fas fa-plus"></i>', [
'class' => 'btn btn-success',
'title' => Yii::t('kvgrid', 'Add Book'),
'onclick' => 'alert("This will launch the book creation form.\n\nDisabled for this demo!");'
]) . ' '.
Html::a('<i class="fas fa-redo"></i>', ['grid-demo'], [
'class' => 'btn btn-outline-secondary',
'title'=>Yii::t('kvgrid', 'Reset Grid'),
'data-pjax' => 0,
]),
'options' => ['class' => 'btn-group mr-2']
],
'{export}',
'{toggleData}',
],
'toggleDataContainer' => ['class' => 'btn-group mr-2'],
// set export properties
'export' => [
'fontAwesome' => true
],
// parameters from the demo form
'bordered' => $bordered,
'striped' => $striped,
'condensed' => $condensed,
'responsive' => $responsive,
'hover' => $hover,
'showPageSummary' => $pageSummary,
'panel' => [
'type' => GridView::TYPE_PRIMARY,
'heading' => $heading,
],
'persistResize' => false,
'toggleDataOptions' => ['minCount' => 10],
'exportConfig' => $exportConfig,
'itemLabelSingle' => 'book',
'itemLabelPlural' => 'books'
]);
I am using kartik grid lib in yii2
This works.
[
'attribute' => 'status',
'filterType' => GridView::FILTER_SELECT2,
'filter' => ['Active' => 'Active', 'In Active' => 'In Active'],
'filterWidgetOptions' => [
'pluginOptions' => ['allowClear' => true],
],
'filterInputOptions' => ['placeholder' => 'Select'],
]
But this doesn't
[
'attribute' => 'status',
'filterType' => '\kartik\widgets\Select2',
'filter' =>['Active' => 'Active', 'In Active' => 'In Active'],
'filterWidgetOptions' => [
'pluginOptions' => ['allowClear' => true],
],
'filterInputOptions' => ['placeholder' => 'Select'],
]
Why ? I need to use the point 2 approach. But it is not working.
Changed filter type to '\kartik\select2\Select2' and it worked.
usa 'filterType' =>GridView::FILTER_SELECT2, el composer usado es use kartik\grid\GridView;
'filterType' => GridView::FILTER_SELECT2,
'filter' => ArrayHelper::map(Entidad::find()->asArray()->all(),'id', 'nombre'),
filterWidgetOptions' => [
'pluginOptions' => ['allowClear' => true],
],
'filterInputOptions' => ['placeholder' => 'Selección'],
How to add id in select2 dropdownlist kartik. The goal I want when I choose value "success" in dropdown, so value in the other dropdownlist example2 and example3 disabled is false. Before it, for dropdownlist example2 and example3 with value "yes" is false.
I've created code JavaScript but it is not working. What can I try next?
This my code :
<?php
echo $form->field($model, 'example')->widget(Select2::classname(), [
'model' => $model,
'hideSearch' => true,
'data' => ['success' => 'Success', 'fail' => "Fail"],
'language' => 'id',
'options' => [
'placeholder' => 'Pilih',
'options' => [
['id' => 'example'],
]
],
'pluginOptions' => [
'allowClear' => true,
'width' => '350px',
],
])->label('Example');
?>
<?php
echo $form->field($model, 'example2')->widget(Select2::classname(), [
'model' => $model,
'hideSearch' => true,
'data' => ['yes' => "Yes", 'no' => "No"],
'language' => 'id',
'options' => [
'placeholder' => 'Pilih',
'options' => [
'yes' => ['disabled' => true],
['id' => 'example2'],
]
],
'pluginOptions' => [
'allowClear' => true,
'width' => '350px',
],
])->label('Example 2');
?>
<?php
echo $form->field($model, 'example3')->widget(Select2::classname(), [
'model' => $model,
'hideSearch' => true,
'data' => ['yes' => "Yes", 'no' => "No"],
'language' => 'id',
'options' => [
'placeholder' => 'Pilih',
'options' => [
'yes' => ['disabled' => true],
['id' => 'example3'],
]
],
'pluginOptions' => [
'allowClear' => true,
'width' => '350px',
],
])->label('Example 3');
?>
This JavaScript code :
<?php
$this->registerJs('
$("input[type=dropdown]").change(function() {
var isi = this.value;
if(isi == "success") {
$("#example2").attr("disabled",false);
$("#example3").attr("disabled",false);
}
});
')
?>
May be this is what you want.
Add option to first select element (#example):
'pluginEvents' => [
"change" => "function() {
var value = $(this).val();
if(value == 'success')
{
$('#demo-example2').val('yes');
$('#demo-example2').trigger('change');
$('#demo-example3').val('yes');
$('#demo-example3').trigger('change');
}
}",
]
When I use the following code, the end result is " TEST " and should be "TEST" in the tags .
echo Menu::widget([
'options' => ['id' => 'navigate'],
'items' => [
[
'label' => '<span>TEST</span>',
'url' => ['#'],
],
['label' => '<span>TEST2</span>', 'url' => ['#']],
],
]);
I know I should use encodeLabel but does not work and returns an error. Can you do to help?
It works fine for me:
echo Menu::widget([
'options' => ['id' => 'navigate'],
'encodeLabels' => false,
'items' => [
[
'label' => '<span>TEST</span>',
'url' => ['#'],
],
['label' => '<span>TEST2</span>', 'url' => ['#']],
],
]);