Menus

Monday, 14 August 2017

PHP more useful functions




PHP strlen() Function

The strlen() function returns the length of a string.

Syntax

strlen(string)

Example

<?php
echo strlen("Hello world!");
?>

PHP substr() Function


Return part of a string


The substr() function returns a part of a string.

Syntax

substr(string,start,length)



ParameterDescription
stringRequired. Specifies the string to return a part of
startRequired. Specifies where to start in the string
  • A positive number - Start at a specified position in the string
  • A negative number - Start at a specified position from the end of the string
  • 0 - Start at the first character in string
lengthOptional. Specifies the length of the returned string. Default is to the end of the string.
  • A positive number - The length to be returned from the start parameter
  • Negative number - The length to be returned from the end of the string

Get first n characters of a string

Examples

echo substr("Hello world",0,4);
Output is print  "Hello"


$category_name=substr($cat['description'],3,  strlen($cat['description'])-1);







Tuesday, 8 August 2017

YII2 Useful Tips


Filter to force lowercase on all operations


Yii change case each word in a string and save model.


Yii2 change model case

['student_name', 'filter', 'filter'=>'strtolower'],

['student_name', 'filter', 'filter'=>'strtoupper'],

To convert to Lowercase or Uppercase 





Thursday, 3 August 2017

Yii2 Transaction


Yii2 save related records in single save call in single transaction


Database Transaction in Yii


A transaction is used to run a group of operations in single process. When you we run multiple query in single process, It will be used. If you get any problem, It will not complete successfully and also rollback the executed query.


Transaction represents a DB transaction.
It is usually created by calling yii\db\Connection::beginTransaction().
The following code is a typical example of using transactions (note that some DBMS may not support transactions):
$transaction = $connection->beginTransaction();
try {
    $connection->createCommand($sql1)->execute();
    $connection->createCommand($sql2)->execute();
    //.... other SQL executions
    $transaction->commit();
} catch (\Exception $e) {
    $transaction->rollBack();
    throw $e;
} catch (\Throwable $e) {
    $transaction->rollBack();
    throw $e;
}

Example

$transaction = Yii::$app->db->beginTransaction(); 

 try { 

 $user = new User(); 
 $user->name = 'Name'; 
 $user->save(); 

 $ua = new UserAddress(); 
 $ua->city = 'City'; 
 $user->link('userAddress', $ua); // <-- it creates new record in UserAddress table with ua.user_id = user.id 

 $transaction->commit(); 

 } catch (Exception $e) { 
 $transaction->rollBack(); 
 }


Example


if ($model->load(Yii::$app->request->post()))
        {
           
           $transaction = \Yii::$app->db->beginTransaction();
           try {  
         
           
            $stockitem=Stockitem::find()->where(['id'=>$model->stockitem_id])->one();
            $stockitem->stock=$stockitem->stock-$model->stock;
           
            $stockitem->save();
           
            //Stock add to center
            $st=  Stockcenter::find()->where(['stockitem_id'=>$model->stockitem_id,'center_ccid'=>$model->center_ccid])->one();
            if($st)
            {
              $st->stock=$st->stock+$model->stock;
              $st->amount=$model->amount;
              $st->save();
            }
            else
            {
                $st= new Stockcenter();
                $st->stockitem_id=$model->stockitem_id;
                $st->center_ccid=$model->center_ccid;
                $st->stock=$model->stock;
                $st->amount=$model->amount;
                $st->save();              
            }
           
           
            $model->date=date('Y-m-d',strtotime($model->date));
            $model->save();
           
            $transaction->commit();

            } catch (Exception $e) {
                        $transaction->rollBack();
            }
           
            //Redirect...
           
           
        }


http://www.yiiframework.com/doc-2.0/yii-db-transaction.html


Sunday, 25 June 2017

Yii2 Database Operations




Using yii2 date range in active record


search between two dates in yii2



Correct way of date range check
$model = ModelName::find()->where(['between', 'date', "2015-06-21", "2015-06-27" ])
->all();
Using between 

$query= Stockdistributelog::find();    
$query->where(['center_ccid'=>$model->center_ccid]);
$query->andwhere(['between', 'date', date('Y-m-d',strtotime($model->date)),date('Y-m-d',strtotime($model->date_to)) ]);
$query->all();

$programs = Programs::find()->where(['>=', 'close_date', $today])->all();


Check official documentation for more details:




check exist ActiveRecord model in database


How to find record exist in database table ?


Yii2 you can add exists() to your query.
User::find()
    ->where( [ 'id' => 1 ] )
    ->exists(); 


 if(Mastersettings::find()->where(['id'=>1,'status'=>1])->exists())
                    {
                        
                        ....... Your code Here ......

                    } 

exists() return value of true or false.



ActiveRecord model in database





Friday, 9 June 2017

