var gulp = require('gulp');
var sass = require('gulp-sass');
var rename = require('gulp-rename');
gulp.task('styles', function () {
gulp
.src('index.scss')
.pipe(sass())
.pipe(rename('app.css'))
.pipe(gulp.dest('public'));
})
gulp.task('default', ['styles'])
lunes, 29 de agosto de 2016
Gestores de Javascript
GESTORES DE PAQUETES
http://duojs.org/
https://bower.io/
https://www.npmjs.com/
PACKAGE BUNDLING
https://webpack.github.io/
GESTORES DE TAREAS
http://gruntjs.com/
http://gulpjs.com/
PREPROCESADORES CSS
http://sass-lang.com/
http://lesscss.org/
http://stylus-lang.com/
MOTORES DE TEMPLATES
http://jade-lang.com/ tambien conocido como pug
http://html2jade.org/ convertidor de html a jade
Crear servidor basico con node
Una vez instalado node, npm express
$npm install --save express
var express = require('express'); //busca en node_modules
var app = express();
app.get('/', function (req, res) {
res.send('Hola mundo!');
})
app.listen(3000, function (err) {
if (err) return console.log('Hubo un error'), process.exit(1);
console.log('Platzigram escuchando en el puerto 3000');
})
Se ejecuta con
$node server.js
$npm install --save express
var express = require('express'); //busca en node_modules
var app = express();
app.get('/', function (req, res) {
res.send('Hola mundo!');
})
app.listen(3000, function (err) {
if (err) return console.log('Hubo un error'), process.exit(1);
console.log('Platzigram escuchando en el puerto 3000');
})
Se ejecuta con
$node server.js
Desarrollo Web
Todo proyecto web tiene 3 bloques esenciales:
HTML: Qué otorga toda la estructura o semántica a nuestro sitio.
CSS: Aquél que le da el estilo y hace de nuestro sitio algo único.
JavaScript: Con JavaScript ganamos interacción en el sitio y prácticamente es el lenguaje de programación en el que está escrito todo sitio web, inclusive, se encuentra en el backend, algo impensable hace años. JavaScript además es muy versátil, puedes construir desde aplicaciones de escritorio, aplicaciones nativas para dispositivos móviles, aplicaciones de consola etc. JavaScript se está comiendo al mundo.
HTML: Qué otorga toda la estructura o semántica a nuestro sitio.
CSS: Aquél que le da el estilo y hace de nuestro sitio algo único.
JavaScript: Con JavaScript ganamos interacción en el sitio y prácticamente es el lenguaje de programación en el que está escrito todo sitio web, inclusive, se encuentra en el backend, algo impensable hace años. JavaScript además es muy versátil, puedes construir desde aplicaciones de escritorio, aplicaciones nativas para dispositivos móviles, aplicaciones de consola etc. JavaScript se está comiendo al mundo.
martes, 16 de agosto de 2016
Autoload en composer
$composer init
{
"name": "root/php-laravel",
"description": "Proyecto platzi",
"authors": [
{
"name": "Cesar Morones",
"email": "cesar.morones1@gmail.com"
}
],
"require": {},
"autoload":{
"psr-4":{
"PlatziPHP\\":"src/"
}
}
}
¿Qué es PSR-4?
Es una especificación para la auto carga de clases desde la ruta de los archivos. Describe dónde se encuentran ubicados los archivos que serán autocargados. PSR-4 hace uso de namespaces para distinguir una clase de otra, esto es de gran ayuda cuando ocupamos librerías de terceros porque en muchas ocaciones existirán clases con el mismo nombre que las nuestras y podrían sobreescribirse o usar una que no queremos.
PSR-4 fue creada por el grupo de interoperabilidad de PHP, ellos han trabajado en la creación de especificaciones de desarrollo para este lenguaje para que estandarizemos diferentes procesos, como es en este caso el como nombrar las clases de nuestro proyecto y hacer uso de ellas.
Usar especificaciones PSR-4 no es obligatorio y su uso puede ser completo o parcial, aunque es recomendable no omitirlo porque a Composer le permite cargar nuestras clases automaticamente.
{
"name": "root/php-laravel",
"description": "Proyecto platzi",
"authors": [
{
"name": "Cesar Morones",
"email": "cesar.morones1@gmail.com"
}
],
"require": {},
"autoload":{
"psr-4":{
"PlatziPHP\\":"src/"
}
}
}
$composer install
Se genera el archivo autoload.php
<?php
// autoload.php @generated by Composer
require_once __DIR__ . '/composer' . '/autoload_real.php';
return ComposerAutoloaderInit5748c7d7212ca7928ae93c42af2f4660::getLoader();
Lo cual nos va ayudar a des
viernes, 12 de agosto de 2016
dropDownList con base de datos
use yii\widgets\ActiveForm;
use app\models\CatCarreras;
<?= $form->field($model,'id_carrera')->dropDownList(
ArrayHelper::map(CatCarreras::find()->all(),'id','ciudad')
) ?>
use app\models\CatCarreras;
<?= $form->field($model,'id_carrera')->dropDownList(
ArrayHelper::map(CatCarreras::find()->all(),'id','ciudad')
) ?>
jueves, 11 de agosto de 2016
miércoles, 10 de agosto de 2016
poner un contador en un gridview con SerialColumn
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'user.username',
[
'attribute' => 'live',
'header' => 'Live?',
'value'=>function($data) {
return ($data->live == 1) ? "Live" : "Draft";
},
'filter' => ['0' => 'Draft', '1' => 'Live'],
],
'title',
[
'header' => 'Snippet',
'value'=>function($data) {
return substr($data->content, 0, 100);
290CHAPTER 12. WORKING WITH WIDGETS
},
'format'=>'html'
],
// 'date_updated',
// 'date_published',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'user.username',
[
'attribute' => 'live',
'header' => 'Live?',
'value'=>function($data) {
return ($data->live == 1) ? "Live" : "Draft";
},
'filter' => ['0' => 'Draft', '1' => 'Live'],
],
'title',
[
'header' => 'Snippet',
'value'=>function($data) {
return substr($data->content, 0, 100);
290CHAPTER 12. WORKING WITH WIDGETS
},
'format'=>'html'
],
// 'date_updated',
// 'date_published',
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
Giltros en gridview
# views/user/index.php
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'username',
'email:email',
[
'attribute' => 'type',
'filter' => ['public' => 'Public', 'author' => 'Author',
'admin' => 'Admin'],
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'username',
'email:email',
[
'attribute' => 'type',
'filter' => ['public' => 'Public', 'author' => 'Author',
'admin' => 'Admin'],
],
['class' => 'yii\grid\ActionColumn'],
],
]); ?>
Grid en yii2
# views/page/index.php
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'user.username',
[
'header' => 'Live?',
'value'=>function($data) {
return ($data->live == 1) ? "Live" : "Draft";
}
],
'title',
[
'header' => 'Snippet',
'value'=>function($data) {
return substr($data->content, 0, 100);
},
'format' => 'html'
],
'content:html',
// 'date_updated',
// 'date_published',
['class' => 'yii\grid\ActionColumn'],
],
)); ?>
<?= GridView::widget([
'dataProvider' => $dataProvider,
'filterModel' => $searchModel,
'columns' => [
['class' => 'yii\grid\SerialColumn'],
'id',
'user.username',
[
'header' => 'Live?',
'value'=>function($data) {
return ($data->live == 1) ? "Live" : "Draft";
}
],
'title',
[
'header' => 'Snippet',
'value'=>function($data) {
return substr($data->content, 0, 100);
},
'format' => 'html'
],
'content:html',
// 'date_updated',
// 'date_published',
['class' => 'yii\grid\ActionColumn'],
],
)); ?>
martes, 9 de agosto de 2016
Transactions
$transaction = \Yii::$app->db->beginTransaction();
try {
\Yii::$app->db->createCommand($sql)->execute();
\Yii::$app->db->createCommand($sql)->execute();
//[ ... more queries ...]
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
}
try {
\Yii::$app->db->createCommand($sql)->execute();
\Yii::$app->db->createCommand($sql)->execute();
//[ ... more queries ...]
$transaction->commit();
} catch (\Exception $e) {
$transaction->rollBack();
}
ejecutar querys con parametros
\Yii::$app->db ->createCommand("UPDATE user SET first_name = 'Tom' WHERE id = " . $_GET['id']) ->execute();
\Yii::$app->db ->createCommand("UPDATE user SET first_name = :name WHERE id = :id)
->bindValue(':name', 'Tom')
->bindValue(':id', $_GET['id'])
->execute();
Alternatively, we can use the bindValues() method to bind several parameters into a
single call:
\Yii::$app->db ->createCommand("UPDATE user SET first_name = :name WHERE id = :id)
->bindValues([ ':name' => 'Tom', ':id' => $_GET['id'] ])
->execute();
For convenience, the previous query can be rewritten so that the parameters are in line
with the createCommand() method:
$params = [ ':name' => 'Tom', ':id' => $_GET['id'] ];
\Yii::$app->db ->createCommand("UPDATE user SET first_name = :name WHERE id = :id, $params) ->execute();
\Yii::$app->db ->createCommand("UPDATE user SET first_name = :name WHERE id = :id)
->bindValue(':name', 'Tom')
->bindValue(':id', $_GET['id'])
->execute();
Alternatively, we can use the bindValues() method to bind several parameters into a
single call:
\Yii::$app->db ->createCommand("UPDATE user SET first_name = :name WHERE id = :id)
->bindValues([ ':name' => 'Tom', ':id' => $_GET['id'] ])
->execute();
For convenience, the previous query can be rewritten so that the parameters are in line
with the createCommand() method:
$params = [ ':name' => 'Tom', ':id' => $_GET['id'] ];
\Yii::$app->db ->createCommand("UPDATE user SET first_name = :name WHERE id = :id, $params) ->execute();
Ejecutando querys deinsert y update
\Yii::$app->db ->createCommand('INSERT INTO user (email, password) VALUES
("test3@example.com", "test3");') ->execute();
// INSERT ( tablename, [ attributes => attr ] )
\Yii::$app->db
->createCommand()
->insert('user', [
'email' => 'test4@example.com',
'password' => 'changeme7',
'first_name' => 'Test',
'last_name' => 'User',
'created_at' => time(),
'updated_at' => time()
])
->execute();
// DELETE ( tablename, condition )
\Yii::$app->db
->createCommand()
->delete('user', 'id = 3')
// batchInsert( tablename, [ properties ], [ rows ] )
\Yii::$app->db
->createCommand()
->batchInsert('user', ['email', 'password', 'first_name', 'last_name',
'created_at', 'updated_at'],
[
['james.franklin@example.com', 'changeme7', 'James', 'Franklin',
time(), time()],
['linda.marks@example.com', 'changeme7', 'Linda', 'Marks', time(),
time()]
['roger.martin@example.com', 'changeme7', 'Roger', 'Martin',
time(), time()]
])
->execute();
("test3@example.com", "test3");') ->execute();
// INSERT ( tablename, [ attributes => attr ] )
\Yii::$app->db
->createCommand()
->insert('user', [
'email' => 'test4@example.com',
'password' => 'changeme7',
'first_name' => 'Test',
'last_name' => 'User',
'created_at' => time(),
'updated_at' => time()
])
->execute();
// DELETE ( tablename, condition )
\Yii::$app->db
->createCommand()
->delete('user', 'id = 3')
// batchInsert( tablename, [ properties ], [ rows ] )
\Yii::$app->db
->createCommand()
->batchInsert('user', ['email', 'password', 'first_name', 'last_name',
'created_at', 'updated_at'],
[
['james.franklin@example.com', 'changeme7', 'James', 'Franklin',
time(), time()],
['linda.marks@example.com', 'changeme7', 'Linda', 'Marks', time(),
time()]
['roger.martin@example.com', 'changeme7', 'Roger', 'Martin',
time(), time()]
])
->execute();
uso de queryColumn en yii2
$user = \Yii::$app->db->createCommand('SELECT email FROM user;')
->queryColumn();
Like queryAll() , queryColumn() will return an array of results:
Array
(
[0] => test@example.com
)
->queryColumn();
Like queryAll() , queryColumn() will return an array of results:
Array
(
[0] => test@example.com
)
Traer varios registros de la base de datos
$users = \Yii::$app->db ->createCommand('SELECT * FROM user;')
->queryAll();
After running this command, our $users variable will be populated with an array of users:
Array
(
[0] => Array
(
[id] => 1
[email] => test@example.com
[password] => test123
[first_name] => test
[last_name] => user
[created_at] => 0
[updated_at] => 0
)
)
->queryAll();
After running this command, our $users variable will be populated with an array of users:
Array
(
[0] => Array
(
[id] => 1
[email] => test@example.com
[password] => test123
[first_name] => test
[last_name] => user
[created_at] => 0
[updated_at] => 0
)
)
Traer un registro de la base de datos
$user = \Yii::$app->db ->createCommand('SELECT * FROM user WHERE id= 1;')
->queryOne();
The queryOne() method returns an array of data for a single element. In the event that no data is found, this method will return false :
Array
(
[id] => 1
[email] => test@example.com
[password] => test123
[first_name] => test
[last_name] => user
[created_at] => 0
[updated_at] => 0
)
->queryOne();
The queryOne() method returns an array of data for a single element. In the event that no data is found, this method will return false :
Array
(
[id] => 1
[email] => test@example.com
[password] => test123
[first_name] => test
[last_name] => user
[created_at] => 0
[updated_at] => 0
)
Obtener contar un queryScalar
$count = \Yii::$app->db ->createCommand('SELECT COUNT(*) FROM user;')
->queryScalar();
->queryScalar();
jueves, 4 de agosto de 2016
validaciones que s epueden usar en yii2
https://github.com/yiisoft/yii2/blob/master/docs/guide/tutorial-core-validators.md
https://github.com/yiisoft/yii2/blob/master/docs/guide/input-validation.md
https://github.com/yiisoft/yii2/blob/master/docs/guide/input-validation.md
martes, 2 de agosto de 2016
campos ocultos en yii
hidden field with model and form:
<?php echo $form->hiddenField($model, 'name'); ?>
or without model
<?php echo CHtml::hiddenField('name' , 'value', array('id' => 'hiddenInput')); ?>
Suscribirse a:
Entradas (Atom)