checkboxlist is giving result vertically - yii

I am trying to make a checkboxlist and for the same i have used this statement
<?php echo CHtml::checkBoxList('interests', '',
array('PHP', 'MySQL', 'JavaScript', 'CSS',
'Yii Framework')); ?>
But it is giving me the output in which The names ('PHP', 'MySQL','JavaScript', 'CSS',
'Yii Framework') specifying the checkboxes are below the boxes while I want the names to be with them horizontally.

The simple way to solve your problem is you can define style for input-checkbox in your checkboxlist like:
#interests input {
float: left;
margin-right: 10px;
}
Your inputs (checkbox) and labels will be horizontal.

You don't need to customize CSS to do that. Yii has a attribute called "separator" this built in. You can easily get rid of the line breaks by doing this:
echo CHtml::checkBoxList('...','...', array(...),
array(
'separator'=>'', //the default was a line break...
)
);

OK - I got it to work. Here's what I used. The separator will remove the spacing between lines, and float achieves the box on the same line as description.
.checkBoxClass
{
float: left;
}
<div id="itemGroups" class="itemGroups">
<?php echo $form->checkBoxList($model, 'groups', $group_items,
array(
'separator' => '',
'class'=>'checkBoxClass',
)
);?>
</div>

echo CHtml::checkBoxList(
'interests',
'',
array('PHP', 'MySQL', 'JavaScript', 'CSS', 'Yii Framework'),
array('labelOptions' =>
array(
'style' => "display: inline-block"
)
)
);
Or better specify some class in your CSS file
.mylabelclass {
display: inline-block
}
and use
array('labelOptions' =>
array(
'class' => "mylabelclass"
)
)

Related

percentage format in Kartik GridView (yii2)