Add date picker in dynamic form Yii2


Solutions for date picker does not work properly in dynamic forms


         Date picker widget add in dynamic form of yii2.



Problem using your yii2 extension, especialy the bootstrap datepicker is not show up.
You should add datepicker manually for dynamically genereted instances:

Add code in register javascript

$(".dynamicform_wrapper2").on("afterInsert afterDelete", function(e, item) {
        
        var VarItemsQuantity = $('.item2').length, VarCounter = 1;
        for(VarCounter; VarCounter < VarItemsQuantity; VarCounter++) {                     
            $('#dailyaccountbank-'+VarCounter+'-date').
                parent().datepicker({"autoclose":true,  "format":"d-m-yyyy", 'language':'ru',});                        
        };


View form like this



<?php

use yii\helpers\Html;
use yii\widgets\ActiveForm;
use wbraganca\dynamicform\DynamicFormWidget;
use yii\helpers\ArrayHelper;
use dosamigos\datepicker\DatePicker;


/* @var $this yii\web\View */
/* @var $model backend\modules\master\models\Students */

$this->title = 'Daily Account From';
//$this->params['breadcrumbs'][] = ['label' => 'Daily', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;

?>

<?php
           
    $script = <<< JS
            
        $(".dynamicform_wrapper").on("afterInsert afterDelete", function(e, item) {
        
        var VarItemsQuantity = $('.item').length, VarCounter = 1;
        for(VarCounter; VarCounter < VarItemsQuantity; VarCounter++) {                     
            $('#dailyaccountbank-'+VarCounter+'-date').
                parent().datepicker({"autoclose":true,  "format":"d-m-yyyy", 'language':'ru',});                        
        };
         
    });
            
            
JS;
$this->registerJs($script);
?>




<div class="students-create">


    <?php $form = ActiveForm::begin(['id' => 'dynamic-form']); ?>



    <!--Bank details-->
    
    <div class="lb-box-header lb-with-border">
        <h4 class="lb-box-title"><span class="glyphicon glyphicon-list-alt"></span> &nbsp;&nbsp;BANK REMITANCE DETAILS </h4>
    </div>

    <div class="row">        
        <div class="panel-body">
             <?php DynamicFormWidget::begin([
                'widgetContainer' => 'dynamicform_wrapper', // required: only alphanumeric characters plus "_" [A-Za-z0-9_]
                'widgetBody' => '.container-items', // required: css class selector
                'widgetItem' => '.item', // required: css class
                'limit' => 4, // the maximum times, an element can be cloned (default 999)
                'min' => 1, // 0 or 1 (default 1)
                'insertButton' => '.add-item', // css class
                'deleteButton' => '.remove-item', // css class
                'model' => $modelsDailyaccountbank[0],
                'formId' => 'dynamic-form',
                'formFields' => [
                    'date',
                    'particulars', 
                    'individual',
                    'mode',
                    'amount',
                ],
            ]); ?>

            <table width = "100%">
                <tr bgcolor="#ddd"><td  width="15%"><b><center>DATE</center></b></td><td><b><center>PARTICULARS</center></b></td><td><b><center>INDIVIDUAL/COMPANY</center></b></td><td width="10%"><b><center>MODE</center></b></td><td width="10%"><b><center>AMOUNT</center></b></td><td width="6%"><b><center>Action</center></b></td></tr>
            </table>
            <div class="container-items"><!-- widgetContainer -->
            <?php foreach ($modelsDailyaccountbank as $i => $modelDailyaccountfee): ?>
                <div class="item"><!-- widgetBody -->
                                               
                      
                        <table width = "100%">
                            <tr>
                                <td width="15%">
                                    <?= $form->field($modelDailyaccountfee, "[{$i}]date") //->textInput(['maxlength' => true])->label(false) 
                                    ->widget(
                    DatePicker::className(), [
                        // inline too, not bad
                         'inline' => FALSE,
                         // modify template for custom rendering
                        //'template' => '<div class="well well-sm" style="background-color: #fff; width:250px">{input}</div>',
                        'clientOptions' => [
                            'autoclose' => true,            
                            'format' => 'd-m-yyyy',
                            'todayHighlight' => true            
                            //'startDate' => $model->edate,
                        ]
                    ])->label(FALSE);
                                    
                                    
                                    ?>
   
                                    
                                </td>
                                <td>
                                    <?= $form->field($modelDailyaccountfee, "[{$i}]particulars")->textInput(['maxlength' => true])->label(false) ?>
                                </td>
                                <td>
                                    <?= $form->field($modelDailyaccountfee, "[{$i}]individual")->textInput(['maxlength' => true])->label(false) ?>
                                </td>
                                <td width="10%">
                                    <?= $form->field($modelDailyaccountfee, "[{$i}]mode")->textInput(['maxlength' => true])->label(false) ?>
                                </td>
                                <td width="10%">
                                    <?= $form->field($modelDailyaccountfee, "[{$i}]amount")->textInput(['maxlength' => true , 'style'=>'text-align:right'])->label(false) ?>
                                </td>
                                
                                <td width="6%">
                                    <button type="button" class="add-item btn btn-success btn-xs"><i class="glyphicon glyphicon-plus"></i></button>
                                    <button type="button" class="remove-item btn btn-danger btn-xs"><i class="glyphicon glyphicon-minus"></i></button>
                                </td>
                            </tr>
                        </table>
                            
                </div> 
            <?php endforeach; ?>
            </div>
            
            
            
            <?php DynamicFormWidget::end(); ?>
        </div>
    
    </div>




<!--    <div class="form-group">
        <= Html::submitButton('Create', ['class' => 'btn btn-success']) ?>
    </div>-->
    
<br>

    
    
    <div class="form-group col-xs-12 col-sm-6 col-lg-4 no-padding">
<div class="col-xs-6">
        <?= Html::submitButton('<i class="fa fa-print"></i> Print', ['class' => 'btn btn-block btn-success','formtarget'=>"_blank"]) ?>            
</div>
<div class="col-xs-6">
<?= Html::resetButton('Reset', ['class' => 'btn btn-default btn-block']) ?>
</div>
     </div>
    
    
    

    <?php ActiveForm::end(); ?>


</div>



You should add datepicker manually for dynamically genereted instances:


function multipleDatepickers()
{
    $(".dynamicform_wrapper").on("afterInsert afterDelete", function(e, item) {
        var VarItemsQuantity = $('.item').length,
            VarCounter = 1;
        for(VarCounter; VarCounter < VarItemsQuantity; VarCounter++) {
            $('#WorkExperiencesModel-' + VarCounter + '-StartDate').
                parent().datepicker({"autoclose":true,  "format":"dd-M-yyyy", 'language':'ru',});
            $('#WorkExperiencesModel-' + VarCounter + '-EndDate').
                parent().datepicker({"autoclose":true,  "format":"dd-M-yyyy", 'language':'ru',});
        };
    });
}




Related Links



Dynamic Forms in Yii2 Operations
Yii Tabular Input

Friday, 5 May 2017

Yii2 gridview widget filter

Yii2 dropdown in gridview widget filter

How to add dropdown list in the filter field Grid View ?


Add this in Gridview columns array:
[
    'attribute' => 'attribute_name',
    'value' => 'attribute_value',
    'filter' => Html::activeDropDownList($searchModel, 'attribute_name', ArrayHelper::map(ModelName::find()->asArray()->all(), 'ID', 'Name'),['class'=>'form-control','prompt' => 'Select Category']),
],




View code as

<?php

use yii\helpers\Html;
use yii\grid\GridView;
use backend\modules\employee\models\Employee;
use yii\helpers\ArrayHelper;


$this->title = 'Employee Log Books';
$this->params['breadcrumbs'][] = $this->title;
?>

<div class="employeelogbook-index box box-body table-responsive">
 
    <?php // echo $this->render('_search', ['model' => $searchModel]); ?>

    <p>
        <?= Html::a('Add Employee Log', ['create'], ['class' => 'btn btn-success']) ?>
    </p>
    <?= GridView::widget([
        'dataProvider' => $dataProvider,
        'filterModel' => $searchModel,
        'columns' => [
            ['class' => 'yii\grid\SerialColumn'],

            [
                'attribute'=>'employee_staff_id',
                'value'=>'employeeStaff.staff_name',
                'filter' => Html::activeDropDownList($searchModel, 'employee_staff_id', ArrayHelper::map(Employee::find()->where(['status'=>'Working'])->orderBy('staff_name')->all(),'staff_id','staff_name'),['class'=>'form-control','prompt' => 'Select Category']),
                'label'=>'Staff Name',
                'options' => ['width' => '200']
                
            ],
            [
       'attribute' => 'date',
       'format' =>  ['date', 'php:d-m-Y'],    
                'options' => ['width' => '150']
                //'filter'=>false,
   ],          
            //'center_ccid',
            'batch',
            'subject',
            'topic',
            'description',
            'rate',
            'ta',
            'hour',

         
            [        
                'class' => 'yii\grid\ActionColumn',
                'contentOptions' => ['style' => 'width:70px;'],
                'header'=>'Act',
                'template' => '{view} {update} {delete}',
                'options' => ['width' => '70']
            ],
        ],
    ]); ?>
</div>


Other solutions
[
    'attribute'=>'attribute name',
    'filter'=>array("ID1"=>"Name1","ID2"=>"Name2"),
],
OR
[
    'attribute'=>'attribute name',
    'filter'=>ArrayHelper::map(Model::find()->asArray()->all(), 'ID', 'Name'),
],


DatePicker in the Filter field GridView

use dosamigos\datepicker\DatePicker;


add this code in your gridview

        [
       'attribute' => 'date',
                'value' => 'date',
       'format' =>  ['date', 'php:d-m-Y'],    
                'options' => ['width' => '150'],
                'filter'=>DatePicker::widget([
                    'model' => $searchModel,
                    'attribute' => 'date',  
                        'clientOptions' => [
                            'autoclose' => true,
                            'format' => 'yyyy-m-d'
                        ]
                ])
   ],












Tuesday, 11 April 2017

Yii2 DetailsView Operations


DetailView is best used for displaying a model in a regular format (e.g. each model attribute is displayed as a row in a table.) The model can be either an instance of yii\base\Model or an associative array.
DetailView uses the $attributes property to determines which model attributes should be displayed and how they should be formatted.
A typical usage of DetailView is as follows:
echo DetailView::widget([
    'model' => $model,
    'attributes' => [
        'title',               // title attribute (in plain text)
        'description:html',    // description attribute in HTML
        [                      // the owner name of the model
            'label' => 'Owner',
            'value' => $model->owner->name,
        ],
        'created_at:datetime', // creation date formatted as datetime
    ],
]);

Examples of DetailsView


View Form

View Code

<?php
use yii\helpers\Html;
use yii\widgets\DetailView;
use backend\modules\tools\models\Groupitems;
$this->title = 'Note : '. $model->slno;
$this->params['breadcrumbs'][] = ['label' => 'Students Instructions Note', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>
<div class="studentsgblinvoicenote-view box box-body table-responsive">  
    <p>
        <?= Html::a('Update', ['update', 'ccid' => $model->ccid, 'slno' => $model->slno], ['class' => 'btn btn-primary']) ?>
        <?= Html::a('Delete', ['delete', 'ccid' => $model->ccid, 'slno' => $model->slno], [
            'class' => 'btn btn-danger',
            'data' => [
                'confirm' => 'Are you sure you want to delete this item?',
                'method' => 'post',
            ],
        ]) ?>
    </p>

    <?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            'slno',
            'course',
             'note1',
            'note2'                  
        ],
    ]) ?>
