Desarrollo PHP para todos
Blog para el aprendizaje de las tecnologías usadas para el desarrollo Web (PHP,MySQL,HTML,JAVASCRIPT) y algo mas
lunes, 3 de diciembre de 2012
Zend y Symfomy el equipo perfecto
Una diapositiva muy interesante que conseguí leyendo un poco los temas que se trataron en la ZendCon 2012
Espero que sirva un poco, para ver las cosas que se pueden hacer si se siguen bien los standares, saludos
miércoles, 8 de agosto de 2012
Script de comparación entre rangos de fechas
Este es un pequeño script que realice para dar una respuesta en foros del web, y me pareció que vale la pena compartirlo, ando un poco fiebruo con eso de los closures, por lo que me hice uno para hacer este script
date_default_timezone_set('UTC');
$rangeBettweenRange = function(array $range1, array $range2) {
$from1 = new DateTime($range1[0]);
$to1 = new DateTime($range1[1]);
$from2 = new DateTime($range2[0]);
$to2 = new DateTime($range2[1]);
$range1Diff = $from1->diff($to1);
for($i = 0; $i <= $range1Diff->days; $i++) {
if($from1 >= $from2 && $from1 <= $to2) {
$return[$from1->format('d-m-Y')] = "in the range
";
} else {
$return[$from1->format('d-m-Y')] = "out the range
";
}
$from1->modify("+1 day");
}
return $return;
};
El resultado es algo como esto
Array
(
[01-01-2012] => out the range
[02-01-2012] => out the range
[03-01-2012] => out the range
[04-01-2012] => out the range
[05-01-2012] => out the range
[06-01-2012] => out the range
[07-01-2012] => out the range
[08-01-2012] => out the range
[09-01-2012] => out the range
[10-01-2012] => out the range
[11-01-2012] => out the range
[12-01-2012] => out the range
[13-01-2012] => out the range
[14-01-2012] => out the range
[15-01-2012] => in the range
[16-01-2012] => in the range
[17-01-2012] => in the range
[18-01-2012] => in the range
[19-01-2012] => in the range
[20-01-2012] => in the range
[21-01-2012] => in the range
[22-01-2012] => in the range
[23-01-2012] => in the range
[24-01-2012] => in the range
[25-01-2012] => in the range
[26-01-2012] => in the range
[27-01-2012] => in the range
[28-01-2012] => in the range
[29-01-2012] => in the range
[30-01-2012] => in the range
[31-01-2012] => in the range
)
el que hacer con el resultado ya queda del desarrollador.
Espero que el script sea de utilidad, saludos
Etiquetas:
PHP
| Reacciones: |
jueves, 26 de julio de 2012
Temas más vistos y con más respuestas de MyBB Forum con YiiFramework
En esta entrada compartiré unos pequeños script que realice para la gente de yiiframework en español, esarriba, como hacerlo, luego en un proyecto creado con YiiFramework generamos el modelo Threads con la herramienta Gii de YiiFramework, también necesitaremos generar el modelo Posts, un simple script que nos permite por medio de YiiFramework conocer los temas más vistos y con más respuestas de un foro de MyBB.
Aclarando que ya tenemos que tener configurado el foro de MyBB, pueden ver en el enlace que se dejo
arriba como hacerlo, luego en un proyecto creado con YiiFramework generamos el modelo Threads con la herramienta Gii de YiiFramework, también necesitaremos generar el modelo Posts ambos extienden del Active Record de Yii, comenzamos a trabajar en nuestro código
Lo primero es hacer la relación entre ambos models/Threads.php
De esta manera tenemos la relación, una vez establecemos esto, realizamos el método hotpost, que es el que nos da los datos que necesitamos
Como vemos estamos obteniendo un nuevo atributo para la categoría por respuesta, entonces tenemos que agregar a nuestra clase Threads el atributo length
Ahora, hacemos la vista, esta consta de un CListView,
views/site/index-test.php
Disculpen los horrores en las etiquetas html, no le tengo instalado plugin para codigo al blog, por eso no esta el principio <.
Ahora solo nos queda realizar el código de
views/site/_hotpostitem.php
Aclarando que ya tenemos que tener configurado el foro de MyBB, pueden ver en el enlace que se dejo
arriba como hacerlo, luego en un proyecto creado con YiiFramework generamos el modelo Threads con la herramienta Gii de YiiFramework, también necesitaremos generar el modelo Posts ambos extienden del Active Record de Yii, comenzamos a trabajar en nuestro código
Lo primero es hacer la relación entre ambos models/Threads.php
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'posts' => array(self::HAS_MANY, 'posts', 'tid'),
);
}
models/Posts.php
/**
* @return array relational rules.
*/
public function relations()
{
// NOTE: you may need to adjust the relation name and the related
// class name for the relations automatically generated below.
return array(
'threads' => array(self::BELONGS_TO, 'Threads', 'tid'),
);
}
De esta manera tenemos la relación, una vez establecemos esto, realizamos el método hotpost, que es el que nos da los datos que necesitamos
/**
* hotThread return the hot threads of the foro
* @param string $type [description]
* @param integer $length [description]
* @return [type] [description]
*/
public function hotThread($type = 'views', $length = 5)
{
if($type == 'views') { //shows the hotpost for views
$criteria = new CDbCriteria();
$criteria->select = 'tid, subject, views, dateline, username';
$criteria->with = array(
'posts'=>array(
'joinType'=>'LEFT JOIN',
'order' => 'pid',
),
);
$criteria->order = 'views DESC';
$criteria->together = true;
$criteria->limit = $length;
$dataProvider = new CActiveDataProvider($this, array(
'criteria' => $criteria,
'pagination'=>array(
'pageSize'=>20,
),
));
} elseif($type == 'answerd') { //show the hotpost by answerd
$criteria = new CDbCriteria();
$criteria->select = 'tid, COUNT(posts.tid) as length, subject, views, dateline, username';
$criteria->order = 'length DESC';
$criteria->with = array(
'posts'=>array(
'joinType'=>'RIGHT JOIN',
'order' => 'pid',
),
);
$criteria->together = true;
$criteria->group = 'posts.tid';
$criteria->limit = $length;
$dataProvider = new CActiveDataProvider($this, array(
'criteria' => $criteria,
));
}
return $dataProvider;
}
Como vemos estamos obteniendo un nuevo atributo para la categoría por respuesta, entonces tenemos que agregar a nuestra clase Threads el atributo length
class Threads extends CActiveRecord
{
public $length;
/*...*/
Ya que obtuvimos los hotpost por su respectiva categoria (visitas y respuestas), ahora realizaremos el controller,
controllers/SiteController.php
public function actionHotpost()
{
$threads = new Threads();
$dataProviderVisitPost = $threads->hotThread('views');
$dataProviderMostAnswerdPost = $threads->hotThread('answerd');
$this->render('index-test',array(
'dataProviderVisitPost'=>$dataProviderVisitPost,
'dataProviderMostAnswerdPost' => $dataProviderMostAnswerdPost)
);
}
Ahora, hacemos la vista, esta consta de un CListView,
views/site/index-test.php
pageTitle=Yii::app()->name; ?>
h1="">
titulo de la pagina
/h1>
h2="">
Temas más Visitados
widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProviderVisitPost,
'itemView'=>'_hotpostitem',
));?>
h2="">
Con mayor numero de respuesta /h2>
widget('zii.widgets.CListView', array(
'dataProvider'=>$dataProviderMostAnswerdPost,
'itemView'=>'_hotpostitemvisit',
));?>
Disculpen los horrores en las etiquetas html, no le tengo instalado plugin para codigo al blog, por eso no esta el principio <.
Ahora solo nos queda realizar el código de
views/site/_hotpostitem.php
div class="view"> h2>subject); ?>/h2> span>Creado por: username);?> en la fecha dateline));?>/span> p>Visto: views); ?>/p> p>posts[0]->message, 0, 350)); ?>/p> a href="http://localhost/mybb/Upload/showthread.php?tid=tid)?>" alt="leer mas">Leer mas/a> /div>Y de views/site/_hotpostitemvisit.php
div class="view"> h2>subject); ?>/h2> span>Creado por: username);?> en la fecha dateline));?>/span> p>Cantidad de Respuestas: length - 1); ?>/p> p>posts[0]->message, 0, 350)); ?>/p> a href="http://localhost/mybb/Upload/showthread.php?tid=tid)?>" alt="leer mas">Leer mas/a> /div>Espero que este sirva de agrado a los que lo lean, el código pronto estará en github, en la cuenta de yienespanol y en la de mi persona, saludos
Etiquetas:
PHP,
POO,
YiiFramework
| Reacciones: |
sábado, 14 de julio de 2012
CrugeMailer una extensión para enviar correos electrónicos con YiiFramework
Buenas esta entrada es para presentar la librería CrugeMailer, es una librería para enviar correos electrónicos con YiiFramework, simple de configurar, simple de usar implemeta la librería Swiftmailer para enviar correos electrónicos con php.
¿Como la usamos?
Clonamos la librería en la carpeta extensions de nuestra aplicación "pathapplication/protected/extensions"
Necesitamos también la librería swiftmailer para esto realizamos los siguiente
Una vez tenemos la librería instalada la librería tenemos que hacer la configuración en el main
Yii::app()->crugemailer->sendEmail('el cuerpo de lo que va a ser enviado en el mensaje',
/*destinatario del mensaje*/array('carlos.belisario.gonzalez@gmail.com'),
array('contac@midominio.com'),/*opcional puede configurarse en
el application/config/main*/
'Asunto del Correo Electrónico'/*opcional*/);
Y ya estamos enviando correos electrónicos desde YiiFramework con la librería swiftmailer
Espero que la librería les sea útil, esta todavía en desarrollo para mas funcionalidades pero actualmente ya envia los correos, saludos
¿Como la usamos?
Clonamos la librería en la carpeta extensions de nuestra aplicación "pathapplication/protected/extensions"
cd /pathapp/protected/extensions/
git clone https://github.com/carlosbelisario/crugemailer
Necesitamos también la librería swiftmailer para esto realizamos los siguiente
git submodule init git submodule update
Una vez tenemos la librería instalada la librería tenemos que hacer la configuración en el main
'import'=>array(
'application.models.*',
'application.components.*',
'application.extensions.crugemailer.*',
),
'component' => array(
/*...*/
'crugemailer'=>array(
'class' => 'application.extensions.crugemailer.CrugeSwiftMailer',
'mailfrom' => 'christiansalazarh@gmail.com',
'transport' => 'gmail' // gmail para usar el stmp de gmail (recomendado), no especificarlo trabajara la librería con la función mail de php
/**
*
* obligatorios si el transporte es gmail
*/
'gmailAcount' => 'carlos.belisario.gonzalez@gmail.com',
'gmailPassword' => 'password de gmail',
'subjectprefix' => 'Prefijo que deseas agregar, es opcional - ',
),
);Luego de tenerla configurada simplemente cuando necesitemos mandar un mail lo que debemos hacer es lo siguiente
Yii::app()->crugemailer->sendEmail('el cuerpo de lo que va a ser enviado en el mensaje',
/*destinatario del mensaje*/array('carlos.belisario.gonzalez@gmail.com'),
array('contac@midominio.com'),/*opcional puede configurarse en
el application/config/main*/
'Asunto del Correo Electrónico'/*opcional*/);
Y ya estamos enviando correos electrónicos desde YiiFramework con la librería swiftmailer
Espero que la librería les sea útil, esta todavía en desarrollo para mas funcionalidades pero actualmente ya envia los correos, saludos
Etiquetas:
extensiones,
PHP,
YiiFramework
| Reacciones: |
sábado, 30 de junio de 2012
Configurando la Extensión YiiDoctrine2Orm
Buenas en esta
entrada indicaré cada uno de los pasos a seguir para configurar la
extensión YiiDoctrine2Orm y
tener disponible el popular ORM Doctrine2 en una aplicación creada
con YiiFramework, esta entrada me surge de el pequeño trabajo que me
dio configurarla (ya que en la web oficial no tienen un tutorial paso
a paso de la configuración) aunque abriendo los archivos de la extensión es muy intuitiva e incluso te traen el main.php y console.php de ejemplo para que puedas tener esta librería a disposición.
Lo primero que tenemos que hacer claro esta es bajar los archivos de
la extensión desde la página del proyecto, también tenemos que tener instalado también Doctrine 2 en nuestro equipo personalmente tengo el ORM en un repositorio separado a la de los proyectos y tengo un link a las carpetas del proyecto para poder hacer las actualizaciones al mismo y que este cambie en todos los proyectos que uso (en desarrollo cuando pasa a producción si es en un servidor externo hay que copiar las librerías).
Una vez tenemos el ORM y la extensión de YiiFRamework, descomprimimos la carpeta d2ormext-1.0.1.zip, en la carpeta "/applicationpath/protected/extensions/", una vez descomprimida ingresaremos a la carpeta "/applicationpath/protected/extensions/Wildkat/YiiExt/DoctrineOrm/vendor/Doctrine/" y hacemos lo siguiente
ln -s /ruta/hacia/doctrine2/lib/vendor/doctrine-common Common
ln -s /ruta/hacia/doctrine2/lib/vendor/doctrine-dbal DBAL
ln -s /ruta/hacia/doctrine2/lib/vendor/doctrine-build-common build-common
ln -s /ruta/hacia/doctrine2/lib/Doctrine/ORM ORM
Ahora nos posicionamos en la carpeta "/applicationpath/protected/extensions/Wildkat/YiiExt/DoctrineOrm/vendor/Symfony" y hacemos el siguiente enlace
ln -s /ruta/hacia/doctrine2/lib/vendor/Symfony/Component Component
Una vez tenemos estos archivos debemos hacer lo siguiente en nuestro archivo applicationpath/protected/config/main.php y applicationpath/protected/config/console.php
agregamos la siguiente linea antes del arreglo
Yii::setPathOfAlias('Wildkat', realpath(dirname(__FILE__) . '/../extensions/Wildkat'));
luego en el indice componente del arreglo agregamos lo siguiente
'components'=>array(
// los componentes que ya tengamos configurados
'doctrine' => array(
'class' => 'Wildkat\YiiExt\DoctrineOrm\DoctrineContainer',
'dbal' => array(
'default' => array(
'driver' => 'pdo_mysql',
'host' => 'localhost',
'dbname' => 'dbname',
'user' => 'userdb',
'password' => 'passworddb',
),
),
'cache' => array(
'default' => array(
'driver' => 'ArrayCache',
'namespace' => '__app',
),
),
'entityManager' => array(
'default' => array(
'connection' => 'default',
'metadataCache' => 'default',
'queryCache' => 'default',
'entityPath' => 'application.models.entities',
'mappingDriver' => 'YamlDriver',
'mappingPaths' => array(
'application.models.entities'
),
'proxyDir' => 'application.data',
'proxyNamespace' => 'Proxy',
),
),
),
Una vez tenemos esta configuración ahora tenemos que copiar el archivo applicationpath/protected/extensions/Wildkat/YiiExt/DoctrineOrm/commands/DoctrineOrmCommand.php a la carpeta applicationpath/protected/commands para tener disponible en yiic las ordenes para trabajar con doctrine.
Como se indico la extensión es muy intuitiva para configurar, ahora lo que nos queda es usar el ORM en nuestras aplicaciones de YiiFramework si no deseamos trabajar con el Active Record por defecto que trae el mismo, saludos espero que sea de ayuda este post
Etiquetas:
PHP,
YiiFramework
| Reacciones: |
domingo, 24 de junio de 2012
Comparación simple entre algunas extensiones para el control de acceso de YiiFramework
Como lo prometido
es deuda, estuve jugando un poco con las extensiones para control de
acceso que me recomendaban en la Página de facebook de YiiFramework en Español, a partir de esto realice una pequeña comparación entre las que me comentaban, espero que pueda servir de ayuda al momento de la elección, aunque la comparación no esta muy detallada ya que no ligue ninguna con un gestor de usuarios como tal, sin más preámbulos vamos a la comparación
Es el
componente que trae el framework por defecto, simplemente lo
importamos, y hacemos una configuración tan simple como crear una
base de datos o incluso un archivo llamado auth.php como lo indican
acá en este post
http://www.yiiframework.com/wiki/65/how-to-setup-rbac-with-a-php-file/,
simplemente sencillo de trabajar, fácil de configurar
por lo tanto es la elección de muchos que les gusta hacer su propia
gestión de control de acceso, como bien me recomendaba una persona
en la conversación que tuvimos en la Página de facebook de YiiFramework en Español
Actualmente es el que tengo en un proyecto ya que hasta ahora estaba buscando cual
extensión se me hacía mejor para este tema del control de acceso.
En las pruebas
realizadas a esta extensión, pude notar facilidad para configurarlo,
tan simple como seguir los pasos de la documentación que colocan en
la web de la extensión, aunque en la línea de la clase de
configuración para el login
'class'=>'modules.srbac.components.SDbAuthManager'” falto colocar al principio el application al principio para que pudiera el autoload cargarlo, sin embargo una vez configurado correctamente
'class'=>'application.modules.srbac.components.SDbAuthManager'
, es algo intuitivo para cualquier usuario que trabaje con el framework se da cuenta de que falta ese detalle para que logre iniciarse el modulo, una vez establecido la interfaz aunque me habían comentado que deja que desear, me pareció fácil de manejar y muy simple para el momento de manejar los roles, tareas y operaciones de los usuarios, ya esta internacionalizado para nuestro lenguaje, solo vi un pero corrijan si estoy errado o si hubo una mala configuración de mi parte (ando comenzando con el framework así que puede pasar), me dejo ingresar al módulo de srbac sin pedirme ningún login (a mi manera de ver un fail ya que le estoy dando a cualquier visitante la oportunidad de tener el control de mis listas de acceso), aunque en mi investigación según vi en algunos foros, se resuelve con un condicional (aunque sigo pensando la extensión debería de tenerlo en cuenta porque es la seguridad), sin embargo muy intuitivo y para los que están acostumbrados a utilizar authManager seguro se les hará simple ya que esta basada en esta.
El
más recomendado en la Página de facebook de YiiFramework en Español,
y cuando lo instalamos podemos ver el porque, simple, una interfaz
mas limpia en cuanto a la estructura del html se refiere, fácil de
instalar y configurar, la documentación super detallada, tiene la
traducción a nuestro lenguaje, en fin una excelente herramienta para
trabajar el control de acceso, no le encontré ningún pero, ya veo
el porque es tan recomendada, me hablaron de integrarla con yiiUser,
pero como estaba tocando el tema solo de control de acceso no quise
darle ventajas a ninguna extensión. Aunque tiene una ventaja en lo
personal esta en github https://github.com/schmunk42/yii-rights
solo un git clone y ya tenemos nuestra extensión en la carpeta de la
aplicación
Es
mas que un simple control de acceso es un sistema completo de usuario
que gestiona varios componentes, es decir te monta la gestión de
usuarios con tan solo una configuración simple, es mucho mas
complejo que los mencionados anteriormente ya que esta basado en
diferentes módulos, para los que necesitan la gestión de usuarios
ya montada YUM es la elección, ya que tiene todo lo relacionado a
registros asignación de permisos creación de permisos, en lo
personal para proyectos a grandes rasgos creo que es la elección,
pueden ver acá todo lo que esta ofrece
http://code.google.com/p/yii-user-management/
y por supuesto descargar y probar esta excelente extensión
Una vez probadas todas las extensiones
claro que YUM esta por encima de las otras motivado a que esta tiene
toda la gestión de usuarios, sin embargo como indique en el grupo la
veo muy compleja para proyectos a pequeños rasgos (aunque siempre
pueden crecer), la segunda opción de las estudiadas sería como
podemos ver Rights debido a la facilidad y simplicidad que esta
ofrece de hecho se tendría que unir con yiiUser como me recomendaron
para poder hacer una comparación entre YUM y esta completamente,
seguiría por supuesto SRBAC que le encontré en mis pruebas el
detalle de la falta de solicitud de autenticación para poder
gestionar los roles de usuario y por última el authManager y explico
porque, como se observo cuando se estaba haciendo las pruebas con las
extensiones tanto rights como srbac están basadas en esta, de hecho
ya nos proveen una interfaz gráfica para el manejo de los roles y
estaríamos sacando a mi parecer más provecho de esta extensión si
utilizamos alguna que ya nos tenga un poco de trabajo ya realizado.
Espero que este post sea informativo y
aclaratorio para todos los que lo lean por supuesto si hay
comentarios o correcciones en cuanto a cada una de las extensiones
que se mencionaron no duden en indicarlos, el tema por supuesto va
al grupo del facebook ya que de ahí fue de donde salio, saludos
Etiquetas:
YiiFramework
| Reacciones: |
domingo, 17 de junio de 2012
Lo nuevo que nos traerá YiiFramework 2
Como ya había comentado en el post anterior actualmente me estoy nutriendo mucho con YiiFramework, hoy leyendo en http://www.linkedin.com/ en el grupo de Yii, me encontré con esta presentación que nos dice todo lo que traerá este framework para su siguiente versión.
Dejo la presentación:
Como pueden ver el camino por el que va es a mejores prácticas de programación, implementación de los namespace, mejoras en el Active Record, aplicación del estandar PSR-0 para los autoload, en fin la presentación ya lo dice todo.
Si ven el caminó hacia el que va es simplemente muy parecido al que ya tomo symfony2 y para el que va Zend Framework también en su versión 2, cada uno aplicando por supuesto su forma de desarrollar.
Saludos espero que les sea de utilidad esta presentación
Dejo la presentación:
Como pueden ver el camino por el que va es a mejores prácticas de programación, implementación de los namespace, mejoras en el Active Record, aplicación del estandar PSR-0 para los autoload, en fin la presentación ya lo dice todo.
Si ven el caminó hacia el que va es simplemente muy parecido al que ya tomo symfony2 y para el que va Zend Framework también en su versión 2, cada uno aplicando por supuesto su forma de desarrollar.
Saludos espero que les sea de utilidad esta presentación
Etiquetas:
YiiFramework
| Reacciones: |
Suscribirse a:
Entradas (Atom)