Selected an option in edit view cakephp 3.0 - select

I am generating list within a form like the following code. But for updating view how can select the particular option according to the user. Suppose for this user's role is Customer. Then how can select this(Customer) option in CakePHP 3.
<?= $this->Form->create($user) ?>
<?php
echo $this->Form->input('fullname');
echo $this->Form->input('contact_no');
?>
<div class="form-group">
<?php echo $this->Form->select(
'role',
['Customer', 'Staff', 'User'],
['title' => 'Select user type']
); ?>
</div>
<?= $this->Form->end() ?>

Here is what I did : (According that I have 2 tables : Users which belongsTo Roles)
In my UsersController, i added this following line :
$this->set('roles', $this->Users->Roles->find('list')->order('name'));
Then, you'll need to edit your view from
<div class="form-group">
<?php echo $this->Form->select(
'role',
['Customer', 'Staff', 'User'],
['title' => 'Select user type']
); ?>
</div>
to
<div class="form-group">
<?= $this->Form->select(
'role_id',
$roles,
['id' => 'role-id', 'required' => true]
);
?>
</div>

Related

Show plain text in Gridview/DetailView

I use kartik/GridView. In my database, I have following record using widget of \dosamigos\ckeditor\CKEditor in _form.php:
<p>ist gewöhnungsbedürftig aber halt auch kompetent</p>
Any ideas how to outline this record in GridView without HTML-tags, just plain text like this:
ist gewöhnungsbedürftig aber halt auch kompetent
Here is my DetailView:
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
?>
<div class="bewerber-view">
<div class="row">
<div class="col-sm-9">
<h2><?= Html::encode($model->id) ?></h2>
</div>
</div>
<div class="col-lg-1">
<?php
$gridColumn = [
.
.
'beurteilung_persoenlich:ntext', //contains upper record
.
.
];
echo DetailView::widget([
'model' => $model,
'attributes' => $gridColumn
]);
?>
</div>
got solution by my own:
<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
?>
<div class="bewerber-view">
<div class="row">
<div class="col-sm-9">
<h2><?= Html::encode($model->id) ?></h2>
</div>
</div>
<div class="col-lg-1">
<?php
$gridColumn = [
.
.
'beurteilung_persoenlich:html', //contains upper record
.
.
];
echo DetailView::widget([
'model' => $model,
'attributes' => $gridColumn
]);
?>
</div>
will solve my problem as described.
Happy Coding
this worked for me
'your_attritube_name:html'

How to go to a div with a given ID cakephp3

I am struggling with this problem, I am writing a code for a dashboard but It's not coming together. This is the code currently have:
<?= $this->Html->link('Edit', array('#' => 'container edit', $server->id)) ?>
This is the link to the div right down here, it's working when i don't give the server-id to the specific row. With the ID it doesn't redirect correctly.
<div class="container admin-section admin-sub edit" id="admin-edit">
<nav class="col col-xs-12 col-md-4 columns" id="actions-sidebar">
<ul class="side-nav">
<li class="heading"><?= __('Actions') ?></li>
<li data-target="admin-overview">Server List</li>
<li><?= $this->Form->postLink(
__('Delete'),
['action' => 'delete', $servers->id],
['confirm' => __('Are you sure you want to delete # {0}?', $servers->id)]
)
?></li>
</ul>
</nav>
<div class="servers form col col-xs-12 col-md-8 columns content">
<?= $this->Form->create($servers) ?>
<fieldset>
<legend><?= __('Edit Server') ?></legend>
<?php
echo $this->Form->input('url', ['class'=> 'form-control']);
echo $this->Form->input('description', ['class'=> 'form-control']);
?>
</fieldset>
<?= $this->Form->button(__('Submit'), ['class'=> 'btn btn-primary']) ?>
<?= $this->Form->end() ?>
</div>
</div>
Instead it'll go to http://dashboard/pages/1#container%20add which it shouldn't be doing. How can I make sure it'll only go to the div and not a different page?
You can do this with Url->Build
exemple:
toto
You can do it by using controller and action name.
Example :
echo $this->Html->link('Title', array(
'controller'=>'pages',
'action'=>'index',
$server->id,
'container edit'
)
);
Above code will produce -
pages/{serverId}#container%20add
pages/index/{serverId}#container%20add

yii2 validate form element from model without using activeform

I want to use the simple form tag & element like
<form name="formname" action="" method="post">
<input type="text" name="title" value="" />
</form>
I want to validate all fields on client side & server side using yii model.
Model validations can easily apply with activeform but i don't want to use activeform.
Any easy way to validate the form fields on client & server both sides?
Use beginForm() method. And try something like below.
use yii\helpers\Html;
<?php $form = Html::beginForm()([
'method' => 'post',
'name' => 'formname',
]); ?>
<?= Html::textarea->textarea(['rows' => 6, 'name'=>'title'])->label(false) ?>
<div class="form-group">
<?= Html::submitButton('POST', ['class' => 'btn btn-primary']) ?>
</div>
<?php Html::endForm() ?>
and then in your model
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
// $model->addRule(['fieldname'], 'string', ['max' => 50]);
}

