Entradas

Chat en la aplicación de Yii2 utilizando WebSocket

Imagen
 1.-  Añadir en el composer.json: "consik/yii2-websocket": "^1.0" 2.- Ejecutar el composer update en el cmd: composer update --prefer-dist WebSockets es una conexión bidereccional del navegador web  con el servidor. Una vez que la conexión de Websocket esta establecida se mantiene abierta hasta que el cliente o el servidor decide cerrarla. Con esta conexión abierta el cliente o el servidor puede enviar un mensaje en cualquier momento, esto hace que la programación web se vuelva enteramente conducida por eventos, no solo cuando el usuario la inicie. Ratchet es una librería de PHP WebSocket  cuyos componentes pueden hacer que la aplicación soporte WebSockets en el lado del servidor. Con este widget podemos utilizar la librería de Ratchet y hacer nuestro chat asi como graficos en tiempo real etc. 3.- Revisar la documentación: https://github.com/consik/yii2-websocket http://socketo.me/ 4.- Vamos a crear una carpeta que le vamos a llamar daemons (siguiendo el ejemplo que

Google Chart con Pjax

Imagen
1.- Crear la tabla: CREATE TABLE `yii2_proyecto`.`author_sales` ( `id` INT NOT NULL AUTO_INCREMENT , `author_id` INT NOT NULL , `dateSale` DATE NOT NULL , `quantityBook` INT NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB; ALTER TABLE `author_sales` ADD FOREIGN KEY (`author_id`) REFERENCES `author`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; 2.- Crear Modelo Table Name: author_sales Model Class Name: AuthorSales Namespace: backend\modules\bookstore\models\AuthorSales 3.- En el model añadir el use con la tabla author que está relacionada: use backend\modules\bookstore\models\Author\Author; 4.- Generar el crud: Model Class: backend\modules\bookstore\models\AuthorSales\AuthorSales Search Model Class: backend\modules\bookstore\models\AuthorSales\AuthorSalesSearch Controller Class: backend\modules\bookstore\controllers\AuthorSalesController View Path: @backend/modules/bookstore/views/author-sales 5.- Ingresar valores a la tabla 6.- Añadir en el controlador:     public function actionChart()  

Implementación de Google Chart en Yii2 ("scotthuangzl/yii2-google-chart")

Imagen
 1.- Colocar en el archivo de composer.json: "scotthuangzl/yii2-google-chart": "dev-master" 2.- Ejecutar en el archivo de cmd:  composer update --prefer-dist 3.- Colocar en el Controlador: use scotthuangzl\googlechart\GoogleChart; 4.- En el controlador, en el método actionChart que se creó en una entrada anterior:         $dataSale[]= [Yii::t('app', 'Authors'),Yii::t('app', 'Total Sales')];         $modelArray =   Author::find()->orderBy('total_sale DESC')->limit(10)->all();          foreach ($modelArray as $value) {               $dataSale[] = [$value['name'],(double)$value['total_sale']];         }            $chartGoogleSale =  GoogleChart::widget(              array('visualization' => 'ColumnChart',                 'data' => $dataSale,                 'options' => array(                   'title' => '',                   'hAxis'=&g

Instalación de un Widget de Gráficos (FusionChart)

Imagen
 1.- Adicionar en el composer: "ptrnov/yii2-fusionchart": "*" 2.- Ejecutar en el cmd del proyecto: composer update --prefer-dist 3.- Crear un archivo para la vista con nombre chart.php: <?php use ptrnov\fusionchart\ChartAsset; /* @var $this yii\web\View */ /* @var $searchModel backend\modules\bookstore\models\Author\AuthorSearch */ /* @var $dataProvider yii\data\ActiveDataProvider */ $this->title = Yii::t('app', 'Chart'); $this->params['breadcrumbs'][] = $this->title; ChartAsset::register($this);      ?> <div class="row">     <div class="col-sm-6">         <div class="book-chart">             <?=$chartBook?>         </div>     </div>     <div class="col-sm-6">         <div class="sale-chart">         <?=$chartSale?>         </div>     </div> </div> 4.- En el controlador adicionar: use ptrnov\fusionchart\Char

Implementando un formulario tipo Wizard con un formulario Tabular

Imagen
Vamos a estar unificando varios formularios en uno, y además utilizando el formulario tabular de esta extensión:  1.- Instalar widget de formwizard, añadir al composer.json: "buttflattery/yii2-formwizard":"@dev" 1.1.- Ejecutar  en el cmd de la carpeta del proyecto: composer update --prefer-dist 2.- Colocar en el form el use del widget: use buttflattery\formwizard\FormWizard; 3.- Colocar el form: <?= FormWizard::widget(     [         'formOptions' => [             'id' => 'my_form_tabular'                      ],         'theme' => FormWizard::THEME_ARROWS,         'labelNext' => Yii::t('app', 'Next'),         'labelPrev' => Yii::t('app', 'Previous'),         'labelFinish' => Yii::t('app', 'Finish'),                  'steps' => [         [                 'model' => $author,                 'title' => Yii::t(

Formulario con Select2 Kartik Múltiple

Imagen
En esta entrada les muestro como modificar el formulario para que podamos ingresar múltiples elementos en el selector y como guardar en el modelo:  1.- Modificar el formulario colocando los selectores:  <?=  $form->field($model, 'author_id')->widget(Select2::classname(), [     'data' => ArrayHelper::map(Author::find()->all(), 'id', 'name'),     'theme' => Select2::THEME_BOOTSTRAP,     'size' => Select2::LARGE,     'options' => ['placeholder' => Yii::t('app', 'Select...')],     'pluginOptions' => [         'allowClear' => true     ], ]);      ?>    <?=  $form->field($model, 'bookArray')->widget(Select2::classname(), [     'data' => ArrayHelper::map(Book::find()->all(), 'id', 'name'),     'theme' => Select2::THEME_BOOTSTRAP,     'size' => Select2::LARGE,     'op

Formulario con Select2

Imagen
En esta entrada les muestro como modificar un formulario generado de una tabla de muchos a muchos:  1.- Modificar el formulario colocando los selectores:  <?=  $form->field($model, 'author_id')->widget(Select2::classname(), [     'data' => ArrayHelper::map(Author::find()->all(), 'id', 'name'),     'theme' => Select2::THEME_BOOTSTRAP,     'size' => Select2::LARGE,     'options' => ['placeholder' => Yii::t('app', 'Select...')],     'pluginOptions' => [         'allowClear' => true     ], ]);      ?>  <?=  $form->field($model, 'book_id')->widget(Select2::classname(), [     'data' => ArrayHelper::map(Book::find()->all(), 'id', 'name'),     'theme' => Select2::THEME_BOOTSTRAP,     'size' => Select2::LARGE,     'options' => ['placeholder' => Yii::t