I am doing a project how to calculate total in yii2. When i'm building the project, i found trouble when i'm input data to be percent format. When I'm save data,in index look 2,300%, even though it is 23%. What can i do?
In my view, format like this'format'=>['percent',],
enter image description here
this is my code
<?php
use yii\helpers\Html;
use kartik\grid\GridView;
/* #var $this yii\web\View */
/* #var $searchModel backend\models\LaporanSearch */
/* #var $dataProvider yii\data\ActiveDataProvider */
$this->title = 'Laporans';
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="laporan-index">
<h1><?= Html::encode($this->title) ?></h1>
<?php // echo $this->render('_search', ['model' => $searchModel]); ?>
<p>
<?= Html::a('Create Laporan', ['create'], ['class' => 'btn btn-success']) ?>
</p>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'showPageSummary'=>true,
'columns' => [
['class' => 'kartik\grid\SerialColumn'],
// 'id',
// 'inv_no',
// 'inv_date',
//'rate',
[
'attribute'=>'kode_customer',
// 'width'=>'150px',
//'hAlign'=>'right',
// 'format'=>['decimal', 0],
],
// 'kode_item',
// 'qty',
// 'price',
// 'ed',
['attribute'=>'total_price',
'pageSummary'=>true
],
// 'dsc',
['attribute'=>'total_dsc',
'pageSummary'=>true
], // 'trans',
['attribute'=>'total_trans',
'pageSummary'=>true
],
['attribute'=>'total_margin_rp',
'pageSummary'=>true
],
['attribute'=>'total_margin_persen',
'pageSummary'=>true,
// 'groupSeparator' => '.',
'format'=>['percent',],
], // 'kode_area',
['class' => 'kartik\grid\ActionColumn'],
],
]); ?>
</div>
The problem you have is probably due to the fact that you have stored the actual percentage value in the database. So for example your 23% is actually the number 23 in your database table.
If you look at the documentation for the percent formatter in Yii2 here (http://www.yiiframework.com/doc-2.0/yii-i18n-formatter.html#asPercent()-detail) you will see that it says:
The value to be formatted. It must be a factor e.g. 0.75 will result
in 75%.
So for your data to show up correctly you either have to provide the data as a factor, use a different formatter or write your own formatting function.

Yii2 MaskedInput widget with spesial characters

I need to create input for company name. It can be from 1-4 words and use "". Now I can just make like this:
<?= $form->field($model, 'name')->widget(\yii\widgets\MaskedInput::className(),['name' => 'name', 'mask' => ['[A][a]{1,10}[ ][a]{1,10}[ ][a]{1,10}[ ][a]{1,10}']]) ?>
But right now I can use just letters. I see there is $definitions in this widget but how to use it correct?
After trying some othr options, I make it like this:
<?= $form->field($model, 'name')->widget(\yii\widgets\MaskedInput::className(),['name' => 'name', 'mask' => '"[A]a"',
'definitions' => [
'a' => [
'validator' => '^[А-ЯЁA-Z]+',
'cardinality' => 50,
]
]]) ?>
But I need to be dynamic length of this definitions. So now in my field
"Asddasdsa asdnmsadas d asdasd asdsamj______________"
And I need it to make dynamic length so the " symbol was after text
If you want to show the first letter in uppercase while typing then use JQuery function as follows
$("#your-field-id").keyup(
function () {
this.value = this.value.substr(0, 1).toUpperCase() + this.value.substr(1).toLowerCase();
}
);

cakephp fat model still undefined variable in the view action

I have created a method in my model that successfully displays the correct data when I pr($variable) to the screen. However without the print I am receiving the 'Notice (8): Undefined variable' message.
The model in question 'industry' has many 'news and events'.
What I'm trying to do in the view for a specific industry is display news that is of two different conditions. One type of news is news.type = highlight(displaying just one highlight story), and the second is a list of active stories.
This is the method in my model.
// industry highlight news
public function getHighlightNews() {
$newsHeadline = $this->News->find('first', array(
'conditions' => array('News.type' => 'highlight','News.active' => 'yes'),
'limit' => 1,
'recursive' => 0,
'fields' => array(
'News.slug',
'News.title',
'News.date',
'News.imgPathThumb',
'News.alt_tag',
'News.id',
'News.caption',
'News.body'
),
));
return $newsHeadline;
}
public function getNewsList() {
$newslist = $this->News->find('all', array(
'conditions' => array('News.active = "Yes"','News.industry_id = 1'),
'limit' => 4,
'recursive' => 0,
'fields' => array(
'News.slug',
'News.title',
'News.date',
'News.industry_id',
'News.imgPathThumb',
'News.alt_tag',
'News.id',
'News.caption',
'News.body'
),
));
return $newslist;
}
And this is what is in my industry controller. I've created similar model methods for the news list and event lists.
public function view($id = null) {
$this->layout='default';
$this->Industry->id = $id;
if (!$this->Industry->exists()) {
throw new NotFoundException(__('Invalid industry'));
}
$eventlist = $this->Industry->getEventsList($id);
$newslist = $this->Industry->getNewsList($id);
$highlights = $this->Industry->getHighlightNews($id);
//pr($newslist); die;
$this->set('eventlist', $eventlist, 'newslist', $newslist, 'highlights', $highlights);
}
And this is my view:
<div class="first articles">
<?php foreach ($highlights as $highlight): ?>
<h1><?php echo $highlight['Industry']['title']; ?></h1>
<p><?php echo $highlight['Industry']['body']; ?>
<?php endforeach; ?>
</p>
</div><!-- /articles -->
the message I get in the view is:
Notice (8): Undefined variable: highlights [APP\View\Industries\view.ctp, line 12]
Warning (2): Invalid argument supplied for foreach() [APP\View\Industries\view.ctp, line 12]
I suspect it's something small I'm overlooking.
Thanks, Paul
Setting variables doesn't work like that. You need to change this:
$this->set('eventlist', $eventlist, 'newslist', $newslist, 'highlights', $highlights);
To this:
$this->set('eventlist', $eventlist);
$this->set('newslist', $newslist);
$this->set('highlights', $highlights);
Or this:
$this->set(compact('eventlist','newslist','highlights'));

ZF2 form element description

in ZF1 form and form elements had a setDescription method that was outputted as <p>description here</p> in view ....
ZF2 seems that doesn't have this method
so my question is how can i add description to form elements ?
this is my view :
<div>
<?
$form = $this->form;
$form->prepare();
echo $this->form()->openTag($form);
foreach ($form->getElements() as $el) {
?>
<div class="form_element">
<?=$this->formRow($el);?>
</div>
<?
}
echo $this->partial('system/form/buttons_form_part.phtml', array('form' => $form));
echo $this->form()->closeTag();
?>
</div>
Using ZF 2.1.5, one solution might be setOptions().
In the form definiton:
$file = new Element\File('file');
$file->setLabel('Photo (.jpg, .gif, .png)');
$file->setOptions(array('description' => 'test description'));
…
When rendering the form element:
$element = $form->get(…);
var_dump($element->getOptions());
Will give you access to:
array(1) { ["description"]=> string(16) "test description" }
If you mean a label for an Element you can use the setLabel method when you create the form (in Controller).
$name = new Element('name');
$name->setLabel('Your name');
Or if you use an array to create your form elements use this:
array(
'spec' => array(
'name' => 'name',
'options' => array(
'label' => 'Your name',
),
'attributes' => array(
'type' => 'text'
),
)
),
Here is a link:
enter link description here

How to add span to a label using $form->labelEx from Yii?

I wish to generate the following markup:
<label>some label here <span>(optional)</span></label>
Is there a way to do this, by using Yii labelEx or just label?
Thanks
If the attribute is required
You can set the CHtml static properties like this
CHtml::$beforeRequiredLabel = '';
CHtml::$afterRequiredLabel = '<span>(optional)</span>';
Yii will generate a tag
<label>CHtml::$beforeRequiredLabel.$label.CHtml::$afterRequiredLabel</label>
but the static properties will effect all labels generated by $form->labelEx() (#see CHtml::activeLabelEx())
if you don't need, you must set the static properties to default
If the attribute is not required
you can set the htmlOptions
$form->labelEx($model, $attribute, array('label' => 'your label'))
It's simple, make use of the Decorator pattern:
<?php
// components/CustomCHtml.php
class CustomCHtml extends CHtml
{
public static function activeLabelEx($model,$attribute,$htmlOptions=array())
{
if (isset($htmlOptions['optional']) && $htmlOptions['optional']) {
if (isset($htmlOptions['label']) && $htmlOptions['label']) {
$htmlOptions['label'] .= $htmlOptions['optional'];
} else {
$htmlOptions['label'] = $htmlOptions['optional'];
}
}
return parent::activeLabelEx($model,$attribute,$htmlOptions);
}
}
use case:
<?php echo CustomCHtml::activeLabelEx($model, 'field', array('optional'=>' <span>(optional)</span>')); ?>
Here is a little hack to make it possible.
<?php
$username = $form->field($model, 'username')
->input('text', ['class' => 'form-control input-lg'])
->label(true, 'username', ['class' => 'fa fa-user signin-form-icon']);
$username->parts['{label}'] = '<span class="fa fa-user signin-form-icon">dwe</span>';
echo $username;
?>
You could use CHtml::$afterRequiredLabel and/or CHtml::$beforeRequiredLabel
$initValue = CHtml::$afterRequiredLabel;
CHtml::$afterRequiredLabel = $initValue.'<span>(optional)</span>';
echo $form->labelEx($model, $fname, array('class' => ''));
echo $form->textField($model, $fname, array('class' => ''));
CHtml::$afterRequiredLabel = $initValue;
This way the label will be applied only on the specified form field. You actually set the initial value of CHtml::$afterRequiredLabel and/or CHtml::$beforeRequiredLabel on a temp variable, you overwrite the value that you need, and then reset it to original value.