Yii2 Color Picker in Form

Is there any built in class or an extinction that makes the user pick color from something like this?
You can simply render a color input like this with out using any plugins.
<?= $form->field($model, 'color', [
'template' => "{input}"
])->input('color',['class'=>"input_class"]) ?>
You can use kartik\widgets\ColorInput widget. first install kartik\widgets\ColorInput from this link
e.g. (Updated)
use kartik\widgets\ColorInput; or kartik\color\ColorInput;(for previous ver.)
<?php $form = ActiveForm::begin([
'id' => 'form',
]); ?>
<?= $form->field($model, 'color_code')->widget(ColorInput::classname(), ['options' => ['placeholder' => 'Select Color...'],]); ?>
<div class="form-group">
<?= Html::submitButton($model->isNewRecord ? 'Create' : 'Update', ['class' => $model->isNewRecord ? 'btn btn-primary btn-create' : 'btn btn-info btn-create']) ?>
</div>
<?php ActiveForm::end(); ?>

Yii bootstrap submit a form inside a modal window using the modal buttons

I'm trying to submit a form from inside a modal window using the modal buttons in the modal-footer.
The form itself is loaded through ajax from a link (controller/action).
Just to be clearer I attached this picture:
This is the code for the modal:
<?php $this->beginWidget('bootstrap.widgets.TbModal', array('id'=>'modal')); ?>
<div class="modal-header">
<a class="close" data-dismiss="modal">×</a>
<h4>Client Ticket Status Update</h4>
</div>
<div class="modal-body">
</div>
<div class="modal-footer">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'buttonType'=>'ajaxSubmit',
'type'=>'primary',
'label'=>'Save changes',
'url'=>'#',
'htmlOptions'=>array('data-dismiss'=>'modal'),
)); ?>
<?php $this->widget('bootstrap.widgets.TbButton', array(
'label'=>'Close',
'url'=>'#',
'htmlOptions'=>array('data-dismiss'=>'modal'),
)); ?>
</div>
<?php $this->endWidget(); ?>
This is the javascript that loads the form inside the modal:
$("a[data-toggle=modal]").click(function(){
var target = $(this).attr('data-target');
var url = $(this).attr('href');
if(url){
$(target).find(".modal-body").load(url);
}
});
This is the form view:
<div class="form">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'client-ticket-form',
'enableAjaxValidation'=>false,
)); ?>
<p class="note">Fields with <span class="required">*</span> are required. </p>
<?php echo $form->errorSummary($ticket); ?>
<div>
<?php echo $form->labelEx($ticket,'sent_to'); ?>
<?php echo $form->textField($ticket,'sent_to'); ?>
<?php echo $form->error($ticket,'sent_to'); ?>
</div>
<div>
<?php echo $form->labelEx($ticket,'courier'); ?>
<?php echo $form->textField($ticket,'courier'); ?>
<?php echo $form->error($ticket,'courier'); ?>
</div>
<div>
<?php echo $form->labelEx($ticket,'awb'); ?>
<?php echo $form->textField($ticket,'awb'); ?>
<?php echo $form->error($ticket,'awb'); ?>
</div>
<div>
<?php echo $form->labelEx($ticket,'awb_date'); ?>
<?php echo $form->textField($ticket,'awb_date'); ?>
<?php echo $form->error($ticket,'awb_date'); ?>
</div>
<div class="buttons">
<?php echo CHtml::submitButton($ticket->isNewRecord ? 'Create' : 'Save'); ?>
</div>
<?php $this->endWidget(); ?>
</div><!-- form -->
Any help is very appreciated. If you require more information, please ask.
Change code at model-footer as below:
<div class="modal-footer">
<?php $this->widget('bootstrap.widgets.TbButton', array(
'type'=>'primary',
'label'=>'Save changes',
'url'=>'#',
'htmlOptions'=>array('onclick' => '$("#formID").submit()'),
)); ?>
<?php $this->widget('bootstrap.widgets.TbButton', array(
'label'=>'Close',
'url'=>'#',
'htmlOptions'=>array('data-dismiss'=>'modal'),
)); ?>
This first response didn't resolve my problem of a modal form closing on submit. For anyone else that is having issues, I had to enable client Validation in the CActiveForm.
It ended up looking like this:
$form = $this->beginWidget(
'CActiveForm',
array(
'id' => 'feature-form',
'enableAjaxValidation' => true,
'enableClientValidation' => true,
'clientOptions' => array(
'validateOnSubmit' => true,
'validateOnChange' => true,
'validateOnType' => true
)
)
);
Hopefully this helps some coming after me.
just trigger the click event on the other one that you don't want to show, an also hide it first!