</div>

Controller action

 public function actionView($ccid, $slno)
    {
        return $this->render('view', [
            'model' => $this->findModel($ccid, $slno),
        ]);
    }


More Details

Karthik DetailView: http://demos.krajee.com/detail-view

Put line break in DetailsView

Textarea saved data to display in DeatilsView



<?php

use yii\helpers\Html;
use yii\widgets\DetailView;
use backend\modules\tools\models\Groupitems;

$this->title = 'Note : '. $model->slno;
$this->params['breadcrumbs'][] = ['label' => 'Students Instructions Note', 'url' => ['index']];
$this->params['breadcrumbs'][] = $this->title;
?>

<div class="studentsgblinvoicenote-view box box-body table-responsive">

   

    <p>
        <?= Html::a('Update', ['update', 'ccid' => $model->ccid, 'slno' => $model->slno], ['class' => 'btn btn-primary']) ?>
        <?= Html::a('Delete', ['delete', 'ccid' => $model->ccid, 'slno' => $model->slno], [
            'class' => 'btn btn-danger',
            'data' => [
                'confirm' => 'Are you sure you want to delete this item?',
                'method' => 'post',
            ],
        ]) ?>
    </p>

    <?= DetailView::widget([
        'model' => $model,
        'attributes' => [
            //'ccid',
            'slno',                      
            [
                'label'  => 'Course',
                'value'  => Groupitems::getGroupitems($model->course),           
            ],
           
            [
                'label' => 'Note 1',
                'format'=>'raw',
                'value' => nl2br($model->note1 ),
            ],    
     
            [
                'label' => 'Note 2',
                'format'=>'raw',
                'value' => nl2br($model->note2),
            ],  
           
        ],
    ]) ?>

</div>


Changing value of an attribute in DetailView widget

The above example call from function to display DetailsView
                'value'  => Groupitems::getGroupitems($model->course),       


<?= DetailView::widget([
    'model' => $model,
    'attributes' => [
        'name',
        'max_people_count',
        'type',
        [
             'attribute' => 'recurring',
             'format'=>'raw',
             'value'=> function ($model) {
                        if($model->recurring == 1)
                        {

                            return 'yes';

                        } 
                        else {
                        return 'no';
                        }
                      },
        ],
        'day',
        'time',
        ...

'value' => $model->recurring == 1 ? 'yes' : 'no'
The nl2br() function inserts HTML line breaks (<br> or <br />) in front of each newline (\n) in a string.



Related Links

DropDownList

Yii2 Dependent Drop Down Lists

CheckboxList Advanced Operations

Yii2 ListBox Field