tag:blogger.com,1999:blog-4648107880195185662024-03-14T06:56:46.975-03:00Mi bitácora informáticaAnonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.comBlogger157125tag:blogger.com,1999:blog-464810788019518566.post-80990369346801858702013-11-02T13:00:00.000-03:002013-11-02T13:00:00.786-03:00CodeIgniter - Crear Proyecto con Netbeans<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
</div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinFATw0-2JvyYSWWSD9vf8fP_WjGlPxiFktsTAGQkt890JOlHoHz7b4hERndQq2ohb_QErgqX3u_2Zdoy8FI8fMLKWEyoHLOvw0hyphenhypheniJJ7LVCxHWliRm5lxJ88XxIDOg-QbIsAUwte1NMQ/s1600/Codeigniter_logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEinFATw0-2JvyYSWWSD9vf8fP_WjGlPxiFktsTAGQkt890JOlHoHz7b4hERndQq2ohb_QErgqX3u_2Zdoy8FI8fMLKWEyoHLOvw0hyphenhypheniJJ7LVCxHWliRm5lxJ88XxIDOg-QbIsAUwte1NMQ/s200/Codeigniter_logo.png" width="200" /></a></div>
<div style="text-align: justify;">
CodeIgniter (CI) es un framework para aplicaciones web de código abierto para crear sitios web dinámicos con PHP. «Su objetivo es permitir que los desarrolladores puedan realizar proyectos mucho más rápido que creando toda la estructura desde cero, brindando un conjunto de bibliotecas para tareas comunes, así como una interfaz simple y una estructura lógica para acceder esas bibliotecas.»</div>
<br />
<br />También hay que destacar que CodeIgniter es más rápido que muchos otros entornos. Incluso en una discusión sobre entornos de desarrollo con PHP, Rasmus Lerdorf, el creador de PHP, expresó que le gustaba CodeIgniter «porque es rápido, ligero y parece poco un entorno».<div>
<br /></div>
<div style="text-align: right;">
<i><a href="http://es.wikipedia.org/wiki/EllisLab" target="_blank">Fuente</a></i></div>
<br />Para configurar Netbeans para CI, debemos instalar su plugin, para lo cual nos vamos a “Tool -> Plugins”, aquí nos vamos a la pestaña “Settings y hacemos clic en “Add”, luego agregamos lo siguiente:<br /><br /><span style="font-family: Verdana, sans-serif; font-size: x-small;">Name: CodeIgniter<br />URL: https://kenai.com/downloads/nbphpci/Latest_NetBeans730/updates.xml</span><br /><br />Según la versión de Netbeans puede cambiar la URL, por ejemplo<br /><ul>
<li>For NetBeans 7.2 use https://kenai.com/downloads/nbphpci/Latest_NetBeans720/updates.xml</li>
<li>For NetBeans 7.2.1 use https://kenai.com/downloads/nbphpci/Latest_NetBeans721/updates.xml</li>
<li>For NetBeans 7.3 use https://kenai.com/downloads/nbphpci/Latest_NetBeans730/updates.xml</li>
<li>For NetBeans 7.3.1 use https://kenai.com/downloads/nbphpci/Latest_NetBeans731/updates.xml</li>
</ul>
La web donde podemos obtener esta información es: <a href="https://kenai.com/projects/nbphpci/pages/NBInstall">https://kenai.com/projects/nbphpci/pages/NBInstall</a><div>
<br /></div>
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuVeSuFrqcAefrHCOlfVSTnWYCtSPyjueuzdnURK1NmcM9HTVpvubuJ_mAcu1OK-J4ZMQ8nLmOP-feMqth4rY5d534BFGjEqahxUuKJGAGAM_8PCUDTwb7GjrIdECA_PwF3IU2cGNHVIg/s1600/Codeigniter-add-netbeans-plugin.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em; text-align: center;"><img border="0" height="248" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhuVeSuFrqcAefrHCOlfVSTnWYCtSPyjueuzdnURK1NmcM9HTVpvubuJ_mAcu1OK-J4ZMQ8nLmOP-feMqth4rY5d534BFGjEqahxUuKJGAGAM_8PCUDTwb7GjrIdECA_PwF3IU2cGNHVIg/s400/Codeigniter-add-netbeans-plugin.png" width="400" /></a><br /><br />Luego simplemente hacemos clic en “OK”<div>
<br />Ahora nos vamos a la pestaña “Available Plugins” y hacemos clic en “Check for Newest” para que actualice el plugin de CodeIgniter. Con el plugin listo y actualizado, debemos buscar “PHP CI Framework Repository”, lo seleccionamos y damos clic en “install”.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiu96Sa-MXdZ_L12Kud74TBB7SaEVi0TuauejFwu-PPehl8NaLFBVztmh5I3GxbS4jNmoJ2WL4JhhXsRDG7R7BWcsA5xbRyyEvhLvwDFfqxektrSo2kx_YU146av_VoCXGNj0hU8Xw7HY/s1600/Codeigniter-add-netbeans-plugin-2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiu96Sa-MXdZ_L12Kud74TBB7SaEVi0TuauejFwu-PPehl8NaLFBVztmh5I3GxbS4jNmoJ2WL4JhhXsRDG7R7BWcsA5xbRyyEvhLvwDFfqxektrSo2kx_YU146av_VoCXGNj0hU8Xw7HY/s400/Codeigniter-add-netbeans-plugin-2.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Luego, al más estilo de Windows, lo instalamos del tipo “siguiente, siguiente y siguiente”. Finalizando, hacemos lo mismo con “PHP CI Framework”.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5crHX4Dayca8oBoMt6f-iYnHfz_gddNSFSDS53l7an8jWp_nCIqvrAFe2JvYNarGrs7uIzlHHUbhZnvq0y5iB_EMjYe3oKWzJb09OZbTGNpUpq0_ev4Q56VYW07f7_3xP86omo-1U1nk/s1600/Codeigniter-add-netbeans-plugin-3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="250" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh5crHX4Dayca8oBoMt6f-iYnHfz_gddNSFSDS53l7an8jWp_nCIqvrAFe2JvYNarGrs7uIzlHHUbhZnvq0y5iB_EMjYe3oKWzJb09OZbTGNpUpq0_ev4Q56VYW07f7_3xP86omo-1U1nk/s400/Codeigniter-add-netbeans-plugin-3.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Finalmente debemos ir a “Tools -> Options” aquí nos dirigimos a la pestaña “PHP -> CodeIgniter”, aquí nos vamos a “Base Files”, agregamos el zip del framework descargado desde http://ellislab.com/codeigniter</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwAI3Sc7m797NZ-wdELRO1TFgaJrGyHaJJbCpJQhcHBq6K9xPejhkIaWJI-G65jCl_Y8Z0IpYmTR291aGdClgPL3-0Bzcp64D5Ga-qcdarVSBUWmJYezvAk70UOpE6jlDlsBKpTdy_5kM/s1600/Codeigniter-add-netbeans-plugin-4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="193" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhwAI3Sc7m797NZ-wdELRO1TFgaJrGyHaJJbCpJQhcHBq6K9xPejhkIaWJI-G65jCl_Y8Z0IpYmTR291aGdClgPL3-0Bzcp64D5Ga-qcdarVSBUWmJYezvAk70UOpE6jlDlsBKpTdy_5kM/s400/Codeigniter-add-netbeans-plugin-4.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
<div>
Ya tenemos todo configurado, por lo que estamos listos para crear nuestro proyecto con el framework CI.</div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com3tag:blogger.com,1999:blog-464810788019518566.post-90317842151526218572013-10-14T16:50:00.000-03:002013-10-14T16:50:15.535-03:00PHP - JSON<span id="docs-internal-guid-5d38dbbe-b87f-5e15-036d-77f473ce9323" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img height="88px;" src="https://lh3.googleusercontent.com/G54_LbUMYfCqROZk-KFgZRJmL7jIXf3AI2_D9tFVKR-dulwibwHk9TjmBrLddHxmIt8e_JHlgXvE8yfOvF_zdbgZW54VC5wJdVLqd1v0jD2VEmaosBKaZyL_Ow" width="88px;" /><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<br />
<div style="text-align: justify;">
JSON es un formato ligero de intercambio de datos que desde hace algún tiempo ha comenzado a usarse de una forma tan popular como se uso en su tiempo el XML. JSON es la abreviación de JavaScript Object Notación – Notación de Objetos de JavaScript – También es subconjunto del estándar ECMA 262 publicado en diciembre de 1999. El formato de JSON es ampliamente reconocido por una gran variedad de lenguajes como Java, PHP, JavaScript, C++, C# entre otros, la lista completa se puede consultar desde el sitio web de JSON.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para muchos, es el compañero perfecto de Ajax. Al igual que XML, sirve para modelar y presentar datos, así que se puede combinar con todo tipo de aplicaciones como lectores RSS, Widgets de WordPress, Mods de Joomla, Gadgets y Badges en diferentes aplicaciones y servidores.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Esta constituido por dos estructuras perfectamente válidas en cualquier lenguaje de programación:</div>
<div style="text-align: justify;">
<ol>
<li>Una colección de pares nombre / valor</li>
<li>Una lista ordenada de valores</li>
</ol>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: right;">
<i><a href="http://www.google.com/url?q=http%3A%2F%2Ftarjuccino.com%2Ftutoriales%2Fprogramacion-web%2Fintroduccion-a-json%2F&sa=D&sntz=1&usg=AFQjCNGqG3_BPA-zksrIySllTSxZvlnqIg" target="_blank">Fuente</a></i></div>
<div>
<div>
<b>Decodificar JSON desde array</b></div>
<div>
<br /></div>
<div style="text-align: justify;">
Lo primero será crear un simple PHP, el cual contiene un array de prueba, y la transformación a JSON.</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:php">
<?php
$numeros = array('uno' => 1, 'dos' => 2, 'tres' => 3, 'cuatro' => 4, 'cinco' => 5);
echo json_encode($numeros);
?>
</pre>
<div>
<br /></div>
</div>
<div style="text-align: justify;">
Como resultado, obtendremos lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:php">
{"uno":1,"dos":2,"tres":3,"cuatro":4,"cinco":5}
</pre>
<div style="text-align: justify;">
<b>Decodificar JSON desde MySQL</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
El segundo ejemplo, es crear un JSON desde datos obtenidos de una consulta a MySQL</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:php">
<?php
$results = array();
$con = mysql_connect('localhost', 'usuario', 'password')
or die ('Error en la conexión al servidor ' . mysql_error());
mysql_select_db('database-name', $con) or die('Error en la conexión a la base de datos ' . mysql_error());
$query = mysql_query('select * from pruebas.numeros', $con) or die('Error en la consulta' . mysql_error());
while($row = mysql_fetch_array($query)){
$results[] = array(
$row['nombre'],
$row['digito'],
);
}
$json = json_encode($results);
echo $json;
?>
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo que hace el ejemplo, es en primer lugar conectarse a una base de datos, luego guarda los datos obtenidos en un array, finalmente lo toma y muestra en pantalla en formato JSON.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Como resultado obtenemos</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:php">
[["uno","1"],["dos","2"],["tres","3"],["cuatro","4"],["cinco","5"]]
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>Codificar array en JSON</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Aquí vemos lo inverso a lo hecho anteriormente, tenemos un arreglo con estructura JSON y lo decodificaremos para verlo en un array de PHP.</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:php">
<?php
$array = '[["uno","1"],["dos","2"],["tres","3"],["cuatro","4"],["cinco","5"]]';
print_r(json_decode($array, true));
?>
</pre>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-85095148481254309442013-10-14T12:12:00.001-03:002013-10-14T12:12:47.556-03:00RHEL / CentOS - Instalar Ajenti<span id="docs-internal-guid-719c1751-b781-51c9-aa5e-37ae60c6255f" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img height="100px;" src="https://lh6.googleusercontent.com/5d9gUitYA3uSKl0nZVUQGoJmIgaoMfNnZyDaW5NEmTJVUpR92AK1GnOHscS5smaqZwlYn60F9W1UuljMuaRF3y7Sg5MMVNt1oVc4fInFIKSdFzxolkH5IPOm" width="100px;" /><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<div style="text-align: justify;">
Ajenti es un panel web de código abierto basado en el sistema de gestión de control de la gestión de las tareas de administración de sistema remoto desde el navegador web muy similar al módulo de Webmin. Ajenti es una herramienta muy potente y ligero, que proporciona una interfaz web rápido y sensible para la gestión de servidores pequeños montajes y también la más apropiada para VPS y servidores dedicados. Se ha construido con muchos plugins pre-hechos para la configuración y software de monitoreo y de servicios como Apache, Cron, sistema de archivos, Firewall, MySQL, Nginx, Munin, Samba, FTP, calamar y muchas otras herramientas como el Administrador de archivos, editor de código para el servidor desarrolladores y acceso a la terminal.</div>
<div style="text-align: right;">
<a href="http://www.google.com/url?q=http%3A%2F%2Fwww.tecmint.com%2Finstall-ajenti-a-web-based-control-panel-for-managing-linux-server%2F&sa=D&sntz=1&usg=AFQjCNGoJtFeoyZBA3T5RLUsVGsSHiYiFg" target="_blank"><i>Fuente</i></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo primero es instalar el repositorio EPEL</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:bash">$ sudo yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Luego, instalamos el repositorio</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:bash">$ sudo yum install http://repo.ajenti.org/ajenti-repo-1.0-1.noarch.rpm
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Después de tener el repositorio, podemos instalar Ajenti</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:bash">$ sudo yum install ajenti
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora, debemos permitir el puerto 8000 a través de IPTables, para eso, debemos hacer lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:bash">$sudo iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
$ sudo iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
$ sudo service iptables restart
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Reiniciamos el servicio</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:bash">$ sudo service ajenti restart
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Finalmente, ingresamos a la ip o hostname e indicamos en el puerto 8000</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
https://<ip>:8000/</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Aquí nos pedirá el usuario y contraseña, el cual es:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
User: root</div>
<div style="text-align: justify;">
Pass: admin</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una vez ingresadas las credenciales, nos enviará al Dashboard de Ajenti</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: center;">
<span id="docs-internal-guid-719c1751-b782-ca59-8e77-73cbf502cc6d"><img height="281" src="https://lh4.googleusercontent.com/H__imJBqEdRGssP3W6BGZEfClBVIlDh09WYFWRjieSJQ8ex_H-3A4b8xlsm7n14paoNRyzQ236iWrscVP3JMFgezUnd7gXkCli560ZEi3HGxaJJyJSxBWgTlbQ" width="400" /></span></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora nos queda sólo explorar Ajenti.</div>
<div style="text-align: justify;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-85736624841039243892013-10-13T14:52:00.001-03:002013-10-13T14:52:38.069-03:00YII - Rules Compare<span id="docs-internal-guid-672f199b-b2ef-0d39-860f-16b533cf4611" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img height="108px;" src="https://lh6.googleusercontent.com/QyaXjGc_VEc-KEbNnrtWgnuuzIAxu8kyuTtWxBvpyUkYzXrJYQuOkVNLCzCmHPZmP7ZGakTPz4GDs1H4Thxn9bx0ihAOkzYUnKaJUhKLO4XYDknMOKlfcTWW" width="108px;" /><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<div style="text-align: justify;">
Es muy probable que necesitemos comparar ciertos parámetros cuando estamos validando un formulario, por ejemplo, podemos querer validar password, entonces, pedimos escribir 2 veces la password, y luego comprobar que ambas son iguales, también podemos querer comparar fechas, por ejemplo, que la fecha de inicio nunca sea mayor a la fecha de término, sólo por nombrar algunas.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En YII, esto lo podemos validar a través del modelo, ya que en este existe la función rules, podemos leer sobre este en http://www.yiiframework.com/wiki/56/#hh7</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Leyendo el enlace anterior, podemos darnos cuenta, que para comparar que la fecha de término sea mayor a la inicial, debemos hacer algo como lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
</pre class="brush:php">
array('fer_termino','compare','compareAttribute'=>'fer_inicio','operator'=>'>=','message'=>'Fecha de Término debe ser superior a Fecha de Inicio'),
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo que hacemos, es que tomamos la fecha_termino, indicamos que lo compararemos con la fecha_inicio, luego indicamos que utilizaremos el operador '>=' (mayor que), si esta regla no se cumple, lanza el mensaje de error especificado en 'message'</div>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com1tag:blogger.com,1999:blog-464810788019518566.post-67567883672601578622013-10-13T14:31:00.000-03:002013-10-13T14:31:49.294-03:00YII - Generar PDF<span id="docs-internal-guid-1f130eca-b2db-8f62-a03a-0371a130e57c" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img height="110px;" src="https://lh4.googleusercontent.com/Us6oHBvKktfl43hjIB1IyiTDerwMJImRlq8bNEWCQ9_MPjDKJ64BwOIz8yzAyBAj37ViyOwnAni5SzVgyVSf5r_udrSidw7_IeBJQq33TOALaq-NC1-yMb4y7A" width="95px;" /><br /><span style="font-family: Arial; font-size: 15px; vertical-align: baseline; white-space: pre-wrap;"></span></span><br />
<div style="text-align: justify;">
Al tener diferentes datos, es muy lógico que vamos a querer exportar esto a un formato, en este caso a PDF. Por suerte, YII trae algunas extensiones que nos facilitan mucho esto, ya que ocupan librerías de PHP para trabajar con PDF, como mpdf y html2pdf. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La extensión que utilizaremos será yii-pdf, la cual la podemos descargar desde http://www.yiiframework.com/extension/pdf/ </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Al descargarla, debemos ubicar el directorio dentro de extensions, quedando:
/protected/extensions/yii-pdf
Luego debemos descargar las librerías que utiliza esta extensión, las podemos descargar desde:
http://www.mpdf1.com/mpdf/download
http://html2pdf.fr/en/download
Estas las podemos ubicar en el directorio vendors (el directorio vendors lo debemos crear), quedando:
/protected/vendors/mpdf
/protected/vendors/html2pdf </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i><span style="font-size: x-small;">*Vendors es donde dejamos los elementos creados por terceros, que no son creados específicamente para el framework YII. </span></i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En sí, no son necesarias ambas, sino, que la extensión nos permite utilizar cualquiera de las dos.
Volviendo a la web de la extensión, copiamos el código en el fichero main.php, quedando algo como lo siguiente:
</div>
<br />
<pre class="brush:php">'components'=>array(
'ePdf' => array(
'class' => 'ext.yii-pdf.EYiiPdf',
'params' => array(
'mpdf' => array(
'librarySourcePath' => 'application.vendors.mpdf.*',
'constants' => array(
'_MPDF_TEMP_PATH' => Yii::getPathOfAlias('application.runtime'),
),
'class'=>'mpdf',
),
'HTML2PDF' => array(
'librarySourcePath' => 'application.vendors.html2pdf.*',
'classFile' => 'html2pdf.class.php',
)
),
),
//Resto del código
</pre>
<br />
<span style="font-size: x-small;"><i>*El ejemplo que sale en la web, es mucho más extenso, pero elimine lo comentado. </i></span><br />
<br />
Ahora debemos configurar el controlador de donde queremos generar los PDF, según mi punto de vista, a diferencia del excel, en PDF no quiero generar todos los datos, sino, quiero generar fichas, por lo cual, se generará un PDF por registro, producto de lo anterior, debemos crear la función crearPDF, de la siguiente forma:
<br />
<br />
<pre class="brush:php">public function actionCrearPdf($id){
$mPDF1 = Yii::app()->ePdf->mpdf();
$mPDF1->WriteHTML(
$this->render('pdf',array(
'model'=>$this->loadModel($id), true
))
);
$mPDF1->Output();
}
</pre>
<br />
Luego, debemos crear una vista llamada pdf.php (puede tener otro nombre), por ejemplo, debería quedar algo como /protected/views/usuarios/pdf.php, este fichero debe componerse de la siguiente forma:
<br />
<br />
<pre class="brush:php">
<?php
$html = <<<HERE
<table>
<tr>
<td>RUN: </td>
<td>$model->rut-$model->dv</td>
</tr>
<tr>
<td>Nombres:</td>
<td>$model->nombre</td>
</tr>
<tr>
<td>Apellidos:</td>
<td>$model->apellidos</td>
</tr>
</table>
HERE;
$mpdf = new mPDF('utf-8','LETTER','','',15,15,25,12,5,7);
$mpdf->SetHeader(Yii::app()->name);
$mpdf->SetFooter('Pie de página');
$mpdf->SetWatermarkImage("/images/logo.jpg");
$mpdf ->showWatermarkImage = true;
$mpdf->WriteHTML($html);
$mpdf->Output('Ficha-Usuario_'.$model->rut.'-'.$model->dv.'.pdf','I');
exit;
?>
</pre>
<br />
<br />
En el ejemplo anterior, tenemos una tabla que va mostrando los atributos del modelo, en este caso RUN,NOMBRE, APELLIDOS, luego empezamos a configurar mpdf.
Con esto ya tenemos configurado para generar el PDF, ahora, agregaremos un ícono para acceder al PDF, para esto, vamos a la vista admin.php, y buscamos donde tenemos:
<br />
<pre class="brush:php">array (
'class'=>'CButtonColumn',
),
</pre>
y lo reemplazamos por:
<br />
<pre class="brush:php">array(
'class'=>'CButtonColumn',
'template' => '{view} {update} {delete} {pdf}',
'buttons'=>array(
'pdf' => array(
'label'=>'Generar PDF',
'url'=>"CHtml::normalizeUrl(array('crearpdf', 'id'=>\$data->idusuarios))",
'imageUrl'=>Yii::app()->request->baseUrl.'/images/pdf_icon.png',
'options' => array('class'=>'pdf'),
),
),
),
</pre>
<br />
<i><span style="font-size: x-small;">*Debemos tener una imagen de pdf, por ejemplo /images/pdf_icon.png </span></i><br />
<br />
Con esto, ya tenemos todo listo, y nos aparecerá un botón para acceder al pdf, como lo siguiente:
<br />
<br />
<span id="docs-internal-guid-1f130eca-b2dd-c644-8dd3-0b4d6abf0f5a"><img height="46px;" src="https://lh6.googleusercontent.com/kRSvDeOMjRqY-qXklYdvI2P9PXJdSNElTMZyBsZIYB9euhzhgg9-_K7m6tjHTt0ThAtX_LkaXeZ4Mq8axcdKfkyU4Bjb8KlR5FtHmKWhnPcFnzOzTlqak3eFDg" width="67px;" /></span>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com2tag:blogger.com,1999:blog-464810788019518566.post-28424535675432810492013-10-13T14:09:00.000-03:002013-10-13T14:09:20.551-03:00Linux - Configurando servicios fácilmenteCuando el sistema inicia, carga diferentes servicios, estos normalmente los encontraremos en /etc/rcX.d/, en Donde X va del 0 al 6. Sin intentar explicar esto, existe una forma de administrar los servicios bastante fácil, esto es gracias a sysv-rc-conf. Para instalarlo debemos:<br />
<br />
<pre class="brush:bash">$ sudo aptitude install sysv-rc-conf</pre>
<br />
<br />
Una vez instalado, simplemente lo ejecutamos en consola:<br />
<br />
<pre class="brush:bash">$ sudo sysv-rc-conf</pre>
<br />
<br />
Aquí nos encontraremos con algo similar a lo siguiente:<br />
<br />
<div style="text-align: center;">
<span id="docs-internal-guid-38eb494f-b2c9-7771-ab8f-00e3c1b68ff8"><img height="265" src="https://lh4.googleusercontent.com/DEwbCc1rKpaIh1M3oTZjcTBztbyuGkytN5kabl7sm-zBX9j3BJGzn_zm_yzTzAMy_lTzL8zeBPmuJELwMc3pwXu4UTNHCUxG96sn0O6ZELcRGP7uR6kSRDe9Dg" width="400" /></span></div>
<br />
Como podemos ver, nos muestra los diferentes servicios, y del 0 al 6, por lo cual podemos activar o desactivar según nosotros estimemos conveniente.<br />
<br />
<ul>
<li>Con la tecla espacio podemos marcar o desmarcar un servicio en un nivel de ejecución, al tener la “X” significa que estará activado.</li>
<li>Con la combinación “Ctrl + N” pasamos a la siguiente página, al igual que lo podemos hacer si simplemente empezamos a bajar.</li>
<li>Para detener o iniciar un servicio que ya esté en ejecución, utilizamos las teclas “-” y “+”.</li>
<li>Para salir, simplemente utilizamos la tecla “q”</li>
</ul>
<br />
<div>
<br /></div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-4849779593621531612013-10-11T12:49:00.000-03:002013-10-11T12:49:28.568-03:00PHP - Visualizar XML<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia35TYwxzV5zzC3omdjRdwwDTRDrPiFYeKtGTB759kVL0pAEJsnfa1kDCvW7aPtvcBhMfzfa01R1-dQcbotOUmjTXS5pXQ67GiH2Pf115WFfPG2zMo-cJhlN_4jg1OEBkOSNdgFoRGuhc/s1600/xml.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEia35TYwxzV5zzC3omdjRdwwDTRDrPiFYeKtGTB759kVL0pAEJsnfa1kDCvW7aPtvcBhMfzfa01R1-dQcbotOUmjTXS5pXQ67GiH2Pf115WFfPG2zMo-cJhlN_4jg1OEBkOSNdgFoRGuhc/s200/xml.png" width="200" /></a></div>
<div style="text-align: justify;">
El trabajo de ficheros XML en PHP no es muy complejo gracias a SimpleXML. La extensión SimpleXML proporciona un conjunto de herramientas muy simple y fácil de usar para convertir XML a un objeto que pueda ser procesado con selectores de propiedades normales e iteradores de arrays.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para visualizar un XML, podemos seguir un ejemplo básico que aparece en la página de PHP, el cual es el siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:php">
<?php
// El fichero test.xml contiene un documento XML con un elemento raíz y, al
// menos, un elemento /[raiz]/titulo.
if (file_exists('test.xml')) {
$xml = simplexml_load_file('test.xml');
print_r($xml);
} else {
exit('Error abriendo test.xml.');
}
?>
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo que hace el código, es verificar que existe el fichero text.xml, si existe, guarda en la variable $xml, la sentencia simplexml_load_file y luego lo imprime con un print_r. Por el contrario, si no existe el fichero, envía un mensaje advirtiendo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Un ejemplo un poco más completo, es el siguiente que he hecho. En primer lugar, tenemos el fichero empleados.xml con el siguiente contenido:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:xml">
<?xml version="1.0" encoding="UTF-8"?>
<empleados>
<trabajador>
<rut>123</rut>
<nombre>Pedro</nombre>
<cargo>Gerente IT</cargo>
</trabajador>
<trabajador>
<rut>456</rut>
<nombre>Juan</nombre>
<cargo>Jefe de Proyectos</cargo>
</trabajador>
<trabajador>
<rut>789</rut>
<nombre>Diego</nombre>
<cargo>Programador</cargo>
</trabajador>
</empleados>
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Luego tenemos un fichero php, puede llamarse como queramos, en mi caso, se llama test.php</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush:php">
<?php
//Validamos que el fichero xml exista
if( !file_exists('empleados.xml')){
exit('Error al cargar XML');
}
elseif (file_exists('empleados.xml')) {
/*
* Validamos que el fichero no tenga error
* De lo contrario, muestra los datos en formato tabla
*/
$xml = simplexml_load_file('empleados.xml');
if (!is_object($xml))
throw new Exception('Error en la lectura del XML',1001);
else {
echo '<table border=1>
<thead>
<tr>
<th>RUT</th>
<th>NOMBRE</th>
<th>CARGO</th>
</tr>
</thead>
<tbody>';
foreach ($xml->trabajador as $empleados){
echo '<tr>
<td>' . $empleados->rut . '</td>
<td>' . $empleados->nombre . '</td>
<td>' . $empleados->cargo . '</td>
</tr>';
}
'</tbody>
</table>';
}
}
else{
exit('Ha ocurrido un error inesperado');
}
?>
</pre>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
A grandes rasgos, lo que hace este código es validar el fichero xml, y validar que este correcto, si está todo correcto, mostramos el XML en una tabla.</div>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-91301712407854196502013-08-15T21:22:00.001-04:002013-08-15T21:23:19.964-04:00YII – Exportar datos a Excel<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyscnfGSDelpF-a1qaCDg5jDVHLx_3UexSapGH2jv1gsz4DpMRrwxeLbrM1YHyj3df0htHsBJls-ekqS_2yc1TwNKXl5Q4uek8OiT3Hhr-j6LMSLCL7O09QXeESRHjABNxNjgRy1lbcQA/s1600/excel_logo.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjyscnfGSDelpF-a1qaCDg5jDVHLx_3UexSapGH2jv1gsz4DpMRrwxeLbrM1YHyj3df0htHsBJls-ekqS_2yc1TwNKXl5Q4uek8OiT3Hhr-j6LMSLCL7O09QXeESRHjABNxNjgRy1lbcQA/s1600/excel_logo.gif" /></a></div>
<div style="text-align: justify;">
Es muy probable y lógico, que cuando tenemos muchos datos, vamos a querer exportarlos a una hoja de cálculo, como MS Office es lo más conocido, he elegido Excel para exportar, aunque al exportarlo a LibreOffice, no he visto inconvenientes. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
La opción más conocida es modificando las cabeceras, pero el problema que sucede con esto, es que al abrir el fichero, aparece un mensaje, en cambio al hacerlo con PHPExcel, se abre sin mensaje alguno. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo primero que debemos hacer es ir a la página de PHPExcel para descargar el complemento <b>http://phpexcel.codeplex.com/</b>
Aquí podemos hacer clic en <b>“Download”</b> o también irnos al menú <b>“Downloads”</b> y descargar:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>PHPExcel x.x.x - with Documentation in MS Office format</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Una vez descargado, lo descomprimimos e ingresamos al directorio. Aquí encontraremos el directorio Classes, al cual también ingresamos. Finalmente aquí, encontraremos el directorio PHPExcel y un fichero php llamado PHPExcel.php. Estos 2 elementos los debemos copiar a<b> /protected/vendors</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>*La carpeta vendors la debemos crear</i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora ingresamos a <b>/protected/config/main.php</b> y dentro de <b>components</b>, debemos agregar:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:php">
'excel'=>array(
'class'=>'application.vendors.PHPExcel',
),
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Quedando algo parecido a lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:php">
'components'=>array(
'excel'=>array(
'class'=>'application.vendors.PHPExcel',
),
//Resto del código
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Seguido de esto, debemos crear el fichero LibroExcel (o el nombre que queremos) en:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>/protected/vendors/PHPExcel/LibroExcel.php</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Quedando una estructura similar a lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid6LXr0r57mHMJWcv4C0Dw-cnJdMALhccdlRc93QC04S9k7na68o2ylnSorAr8vNwRZOH8RYiUN5uFb7gpINMj0UVyVdnEoS716NhkcX7-HfQIPoh8mxHGSgU8n_h5nwnbDCCql6FgTF8/s1600/vendors-libroexcel.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEid6LXr0r57mHMJWcv4C0Dw-cnJdMALhccdlRc93QC04S9k7na68o2ylnSorAr8vNwRZOH8RYiUN5uFb7gpINMj0UVyVdnEoS716NhkcX7-HfQIPoh8mxHGSgU8n_h5nwnbDCCql6FgTF8/s1600/vendors-libroexcel.png" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:php">
<?php
//require_once 'PHPExcel.php';
Yii::import('application.vendors.PHPExcel');
class LibroExcel {
function generateExample($array)
{
$nombreFichero = "Prueba";
$objPHPExcel = new PHPExcel();
$this->fillSheetByArray($objPHPExcel, $array);
$this->nameSheet($objPHPExcel);
// Redirect output to a client’s web browser (Excel2007)
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition:attachment;filename='.$nombreFichero.'.xlsx');
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
exit;
}
function fillSheetByArray($objPHPExcel, $array = null)
{
$objPHPExcel->setActiveSheetIndex(0);
$fila = 1;
$columna = 0;
foreach($array[0] as $titulo => $valor)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna , $fila, $titulo);
$columna++;
}
$fila++;
foreach($array as $cliente)
{
$columna = 0;
foreach($cliente as $dato)
{
$objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($columna , $fila, $dato);
$columna++;
}
$fila++;
}
}
function nameSheet($objPHPExcel)
{
$objPHPExcel->getActiveSheet()->setTitle('Simple');
}
}
?>
</pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Teniendo LibroExcel.php listo, nos vamos al controlador que queremos generar el Excel, en mi caso, es el controlador de empleados, y luego creamos la función actionGenerateExcel(), de la siguiente forma:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:php">
public function actionGenerateExcel() {
Yii::import('application.vendors.LibroExcel');
$model=Empleados::model()->findAll();
$xlsx = new LibroExcel();
$xlsx->generateExample($model);
}
</pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>*Empleados lo debemos cambiar por el nombre del modelo que estamos trabajando.</i></div>
<div style="text-align: justify;">
<i>*LibroExcel() lo debemos cambiar si creamos la clase PHP con otro nombre.</i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Además, debemos darle privilegios en <b>accessRules() </b>de la siguiente forma:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:php">
array('allow',
'actions'=>array('create','update','admin','delete','generateexcel'),
'users'=>array('@'),
),
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Finalmente lo que necesitamos es hacer en la vista que podamos crear el Excel, en mi caso, lo crearé en el menú lateral, de la vista admin.php</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:php">
$this->menu=array(
array('label'=>'Crear Empleados', 'url'=>array('create')),
array('label'=>'Exportar a Excel', 'url'=>array('generateExcel')),
);
</pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Con esto, ya podemos generar los ficheros Excel.</div>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com8tag:blogger.com,1999:blog-464810788019518566.post-79134774443140891262013-07-21T17:30:00.002-04:002013-07-21T17:30:59.070-04:00Bootstrap - Creando proyecto Bootstrap<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe6MQawfMXbq2OI7O_5iH7XbXOSpQOKbNdXPTMY27pnjIY9Y3nDDwMRfs8tK92uclKv1_Mr3fz8b9LWuMVwJ7bbTB6wX-ZYMvu4U_d5BF-bgTsseDEU8UHqx30S7Nc5mRcrjjhUhKaozY/s1600/bootstrap-logo.png" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhe6MQawfMXbq2OI7O_5iH7XbXOSpQOKbNdXPTMY27pnjIY9Y3nDDwMRfs8tK92uclKv1_Mr3fz8b9LWuMVwJ7bbTB6wX-ZYMvu4U_d5BF-bgTsseDEU8UHqx30S7Nc5mRcrjjhUhKaozY/s1600/bootstrap-logo.png" /></a></div>
<div style="text-align: justify;">
Primero que nada, debemos entender que es Bootstrap, y he encontrado las siguientes definiciones que me han parecido interesantes:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i><span style="font-size: x-small;">“Twitter Bootstrap es una colección de herramientas de software libre para la creación de sitios y aplicaciones web. Contiene plantillas de diseño basadas en HTML y CSS con tipografías, formularios, botones, gráficos, barras de navegación y demás componentes de interfaz, así como extensiones opcionales de JavaScript.</span></i></div>
<div style="text-align: justify;">
<i><span style="font-size: x-small;">Es el proyecto más popular en GitHub1 y es usado por la NASA y la MSNBC junto a demás organizaciones”</span></i></div>
<div style="text-align: justify;">
<i><span style="font-size: x-small;"><br /></span></i></div>
<div style="text-align: right;">
<i><span style="font-size: x-small;">http://es.wikipedia.org/wiki/Twitter_Bootstrap</span></i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i><span style="font-size: x-small;">“Bootstrap v.2.n es una herramienta para el desarrollo rápido y correcto de aplicaciones y sitios web. Fomenta las buenas prácticas de diseño y desarrollo web, conforme a estándares W3C. Permite diseñar webs adaptables y fluidas, visualizables correctamente en múltiples dispositivos (Responsive Web Design). Incluye una robusta base de HTML5, CSS3 y Javascript, también incluye elementos de diseño, tipografías, tablas, formularios, navegación, alertas, etc.”</span></i></div>
<div style="text-align: justify;">
<i><span style="font-size: x-small;"><br /></span></i></div>
<div style="text-align: right;">
<i><span style="font-size: x-small;">http://internoma.github.io/tutorial-bootstrap/</span></i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div>
Lo primero que debemos hacer es descargar Bootstrap desde http://twitter.github.io/bootstrap/ </div>
<div>
<br /></div>
<div>
Una vez descargado, lo descomprimimos, aquí veremos la siguiente estructura:</div>
<div class="separator" style="clear: both; text-align: center;">
<br /></div>
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji7pKiEQTRM79mN9rafTbfFwMsapjTvgezGfUFhAC38lB_qmkE-8iS_liDU40Z7UTkX9zafoGJsN0S-agjD4XuFytNUv5uuQNppyB0DJc1PzslWT00fHBAwe52kZDFXpZUasN85PZv9CE/s1600/bootstrap-estructura.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="320" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEji7pKiEQTRM79mN9rafTbfFwMsapjTvgezGfUFhAC38lB_qmkE-8iS_liDU40Z7UTkX9zafoGJsN0S-agjD4XuFytNUv5uuQNppyB0DJc1PzslWT00fHBAwe52kZDFXpZUasN85PZv9CE/s320/bootstrap-estructura.png" width="272" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
</div>
<div style="text-align: justify;">
<div>
Para utilizar los js de Bootstrap, debemos descargar jquery desde http://www.jquery.com y descargarlo. Es muy importante el orden en el que se agreguen estos a nuestro proyecto, ya que Jquery, siempre debe estar antes que los js de Bootstrap.</div>
<div>
<br /></div>
<div>
Ahora deberíamos crear un index y tener algo parecido a la siguiente estructura:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpVRjVhCX7nn7aZf4uVU4mDMww9wYd78VLiAs6bYG2Y7TYAps77wwVmsC9P0G3Rt4kA1996ucCH6Y9uImW6T7y6piy34XsSi4oExAUHaoKuXkgfarmTJymTrn5Vw8poQoDKQPTrdJ-46A/s1600/bootstrap-proyecto.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgpVRjVhCX7nn7aZf4uVU4mDMww9wYd78VLiAs6bYG2Y7TYAps77wwVmsC9P0G3Rt4kA1996ucCH6Y9uImW6T7y6piy34XsSi4oExAUHaoKuXkgfarmTJymTrn5Vw8poQoDKQPTrdJ-46A/s1600/bootstrap-proyecto.png" /></a></div>
<div>
<br /></div>
<div>
En el index, podemos generar un código bastante simple, para saber si nos está o no funcionando Bootstrap, el código es el siguiente:</div>
<div>
<br /></div>
<pre class="brush:html">
<!DOCTYPE html>
<html lang="es">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Test Bootstrap</title>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/bootstrap-responsive.min.css" rel="stylesheet">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
</head>
<body>
<!--Inicio Menu Superior-->
<div class="navbar navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<div class="nav-collapse collapse">
<a class="brand" href="#">Ormeno</a>
<ul class="nav">
<li class="active"><a href="#">Inicio</a></li>
<li><a href="#about">Quienes Somos</a></li>
<li><a href="#contact">Contacto</a></li>
</ul>
</div>
</div>
</div>
</div>
<!--Fin Menu Superior-->
<script type="text/javascript" src="js/jquery-1.10.2.min.js"></script>
<script type="text/javascript" src="js/bootstrap.min.js"></script>
</body>
</html>
</pre>
<div>
Luego, nos dirigimos al navegador, y deberíamos ver algo como lo siguiente:</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeshfud51tPbLIRPsNBId8CVRHCQaG-_JyX-vpPkUPNUHiMNFnzshn2LPRdBLlK_0H044RS-oUnIrzNBPQ5ryXUfBmSUKYUqKZsp0JTf2R-Wfi6Dblal4zfROPlph0r-9dXq_x6gY_98c/s1600/bootstrap-menu.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgeshfud51tPbLIRPsNBId8CVRHCQaG-_JyX-vpPkUPNUHiMNFnzshn2LPRdBLlK_0H044RS-oUnIrzNBPQ5ryXUfBmSUKYUqKZsp0JTf2R-Wfi6Dblal4zfROPlph0r-9dXq_x6gY_98c/s320/bootstrap-menu.png" width="320" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
</div>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-22947554022885359282013-07-11T13:11:00.000-04:002013-07-11T13:11:02.636-04:00SQL Server – Copiar Tablas de una DB a Otra<div style="text-align: justify;">
Para copiar una tabla completa de una base de datos a otras, debemos hacer un proceso bastante simple, el cual puede ser simplemente de 1 o 2 pasos dependiendo de lo que necesitemos.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
En primera instancia, copiamos las tablas (todas o seleccionamos cuales) de una DB a otra.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:sql">SELECT *
INTO [historica].[dbo].[mi_tabla_nueva]
FROM [actual].[dbo].[tabla_antigua]
</pre>
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Como pueden ver, estamos copiando todas las tablas, desde la DB “actual” y tabla “tabla_antigua” a la DB “histórica”, tabla “mi_tabla_nueva”.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Este proceso lo debemos hacer SOLO si la tabla no existe, producto que de esta forma copiamos la tabla completa, su estructura y datos, si queremos copiar sólo los datos debemos hacer lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br />
<pre class="brush:sql">
INSERT INTO [historica].[dbo].[mi_tabla_nueva]
SELECT *
FROM [actual].[dbo].[table_antigua]
</pre>
</div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com2tag:blogger.com,1999:blog-464810788019518566.post-84860096188395053612013-07-08T22:42:00.000-04:002013-07-08T22:42:30.290-04:00YII – Mostrar nombre en vez de ID en Foreign KeyEn YII Podemos definir en el modelo lo que es llaves foráneas, esta vez, no explicaré mucho el proceso, producto que, si está definido el modelo de la base de datos, Yii lo tomará automáticamente, por ejemplo, si trabajamos con MySQL y motor InnoDB, y creamos todas las relaciones necesarias, para finalmente crear el modelo con GII, podemos ver una función como la siguiente en el modelo.<br />
<pre class="brush:php">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(
'idcliente0' => array(self::BELONGS_TO, 'Cliente', 'idcliente'),
'idempleados0' => array(self::BELONGS_TO, 'Empleados', 'idempleados'),
);
}
</pre>
<br />
Está vez, utilizaré un ejemplo de Empleado, Cliente y Atención, en donde en Atención, se guardará la atención que hace el empleado al cliente, por lo cual, está tiene las llaves foráneas de los ID tanto de empleado como cliente.<br />
<br />
Como podemos ver, en el modelo, está la función relations(), aquí tenemos un array con elementos, en este caso, los elementos que nombra las relaciones son:<br />
<br />
<ul>
<li>idcliente0</li>
<li>idempleados0</li>
</ul>
<br />
Estos son los que debemos utilizar en la vista, en este caso, haré un ejemplo de como hacerlo en la vista admin.<br />
<br />
En la vista admin, encontraremos lo siguiente:<br />
<div>
<br />
<pre class="brush:php">
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'atencion-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'idatencion',
'hora',
'motivo',
'comentario',
'idcliente',
'idempleados',
array(
'class'=>'CButtonColumn',
),
),
));
?>
</pre>
</div>
<div>
Por lo cual 'idcliente' y 'idempleados' lo debemos reemplazar y dejar de la siguiente forma:</div>
<div>
<br /></div>
<pre class="brush:php">
<?php
$this->widget('zii.widgets.grid.CGridView', array(
'id'=>'atencion-grid',
'dataProvider'=>$model->search(),
'filter'=>$model,
'columns'=>array(
'idatencion',
'hora',
'motivo',
'comentario',
array(
'name'=>'idcliente',
'value'=>'$data->idcliente0->nombres',
),
array(
'name'=>'idempleados',
'value'=>'$data->idempleados0->nombre',
),
array(
'class'=>'CButtonColumn',
),
),
));
?>;
</pre>
<div>
<div>
Como podemos ver, eliminados lo necesario, y agregamos un array, el cual tiene el nombre, y valor. En valor indicamos </div>
<div>
<br /></div>
<div>
<pre class="brush:php">
$data->NOMBRE-RELACION->CAMPO-A-MOSTRAR
</pre>
<br /></div>
</div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com7tag:blogger.com,1999:blog-464810788019518566.post-36058044828350649832013-07-07T18:32:00.000-04:002013-07-07T18:32:30.054-04:00Debian – Instalar Virtualbox<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt7TLXmj0Wau3FABFiL2Ttq0Vm7Q8WeT1aXdRXFmSSCWnNkIqMI7boibLs8dlpadEFVaKlzFb3rz1llzOmZwxZp1x3zzCm2iJPwY4NvYL3CWFkT3gb6nddH-Lm1-08fNrwQOpIaV-M4Fo/s1600/virtualbox-logo.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgt7TLXmj0Wau3FABFiL2Ttq0Vm7Q8WeT1aXdRXFmSSCWnNkIqMI7boibLs8dlpadEFVaKlzFb3rz1llzOmZwxZp1x3zzCm2iJPwY4NvYL3CWFkT3gb6nddH-Lm1-08fNrwQOpIaV-M4Fo/s200/virtualbox-logo.jpg" width="200" /></a></div>
<div style="text-align: justify;">
Está vez, explicaré la forma de instalar Virtualbox en Debian Wheey. Virtualbox, según wikipedia:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<i>“Oracle VM VirtualBox es un software de virtualización para arquitecturas x86/amd64, creado originalmente por la empresa alemana innotek GmbH. Actualmente es desarrollado por Oracle Corporation como parte de su familia de productos de virtualización. Por medio de esta aplicación es posible instalar sistemas operativos adicionales, conocidos como «sistemas invitados», dentro de otro sistema operativo «anfitrión», cada uno con su propio ambiente virtual.</i></div>
<div style="text-align: justify;">
<i><br /></i></div>
<div style="text-align: justify;">
<i>Entre los sistemas operativos soportados (en modo anfitrión) se encuentran GNU/Linux, Mac OS X, OS/2 Warp , Microsoft Windows, y Solaris/OpenSolaris, y dentro de ellos es posible virtualizar los sistemas operativos FreeBSD, GNU/Linux, OpenBSD, OS/2 Warp, Windows, Solaris, MS-DOS y muchos otros.”</i></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para su instalación, tenemos 2 opciones, la primera es descargar el fichero .deb (versión 64 bits)</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
$ wget http://download.virtualbox.org/virtualbox/4.2.16/virtualbox-4.2_4.2.16-86992~Debian~wheezy_amd64.deb
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
y luego instalarlo:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
$ sudo aptitude install libqt4-opengl
$ sudo dpkg -i virtualbox-4.2_4.2.16-86992~Debian~wheezy_amd64.deb
$ sudo aptitude install dkms
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
De lo contrario, podemos instalarlo desde los repositorios, de la siguiente forma: </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Agregar a nuestro sources.list lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
deb http://download.virtualbox.org/virtualbox/debian wheezy contrib
</pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora, instalamos su public key</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
wget -q http://download.virtualbox.org/virtualbox/debian/oracle_vbox.asc -O- | sudo apt-key add -
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Luego de eso, debemos hacer un update</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
$ sudo aptitude update
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora instalamos Virtualbox, en mi caso, la última versión es la 4.2</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
$ sudo aptitude install virtualbox-4.2 dkms
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Teniendo instalado virtualbox, es bueno instalar “VirtualBox 4.2.16 Oracle VM VirtualBox Extension Pack” desde https://www.virtualbox.org/wiki/Downloads Una vez descargado, abrimos Virtualbox, nos vamos a “Archivo → Preferencias → Extensiones” y seleccionamos el fichero descargado.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Con esto, ya tenemos todo listo para poder crear nuestra máquina virtual. Si al ir a las configuraciones de la máquina virtual creada tenemos el error “Fallo al acceder al subsistema USB” debemos:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Cerrar Virtualbox</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Editar /etc/fstab</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
$ sudo nano /etc/fstab
</pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Agregar lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
#usbfs
none /proc/bus/usb usbfs devgid=46,devmode=664 0 0
</pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Montamos todo</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:bash">
$ sudo mount -a
</pre>
</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora abrimos Virtualbox y ya no tendremos ese problema</div>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-84832550260309397272013-06-30T15:41:00.001-04:002013-06-30T15:47:03.718-04:00Yii – incorporar MBMenuCBMenu, es una extensión que nos permite tener nuestro menú estilo “Drop Down Menú”, lo cual le da un aspecto más amigable si es que necesitamos muchos menús, y también, nos ayuda a que sea menos invasivo para la vista.<br />
<br />
Lo primero que debemos hacer es descargar MBMenu desde<br />
<br />
http://www.yiiframework.com/extension/mbmenu/<br />
<br />
Luego lo debemos descomprimir e incorporar en nuestro proyecto en el directorio /protected/extensions<br />
<br />
*Como recomendación, al menos yo lo hago así, copio mbmenu.css al directorio /css/<br />
<br />
Ahora, debemos modificar nuestra vista /protected/views/layouts/main.php. Aquí nos encontraremos con un DIV con id=”mainmenu”, este es el que debemos modificar, y podemos generar algo como lo siguiente<br />
<br />
<pre class="brush:php">
<div id="mbmenu">
<?php
$this->widget('application.extensions.mbmenu.MbMenu',array(
'items'=>array(
array('label'=>'Home', 'url'=>array('/site/index')),
array(
'label'=>'Usuarios',
'items'=>array(
array('label'=>'Administrar Usuarios','url'=>array('empleados/admin')),
array('label'=>'Crear Usuarios','url'=>array('empleados/create')),
),
),
)
));
?>
</div>
</pre>
<br />
Si nos fijamos bien, tenemos un arreglo con label Usuarios, y este arreglo tiene “items”, los cuales son otros arreglos, pero cada uno de estos, es un sub-menú, que son los que nos aparecerán al pasar el mouse sobre su menú padre.<br />
<br />
Para que nos tome el css, en el mismo main.php, debemos incorporarlo, de la siguiente forma:
<br />
<pre class="brush:css">
<link rel="stylesheet" type="text/css" href="<?php echo Yii::app()->request->baseUrl; ?>/css/mbmenu.css" />
</pre>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-38321654927259127762013-06-29T13:40:00.002-04:002013-06-29T13:40:34.630-04:00Yii - Error Gii Unable to write the fileEs muy probable que en el momento de querer utilizar Gii para generar nuestro código, nos aparezca un error que es que no nos permite escribir el fichero. Esto es un tema netamente de permisos.<br />
<br />
Para solucionar este problema, debemos dejar a nuestro usuario y grupo apache como propietario, en las diferentes versiones de Linux, puede cambiar un poco su nombre, puede ser apache2, www-data, etc. En el caso de Debian, es www-data, y es donde utilizaré el ejemplo. Debemos escribir lo siguiente:<br />
<br />
<b>$ sudo chown www-data:www-data /ruta/al/directorio/ -R</b>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-57532398100287832312013-06-19T22:02:00.000-04:002013-06-19T22:02:18.875-04:00YII – Visualizar o descargar imágenes desde CDetailViewCdetailView es lo que al menos, por defecto, nos muestra la información de nuestro modelo a través de index.php. Si vemos este fichero, nos encontraremos con un arreglo parecido a este:<br />
<br />
<pre class="brush: php">
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'idusuario',
'usuario',
'password',
'avatar',
),
)); ?>
</pre><br />
<br />
Aquí nos mostrará los datos respecto, pero si por ejemplo, en avatar, no queremos mostrar la ruta, nombre de la imagen, etc. Y queremos mostrar la imagen o permitir descargarla, debemos cambiar ese valor, por lo siguiente:<br />
<br />
Para visualizarla<br />
<br />
<pre class="brush: php">
array(
'label'=>'avatar',
'type'=>'raw',
'value'=> Chtml::image(Yii::app()->baseUrl.'/images/' . $model->avatar),
),
</pre><br />
<br />
Para descargarla<br />
<br />
<pre class="brush: php">
array(
'label'=>'avatar',
'type'=>'raw',
'value'=> Chtml::link(Yii::app()->baseUrl.'/images/' . $model->avatar),
),
</pre><br />
<br />
La gran diferencia está entre Chtml::image y Chtml:link. Quedando más o menos de la siguiente manera
<br />
<pre class="brush: php">
<?php $this->widget('zii.widgets.CDetailView', array(
'data'=>$model,
'attributes'=>array(
'idusuario',
'usuario',
'password',
array(
'label'=>'avatar',
'type'=>'raw',
'value'=> Chtml::link(Yii::app()->baseUrl.'/images/' . $model->avatar),
),
),
)); ?>
</pre>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com8tag:blogger.com,1999:blog-464810788019518566.post-41320296424712638742013-06-19T21:48:00.000-04:002013-06-19T21:50:20.503-04:00YII - Adjuntar (subir) fichero a través de un formulario<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIPqrHCh6pBliF7117aHrCZtdXm0iRUHHbsU44QOR7ac_8CtdTIl7LSWuORj60KKu3SFclBnDXiqsOh1PupAwKSbG4GCr4eO9rwPE9Fj_ISTCFw2jZGs2olWY7LbaCkipkQc2G48JL5oY/s1600/attach.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjIPqrHCh6pBliF7117aHrCZtdXm0iRUHHbsU44QOR7ac_8CtdTIl7LSWuORj60KKu3SFclBnDXiqsOh1PupAwKSbG4GCr4eO9rwPE9Fj_ISTCFw2jZGs2olWY7LbaCkipkQc2G48JL5oY/s200/attach.jpg" width="200" /></a></div>
<div style="text-align: justify;">
Algo que necesité al trabajar con YII, fue el tener que adjuntar un fichero en un formulario, ya que, era un sistema en el cual debía adjuntar una fotocopia (imagen) de su carnet de identidad (también conocido como DNI).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para lograr esto, debemos abrir nuestro proyecto, y haber creado el CRUD, con esto, se nos genera “/protected/views/<nombre-elegido>/_form.php”. Dentro de este archivo veremos un segmento como el siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush:php">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'empleados-form',
'enableAjaxValidation'=>false,
)); ?>
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Aquí simplemente debemos agregar una línea, quedan de la siguiente forma</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush: php">
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'empleados-form',
'enableAjaxValidation'=>false,
'htmlOptions'=>array('enctype'=>'multipart/form-data'),
)); ?>
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Luego, dentro del mismo fichero, debemos agregar la siguiente línea (la ubicación es a gusto).</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush: php">
<?php echo CHtml::activeFileField($model,'image'); ?>
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Finalmente, nos toca la parte entretenida, y es que vamos a modificar el controlador. Aquí debemos trabajar con las funciones “actionCreate” y “actionUpdate”. En el ejemplo trabajaré con “actionCreate”, pero se debe agregar lo mismo en “actionUpdate”. Nuestro método viene por default de la siguiente forma.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<pre class="brush: php">
public function actionCreate($id)
{
$model=$this->loadModel($id);
if(isset($_POST['Cliente']))
{
$model->attributes=$_POST['Cliente'];
if($model->save()){
$this->redirect(array('view','id'=>$model->idcliente));
}
}
$this->render('update',array(
'model'=>$model,
));
}
</pre></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div>
He quitado una líneas que vienen comentadas. Debemos darnos cuenta que en este caso el nombre del modelo es “Cliente”, y su id y primary key, es idcliente.</div>
<div>
<br /></div>
<div>
Lo que debemos hacer es agregar lo siguiente:</div>
<div>
<br /></div>
<div>
<pre class="brush: php">
$model->fotocopiacarnet=CUploadedFile::getInstance($model,'image');
$model->fotocopiacarnet->saveAs('/path/' . CuploadedFile::getInstance($model,'image')->name);
</pre></div>
<div>
<br /></div>
<div>
<div>
En donde: </div>
<div>
<ul>
<li>fotocopiacarnet es el campo (columna) de la base de datos, donde guardará el path del carnet.</li>
<li>/path/ es la ruta donde dejamos las imagenes, por ejemplo, en mi caso es: /home/nicolas/public_html/proyectoYII/images/</li>
</ul>
</div>
<div>
En resumen, nos quedaría algo parecido a esto:</div>
</div>
<div>
<br /></div>
<div>
<pre class="brush: php">
public function actionCreate()
{
$model=new Cliente;
if(isset($_POST['Cliente']))
{
$model->attributes=$_POST['Cliente'];
$model->fotocopiacarnet=CUploadedFile::getInstance($model,'image');
if($model->save()){
$model->fotocopiacarnet->saveAs('/proyectoYII/images/' . CUploadedFile::getInstance($model,'image')->name);
$this->redirect(array('view','id'=>$model->idcliente));
}
}
$this->render('create',array(
'model'=>$model,
));
}
</pre></div>
<div>
<br /></div>
<div>
Debemos tener en cuenta que “if($model->save())” por defecto no viene con { }, esto es debido a que por regla, cuando el if tiene sólo una línea de ejecución, no son necesario, pero como ahora tienen 2 líneas, es necesario hacerlo.</div>
</div>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com12tag:blogger.com,1999:blog-464810788019518566.post-72147714766299431342013-06-01T20:05:00.004-04:002013-06-01T20:05:49.584-04:00Integración Netbeans con YII Framework<div style="text-align: justify;">
La verdad es que por experiencia propia, es mucho más rápido configurar el Framework en Linux que en Windows. Actualmente mi IDE para desarrollar es Netbeans, es el cual más tiempo he tenido desarrollando, por lo que debido a esto es que he necesitado configurarlo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Lo primero que debemos hacer es escargar el framework YII desde su página web http://www.yiiframework.com/download/ y luego descomprimir el fichero descargado</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si lo hacemos a través de consola debemos hace consola, debemos hacer lo siguiente:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<b>$ wget http://yii.googlecode.com/files/yii-1.1.13.e9e4a0.tar.gz</b></div>
<div style="text-align: justify;">
<b>$ tar -xvf yii-1.1.13.e9e4a0.tar.gz</b></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora debemos ir al menú “Tool → Option” y dentro de este ir a “PHP → General”, aquí debemos especificar la ruta de nuestro interprete de PHP5, normalmente lo está, pero si no es así, debemos agregarlo (/usr/bin/php).</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjvcXsumwEAY6eQx_2qippw1RhWIb2eOlWGi_wjQqWqm8A2bxxNdf8l0L9sL5sYI3av7ye-cWn7gKTUY_mXwEEA07dWnceBMEB99ccIELQNDjWsx6q1LiovTqTdonZOuiVaRkmSO60eeg/s1600/netbeans-php1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="185" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjvcXsumwEAY6eQx_2qippw1RhWIb2eOlWGi_wjQqWqm8A2bxxNdf8l0L9sL5sYI3av7ye-cWn7gKTUY_mXwEEA07dWnceBMEB99ccIELQNDjWsx6q1LiovTqTdonZOuiVaRkmSO60eeg/s320/netbeans-php1.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Luego debemos especificar Yii, para esto nos vamos al Menú YII, en donde veremos “YII Script”, aquí debemos elegir la carpeta donde está el script que venía en el fichero descargado de YII, ej: /yii-1.1.13.e9e4a0/framework/yiic.php</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para el caso de Windows, quizás sea necesario especificar las variables de entorno del sistema.</div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com1tag:blogger.com,1999:blog-464810788019518566.post-90102611484068636372013-06-01T18:24:00.001-04:002013-06-01T18:24:25.317-04:00Activar acceso SSH en Hostgator<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggfTtj8-t5bT2z9sZgHvMW05gH188xqnW0wGcGq45Xhbk6Ct9fUGmZ3w23jAYjVcHMH_fxlNLlbVeEGVlext2TbXCpO6Q-CLr3w6ZfhZRSjEV-6ZswOZyMDfN3AAT9JoQ_fHR07HMl3eY/s1600/hostgator31-300x262.gif" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="174" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEggfTtj8-t5bT2z9sZgHvMW05gH188xqnW0wGcGq45Xhbk6Ct9fUGmZ3w23jAYjVcHMH_fxlNLlbVeEGVlext2TbXCpO6Q-CLr3w6ZfhZRSjEV-6ZswOZyMDfN3AAT9JoQ_fHR07HMl3eY/s200/hostgator31-300x262.gif" width="200" /></a></div>
<div style="text-align: justify;">
Si bien es cierto, mucha experiencia en variedad de hosting no tengo, pero Hostgator es uno de los mejores que he probado, entre el crucé de Precio/Calidad. </div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Personalmente, por las labores que realizo, algo escencial para mi, es que tenga acceso SSH, por lo que obviamente al momento de elegir el hosting, este fue un tema.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para activar el sistema SSH, en primer lugar debemos ingresar a nuestro panel de control, con nuestro usuario y contraseña. Una vez dentro de este, debemos ingresar a la sección “HostGator Links” y luego a “Billing System”</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL3S0g_eAJUxYfEPqDJWhAQ-Ojht6gQMTx6mzm_3a6XLZkVXfmV9XwNPP-jgTtg0PYYC11VO9RXxnrhug3xSbAUSopOFlPPPR7gsh84wNJsdlkatx_15VvuqQFTmurTbvHb6JFVt6TX1s/s1600/hostgator1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="64" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiL3S0g_eAJUxYfEPqDJWhAQ-Ojht6gQMTx6mzm_3a6XLZkVXfmV9XwNPP-jgTtg0PYYC11VO9RXxnrhug3xSbAUSopOFlPPPR7gsh84wNJsdlkatx_15VvuqQFTmurTbvHb6JFVt6TX1s/s320/hostgator1.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Después de esto debemos ingresar nuestro correo y contraseña para ingresar al sistema (esta contraseña no es la misma que la del cpanel). Una vez en el sistema, debemos irnos a “Hosting Packages” y luego en “View Hosting Packages”</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlWQLc6GIheSbOx_6HTV8jqcKQWHuOgP1EXd2mK3UwdbBojSdlUlJiJd-YPeSLQX5z4oqr4nhrwQ3zXO2EJsb8VuyNV5wrCGgCGT4vIwQBvQw3NGy4r_wuq95x6QpLbLMRFmNH5mT4uvM/s1600/hostgator2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhlWQLc6GIheSbOx_6HTV8jqcKQWHuOgP1EXd2mK3UwdbBojSdlUlJiJd-YPeSLQX5z4oqr4nhrwQ3zXO2EJsb8VuyNV5wrCGgCGT4vIwQBvQw3NGy4r_wuq95x6QpLbLMRFmNH5mT4uvM/s1600/hostgator2.png" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Luego nos mostrará una ventana, en el cual debemos hacer clic en “Enable Shell Access” con el cual habilitamos el acceso SSH.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi33OC10LyLLFua8V4edHOh9ZkQmCqtKFxXl3tp0V88uCKfTZVyBmf-HhNfZG7jbar1kBXTv6OBFdstq-VsKwEXsQROfzQlr-F5dbZmF1srTiotRwaQLdZkajtfRvqEsnn-la_MRbWtY00/s1600/hostgator3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi33OC10LyLLFua8V4edHOh9ZkQmCqtKFxXl3tp0V88uCKfTZVyBmf-HhNfZG7jbar1kBXTv6OBFdstq-VsKwEXsQROfzQlr-F5dbZmF1srTiotRwaQLdZkajtfRvqEsnn-la_MRbWtY00/s1600/hostgator3.png" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para ingresar vía SSH, debemos utilizar nuestro nombre de usuario y contraseña del CPanel, además, debemos utilizar la ip o host de nuestro dominio, y utilizar el puerto 2222.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhVHBAyQ4AZ0-bKbv9TNRsl6JkEuLKA3szhkYoFOKnNXl2HXU0sADE9JTuoN6z_W5B9wV9UiKbpZuyC_0B3-011pcgVCGtNXkdMsLuIvs_i6WAMoa8U9nFHAHy-ysDlfvckGkwbP59WW4/s1600/hosgator4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhhVHBAyQ4AZ0-bKbv9TNRsl6JkEuLKA3szhkYoFOKnNXl2HXU0sADE9JTuoN6z_W5B9wV9UiKbpZuyC_0B3-011pcgVCGtNXkdMsLuIvs_i6WAMoa8U9nFHAHy-ysDlfvckGkwbP59WW4/s1600/hosgator4.png" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Si queremos tener usuario enjaulado, por ejemplo utilziado en el caso de los Reseller, debemos pagar $10USD por usuario.svn+ssh://50.87.144.35/home3/normeno/public_html/prototipoUFP</div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-72215491362958917062013-06-01T18:06:00.000-04:002013-06-01T18:06:01.471-04:00Linux - Forma fácil de instalar y jugar Diablo IIILa verdad es que prácticamente el tiempo no me da para jugar, pero existen algunos juegos que la verdad son una obsesión para mi (The Legend Of Zelda, Diablo, Final Fantasy, Lineage II), los cuales de verdad he pasado bastantes horas jugandolos, ahora cada vez que tengo un poco tiempo, juego Diablo III, uno de los juegos más esperados por muchos, como es obvio, iba a intentar instalar en Linux, para lo cual, al menos yo conozco 3 formas de poder instalarlo:<br />
<div>
<br /></div>
<div>
<div>
1. Wine</div>
<div>
2. PlayOnLinux</div>
<div>
3. CrossOver</div>
<div>
<br /></div>
<div>
Tanto PlayOnLinux como CrossOver, están basados en Wine, la diferencia es que estos traen parches y pre-configuraciones ya hechas, por lo que es más simple la instalación. CrossOver es de pago, por lo que quedo descartado, mi elección estaba entre Wine y PlayOnLinux, en vista del tiempo me fuí por lo más sencillo, PlayOnLinux, para instalarlo en Debian, hacemos lo siguiente:</div>
<br />
Agregamos el repositorio a nuestro sources.list<br />
<blockquote class="tr_bq">
# echo "deb http://deb.playonlinux.com/ squeeze main" >> /etc/apt/sources.list</blockquote>
Ahora instalamos su key<br />
<blockquote class="tr_bq">
# wget -q "http://deb.playonlinux.com/public.gpg" -O- | apt-key add -</blockquote>
Actualizamos<br />
<blockquote class="tr_bq">
# aptitude update</blockquote>
Instalamos PlayOnLinux<br />
<blockquote class="tr_bq">
# aptitude install playonlinux</blockquote>
Ahora que ya tenemos instalado PlayOnLinux, recomiendo añadir nuestro usuario a sudores, ya que al menos más adelante me fue necesario, para hacer esto deben:<br />
<blockquote class="tr_bq">
echo "usuario ALL=(ALL:ALL) ALL" >> /etc/sudoers</blockquote>
Donde “usuario” es el nombre de su usuario. Añadir su usuario a sudoers es para que puedan ejecutar sentencias con privilegios de root solamente anteponiendo la palabra sudo a la instrucción.<br />
<br />
Ya con todo lo pre-requerido, abrimos PlayOnLinux y hacemos click en instalar.<br />
<br />
Una vez dentro de esto, nos vamos a la sección Juegos y buscamos Diablo III.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipuwvLN1_YxXWm_HiUv0-j2PSr6UZe8VPt51SVeYvVlI9UGer5zdL_1-AacGYJzDEmhVvSxOXI6hAKKROU8l2kKY7dBTahIrZBwVNylyO6yFyhs7Pt1fyqEMDFMuvGIOoAmNXhyphenhyphenad3mZs/s1600/diablo1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="288" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEipuwvLN1_YxXWm_HiUv0-j2PSr6UZe8VPt51SVeYvVlI9UGer5zdL_1-AacGYJzDEmhVvSxOXI6hAKKROU8l2kKY7dBTahIrZBwVNylyO6yFyhs7Pt1fyqEMDFMuvGIOoAmNXhyphenhyphenad3mZs/s400/diablo1.png" width="400" /></a></div>
<div>
<br /></div>
<div>
<br /></div>
Una vez hecho esto, simplemente click en “Instalar”, luego (como es en mi caso) seleccionamos donde esta montado el dvd del juego, en mi caso fue cdrom0 (aquí fue donde me daba problemas al no tener mi usuario en sudoers),y aquí es simplemente lo conocido como “siguiente, siguiente, siguiente”.<br />
<br />
Se nos abrirá la venta de diablo, y comenzaremos la instalación como se ve en la siguiente imágen<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifIgj__l9xOIWWFImBuD4fT9y8C0GDnwFeIOmfZC12aAbqMQdHuElYmhZD_N54uz211Jje2HY4FQKcYetfds5ukSVCL98MI0XirHDvPA_211M0Yv2EVsBrjIfv18N0g48nxLtoKLzpO6U/s1600/diablo2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="223" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEifIgj__l9xOIWWFImBuD4fT9y8C0GDnwFeIOmfZC12aAbqMQdHuElYmhZD_N54uz211Jje2HY4FQKcYetfds5ukSVCL98MI0XirHDvPA_211M0Yv2EVsBrjIfv18N0g48nxLtoKLzpO6U/s400/diablo2.png" width="400" /></a></div>
<div>
<br /></div>
Ahora es cosa de esperar que termine la instalación, una vez terminada la instalación nos pedirá denuevo ingresar la contraseña de root para trabajar con sudo, ya finalizado todo, nos aparecerá un mensaje de agradecimiento y una alerta que dice:<br />
<blockquote class="tr_bq">
“Si obtienes Error 3007 en conexión, desde una terminal ejecute:<br />
echo 0 | sudo tee /proc/sys/kernel/yama/ptrace_scope”</blockquote>
Ahora abrimos nuevamente PlayOnLinux y notaremos que está Diablo III instalado<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT_WTsVSZru9uQokER3WSA_I6e5BhxVCN0CL7t8Q04a1J2ruBmSxXVDZQj33_ccRkc9Dqfk2zELczL4CzhFXlqa6p_MMvvY0bvcsjawBeRqv7qwfZZJnr2MgPZHJT7SfBBTJ0xRrgDvFs/s1600/diablo3.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="350" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiT_WTsVSZru9uQokER3WSA_I6e5BhxVCN0CL7t8Q04a1J2ruBmSxXVDZQj33_ccRkc9Dqfk2zELczL4CzhFXlqa6p_MMvvY0bvcsjawBeRqv7qwfZZJnr2MgPZHJT7SfBBTJ0xRrgDvFs/s400/diablo3.png" width="400" /></a></div>
<div>
<br /></div>
Simplemente le hacemos click en lanzar y empezará a correr el juego, ojo, click en “lanzar” en el que está a mano derecha, porque al menos a mi si le doy click en lanzar en el que está en al parte superior, me sale el menú de instalación no de jugar, haciendo todo lo anterior correctamente, comenzará a actualizar y luego verán esta pantalla.<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE1PhrSSioN8JnUhG8J1cfaZWcMaOMqJFfiPaYISOD3NqLNONqoYnUU0F-1mdoxHjmM9qDX8Qaaj_ikARBcqyLlBMml5ATSZMlDl5Xhrt0t7P45Ah7y03DSKUPtgHG1zGuJZMksQD7Gcg/s1600/diablo4.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgE1PhrSSioN8JnUhG8J1cfaZWcMaOMqJFfiPaYISOD3NqLNONqoYnUU0F-1mdoxHjmM9qDX8Qaaj_ikARBcqyLlBMml5ATSZMlDl5Xhrt0t7P45Ah7y03DSKUPtgHG1zGuJZMksQD7Gcg/s400/diablo4.png" width="400" /></a></div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghn9XP6it305TIl0cTYpV4DJOlj6w8D0oQB2lP07Z4lTNMeodGjRU2fhc-zoNPuAHRuUW7ZdwHDneJ2lCKZQKGcUmuBb5imf4qCMh0FCpoeEu_bt29NYlztRdzWVDIKFdEVkkmeWcFK5w/s1600/diablo5.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="316" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghn9XP6it305TIl0cTYpV4DJOlj6w8D0oQB2lP07Z4lTNMeodGjRU2fhc-zoNPuAHRuUW7ZdwHDneJ2lCKZQKGcUmuBb5imf4qCMh0FCpoeEu_bt29NYlztRdzWVDIKFdEVkkmeWcFK5w/s400/diablo5.png" width="400" /></a></div>
<div>
<br />
Cabe destacar que al parecer con una tarjeta de vídeo Intel no sé puede jugar decentemente, ya que he probado con una nvidia y se ha logrado, pero con una Intel, los colores se ven sumamente bajos y hay demasiado lag.</div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-40369159816281736922013-06-01T17:49:00.001-04:002013-06-01T17:49:51.378-04:00Netbeans – Proyecto GIT con BitBucket<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFTsH-nwO8LWk8-QxvHxZ0InoRka1XhRRg1GoqKDwOeCgddo41ez7gj_Usqw0PvuWnNyXTfSTln9D8YRuMAZhsS-MwL253XbZNjKtIvMyV9H0J-3pb1NrpOefqJmuxXZgoIolGG9rjePs/s1600/bitbucket1.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiFTsH-nwO8LWk8-QxvHxZ0InoRka1XhRRg1GoqKDwOeCgddo41ez7gj_Usqw0PvuWnNyXTfSTln9D8YRuMAZhsS-MwL253XbZNjKtIvMyV9H0J-3pb1NrpOefqJmuxXZgoIolGG9rjePs/s1600/bitbucket1.jpg" /></a><br />
<div style="text-align: justify;">
Últimamente por temas de estudios, he tenido que realizar un desarrollo de software que durará 10 meses aprox, debido a que era un proyecto para una municipalidad, y el trabajo era con un compañero de clases, tuve que buscar la opción para facilitar el desarrollo colaborativo, pero que el código no fuera público. En un comienzo pensé en un hosting, luego en Dropbox + SVN, no quise ocupar una herramienta como Google Code, SourceForge, etc. Ya que el proyecto no podía ser público, lo descarte. Luego dí con una opción que me gustó bastante, esta opción fue https://bitbucket.org Este nos permité crear proyecto privados.
Lo primero que debemos hacer es ingresar y hacernos una cuenta, teniendo la cuenta creada, debemos crear un equipo</div>
<br />
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdN7IPuX6zsIZa-jM-Dyr9ZOHd9LpDFl7gor2D1dOa-BRmCRpJktRqrxkiM1wtQNetDAgNMNzH4-lcM_HWeLk9OinAO5KMAZzm6Pf6Yq7rUlYYpqR6BhFU23sF1fKI4Uc441a6I5Tl5yk/s1600/bitbucket.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="139" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdN7IPuX6zsIZa-jM-Dyr9ZOHd9LpDFl7gor2D1dOa-BRmCRpJktRqrxkiM1wtQNetDAgNMNzH4-lcM_HWeLk9OinAO5KMAZzm6Pf6Yq7rUlYYpqR6BhFU23sF1fKI4Uc441a6I5Tl5yk/s320/bitbucket.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Aquí simplemente debemos completar los datos que nos piden y crearlo, la parte importante, es la cual podemos invitar a un usuario a participar del equipo.</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUKh1NCfJbKee2qZqN4vtEC9duxBnnYAhaYcv_-5yR4AnLiCx8EBcODxhnPPp-KB4P44NY3tlqVshmz5ONYiUVAFBX51wJS1nmrsm7SPJADXdAM6cPklae6qXw_XUQDczEsyW92MARlPk/s1600/bitbucket2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="64" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiUKh1NCfJbKee2qZqN4vtEC9duxBnnYAhaYcv_-5yR4AnLiCx8EBcODxhnPPp-KB4P44NY3tlqVshmz5ONYiUVAFBX51wJS1nmrsm7SPJADXdAM6cPklae6qXw_XUQDczEsyW92MARlPk/s320/bitbucket2.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Con esto ya tenemos listo todo lo necesario en BitBucket (recordar confirmar cuenta de correo). Ahora nos pasamos a Netbeans, en primero lugar debemos instalar todo lo necesario para GIT, para esto nos vamos a Tools → Plugins y buscamos el plugin de GIT</div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtT5vgOzuZOkOa5Jx0hTAOGaQNvBHb51P18gnvu3WspbovQQcbBlkNsdHrvQgfoTNPaZXTFykFCcMZNBZAeX64Tfw5JV6O1Nb4vPN-jXt7q4S4LPI3KwgeYN_wd4oGQD6ruw6mg9YizLA/s1600/git-netbeans.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="197" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhtT5vgOzuZOkOa5Jx0hTAOGaQNvBHb51P18gnvu3WspbovQQcbBlkNsdHrvQgfoTNPaZXTFykFCcMZNBZAeX64Tfw5JV6O1Nb4vPN-jXt7q4S4LPI3KwgeYN_wd4oGQD6ruw6mg9YizLA/s320/git-netbeans.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Ahora creamos un proyecto como normalmente lo haríamos. Acto seguido nos vamos a “Team -> Git -> Initialize”. Aquí nos proguntará por el directorio del proyecto a trabajar, debemos seleccionar el nuestro y listo.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Después hacemos clic derecho en el proyecto y nos vamos a Git → Remote → Push, en la ventana seleccionamos “Specify Git Repository Location” y en la URL, debemos colocar nuestra url en la forma de https://bitbucket.org/<nombre_equipo>/<nombre_repositorio> </div>
<div style="text-align: justify;">
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCWQQrC44l1n19s1I9KInJx66csScQNvfc3xfZN1sz9vQZRx-NX-nIEBAGKdsl0YMf-4rBX4SZKustRfjm6nspBpe-0XtQ_m6-Jrv7msWWf5oo0WwrYetuDOgMicaCnqCdnIfytWdhUCw/s1600/git-netbeans2.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="203" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiCWQQrC44l1n19s1I9KInJx66csScQNvfc3xfZN1sz9vQZRx-NX-nIEBAGKdsl0YMf-4rBX4SZKustRfjm6nspBpe-0XtQ_m6-Jrv7msWWf5oo0WwrYetuDOgMicaCnqCdnIfytWdhUCw/s320/git-netbeans2.png" width="320" /></a></div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Finalmente ingresamos nuestro usuario y contraseña y ya lo tendremos listo para trabajar. Podemos ver que se esté creando todo perfecto ingresando a nuetro repositorio, y veremos que ya hay ficheros en él.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Para poder ir subiendo los archivos, debemos primero hacer un push, y luego realizar el commit correspondiente.</div>
<div style="text-align: justify;">
<br /></div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-90407090725511701552013-06-01T17:43:00.003-04:002013-06-01T17:43:39.416-04:00YII - Tips Formulario<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW-ZngU3k5m9tRtk9y4Qts9_ylaXhekv-9qYq0mgzVid21wNLmpBqhxzPryCSgexlBdqc-S7VvRXAPhqvFTeme0ATdWZ2B7OSUffNdBNBRn5F-qDiD0zmGJWGr4ntPywztcd6i9xUPMTQ/s1600/images.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="200" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjW-ZngU3k5m9tRtk9y4Qts9_ylaXhekv-9qYq0mgzVid21wNLmpBqhxzPryCSgexlBdqc-S7VvRXAPhqvFTeme0ATdWZ2B7OSUffNdBNBRn5F-qDiD0zmGJWGr4ntPywztcd6i9xUPMTQ/s200/images.jpg" width="200" /></a></div>
Cuando generamos un CRUD, nos crea lo necesario para administrar lo creado, pero quizás sea necesario realizar algunas pequeñas modificaciones al CSS de los formularios, esto obviamente según cada requerimiento que tengamos.<br />
<br />
En primer lugar debemos saber cuál es el fichero a editar:<br />
<br />
<b>\css\form.css</b><br />
<br />
Aquí con encontraremos con<br />
<br />
<pre class="brush: css">div.form
{
}
</pre>
<br />
Aquí nos podremos dar cuenta que cada elemento del formulario lo debemos vincular con lo que acabamos de ver, por ejemplo:<br />
<br />
<pre class="brush: css">div.form fieldset
{
border: 1px solid #DDD;
padding: 10px;
margin: 0 0 10px 0;
-moz-border-radius:7px;
}
</pre>
<br />
<br />
Ahora que ya entendemos a grandes rasgos como está funcionando esto, podemos modificarlo según queramos, algunos de los tips que he usado hasta el momento y que puedo compartir son:<br />
<br />
Permitir sólo mayúsculas o minúsculas: Esto es que en el momento de escribir, transforme a mayúsculas o minúsculas según lo necesitemos, y así no dejamos está responsabilidad en el usuario, yo lo uso para guardar una homogeneidad en los datos de la base de datos.<br />
<br />
<pre class="brush: css">
div.form testField{
/*Ocupar sólo una*/
text-transform: uppercase; /*Transformar a mayúsculas*/
text-transform: lowercase; /*Transformar a minúsculas*/
}
</pre>
<br />
<br />
<div>
<br /></div>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-89626901539621040692013-06-01T17:36:00.000-04:002013-06-01T17:36:26.898-04:00YII - Encriptar contraseñas<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtBvwZfIy1rPfYsdgQpV2EFzTa4zsloJwhAzgGnaV4Zv4kEGb6VkJdOS81Ct5W2mem87cZoA2V5KD5gQ9mbrOcqi-Si-SPHWTyhiFV20QLwvoYKzDn_H8UTo9q5RFM_VEIPeVrxkkJq4o/s1600/secure_passwords.jpg" imageanchor="1" style="clear: left; float: left; margin-bottom: 1em; margin-right: 1em;"><img border="0" height="177" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjtBvwZfIy1rPfYsdgQpV2EFzTa4zsloJwhAzgGnaV4Zv4kEGb6VkJdOS81Ct5W2mem87cZoA2V5KD5gQ9mbrOcqi-Si-SPHWTyhiFV20QLwvoYKzDn_H8UTo9q5RFM_VEIPeVrxkkJq4o/s200/secure_passwords.jpg" width="200" /></a></div>
<div style="text-align: justify;">
Por un tema de seguridad, practicamente todos buscamos que las contraseñas no se vean reflejas directamente en nuestra base de datos, es por eso que siempre se busca encriptarlas.
En YII existe una manera bastante fácil de poder encriptar las contraseñas, y es simplemente agregando una sola línea a nuestro código.
Para realizar esto, debemos irnos al controlador de donde queremos trabajar esto, aquí nos debemos fijar en 2 funciones que trabajan esto:
actionCreate() que crea un nuevo registro
actionUpdate() que modifica un registro
Imaginemos que nuestro modelo se llama “Usuarios” (deben cambiar Usuarios por el nombre de su modelo), este fué creado con GII, y nos creará algo similar a esto:</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<br /></div>
<pre class="brush: php">public function actionCreate()
{
$model=new Usuarios;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Usuarios']))
{
$model->attributes=$_POST['Usuarios'];
if($model->save())
$this->redirect(array('view','id'=>$model->idusuarios));
}
$this->render('create',array(
'model'=>$model,
));
}
public function actionUpdate($id)
{
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Usuarios']))
{
$model->attributes=$_POST['Usuarios'];
if($model->save())
$this->redirect(array('view','id'=>$model->idusuarios ));
}
$this->render('update',array(
'model'=>$model,
));
}
</pre>
<div style="text-align: justify;">
<br />
Simplemente lo que debemos hacer es agregar la línea <b>$model->password=md5($model->password); </b>quedando más o menos de la siguiente forma:<br />
<br />
<br /></div>
<pre class="brush: php">
public function actionCreate()
{
$model=new Usuarios;
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Usuarios']))
{
$model->attributes=$_POST['Usuarios'];
$model->password=md5($model->password); //Encriptar en MD5
if($model->save())
$this->redirect(array('view','id'=>$model->idusuarios));
}
$this->render('create',array(
'model'=>$model,
));
}
public function actionUpdate($id)
{
$model=$this->loadModel($id);
// Uncomment the following line if AJAX validation is needed
// $this->performAjaxValidation($model);
if(isset($_POST['Usuarios']))
{
$model->attributes=$_POST['Usuarios'];
$model->password=md5($model->password); //Encriptar en MD5
if($model->save())
$this->redirect(array('view','id'=>$model->idusuarios ));
}
$this->render('update',array(
'model'=>$model,
));
}
</pre>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-16958142006590555152013-06-01T17:28:00.000-04:002013-06-01T17:28:30.299-04:00YII - Empezando con GII<div style="text-align: justify;">
Gii (potente generador de código basado en web) para automatizar la creación de códigos para ciertas tareas. Podemos crear modelos, controladores, generar CRUD, utilizando módulos Gii. Gii viene incorporado en YII, sólo que hay que activarlo. Antes de comenzar a explicar el trabajo con GII, es importante identificar los conceptos, dejaré links a la información oficial de YII en español.</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
Modelo: http://www.yiiframework.com/doc/guide/1.1/es/basics.model</div>
<div style="text-align: justify;">
Controlador: http://www.yiiframework.com/doc/guide/1.1/es/basics.controller</div>
<div style="text-align: justify;">
<br /></div>
<div style="text-align: justify;">
<div>
Activar GII</div>
<div>
<br /></div>
<div>
En el fichero /protected/config/main.php debemos descomentar lo siguiente:</div>
<div>
<br /></div>
<div>
<pre class="brush: php">'gii'=>array(
'class'=>'system.gii.GiiModule',
'password'=>'CONTRASEÑA',
// If removed, Gii defaults to localhost only. Edit carefully to taste.
'ipFilters'=>array('127.0.0.1','::1'),
),
</pre>
<br /></div>
<div>
Se debe reemplazar CONTRASEÑA con la contraseña deseada.</div>
<div>
<br /></div>
<div>
Ahora, para ingresar a GII, debemos ingresar a http://dominio/index.php?r=gii y veremos<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGUVHGw_wL40TnC1h7gbvIhBZnLBDm66TpHD3A39y21PqRTHUSz5tjRgDexGvt5MqxfcVOSs8W7ia2Aoo1YfAjx4P0Ib-yUYQJ-Q0ayyV19ZJqTPNpMEp0BVvnkeNOOzPmej87-NwBg8k/s1600/gii1.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="164" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiGUVHGw_wL40TnC1h7gbvIhBZnLBDm66TpHD3A39y21PqRTHUSz5tjRgDexGvt5MqxfcVOSs8W7ia2Aoo1YfAjx4P0Ib-yUYQJ-Q0ayyV19ZJqTPNpMEp0BVvnkeNOOzPmej87-NwBg8k/s320/gii1.png" width="320" /></a></div>
<br />
<br />
Con esto hemos creado todas las vistas, el controlador y el modelo para esa tabla en particular, las vistas son: create, update, index, admin y view. Lo más básico o común es trabajar con los menú de Model y Crud.<br />
<br />
Crear el modelo es vincular nuestra base de datos con nuestro sistema, toma todos los datos. Aquí veremos un menú como el siguiente:<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju8mF5nUyFH1iIPfZ1EP-DiHmKZM36v8nc3O7Zo5g3ZC4onBTxbiDmwg0bp0AeyaiajGLLHNPL1S7Of7TvhN_k2e6soD7TA3RTFpbRYbOIPJ-9MTVrm4flpoQUA5ro5g951pSt0CDaGwE/s1600/gii-model.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju8mF5nUyFH1iIPfZ1EP-DiHmKZM36v8nc3O7Zo5g3ZC4onBTxbiDmwg0bp0AeyaiajGLLHNPL1S7Of7TvhN_k2e6soD7TA3RTFpbRYbOIPJ-9MTVrm4flpoQUA5ro5g951pSt0CDaGwE/s320/gii-model.png" width="320" /></a></div>
<br /></div>
<div>
Aquí debemos colocar los datos de nuestra bas de datos en donde dice "Table Name", lo que está con fondo amarillo, no lo debemos modificar. El "Model Class" lo generará automáticamente a partir del "Table Name", aunque si queremos otro nombre, lo podemos cambiar.</div>
<div>
<br /></div>
<div>
En cuanto al CRUD es el que nos genera el controlador, y todo lo escencial para trabajar con nuestro modelo.</div>
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_uDAN-fCXrOUS0ci0c3z8vzK4_qJbrN-dUFmWTYOlzHy9ic2wUMUVvLTpLL7t2W3UlGNwN0F705H_Ys4BHQZif2QbGerz4vXbe96aXkO5UeKl9_zHM_QVt7iyUpzaXWCBQI4QKb0CPZs/s1600/gii+-+crud.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_uDAN-fCXrOUS0ci0c3z8vzK4_qJbrN-dUFmWTYOlzHy9ic2wUMUVvLTpLL7t2W3UlGNwN0F705H_Ys4BHQZif2QbGerz4vXbe96aXkO5UeKl9_zHM_QVt7iyUpzaXWCBQI4QKb0CPZs/s320/gii+-+crud.png" width="320" /></a></div>
<div>
<br /></div>
<div>
Aquí debemos colocar le nombre de nuestro modelo, y todo lo generará automáticamente.</div>
<div>
<br /></div>
<div>
<br /></div>
<div>
<div>
Fuentes: </div>
<div>
http://www.arvaro.org/php/crear-modelos-y-crud-con-gii-en-yii-framework</div>
<div>
http://www.yiiframework.com/doc/guide/1.1/en/topics.gii</div>
<div>
http://www.yiiframework.com/doc/guide/1.1/en/quickstart.first-app</div>
<div>
http://yiiframeworkespanol.blogspot.com/2012/06/gii-generacion-automatica-de-codigo.html</div>
</div>
</div>
Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com3tag:blogger.com,1999:blog-464810788019518566.post-68269985041561316452013-06-01T17:20:00.001-04:002013-06-01T17:20:30.485-04:00YII - Autenticación de usuarioLo primero que debemos hacer es crear la tabla en la base de datos<br />
<br />
<pre class="brush: sql">CREATE TABLE usuario (
Id INT NOT NULL AUTO_INCREMENT,
username VARCHAR(15) NOT NULL,
password VARCHAR(15) NOT NULL
)
</pre>
<br />
Ahora creamos el modelo a través de YII, para esto, ingresamos a través de nuestra URL y le agregamos el valor ?r=gii, por ejemplo http://localhost/yii/index.php?r=gii<br />
<div>
<br /></div>
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju8mF5nUyFH1iIPfZ1EP-DiHmKZM36v8nc3O7Zo5g3ZC4onBTxbiDmwg0bp0AeyaiajGLLHNPL1S7Of7TvhN_k2e6soD7TA3RTFpbRYbOIPJ-9MTVrm4flpoQUA5ro5g951pSt0CDaGwE/s1600/gii-model.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="204" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEju8mF5nUyFH1iIPfZ1EP-DiHmKZM36v8nc3O7Zo5g3ZC4onBTxbiDmwg0bp0AeyaiajGLLHNPL1S7Of7TvhN_k2e6soD7TA3RTFpbRYbOIPJ-9MTVrm4flpoQUA5ro5g951pSt0CDaGwE/s320/gii-model.png" width="320" /></a></div>
<div>
<br /></div>
<br />
Ahora creamos el CRUD<br />
<br />
<div class="separator" style="clear: both; text-align: center;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_uDAN-fCXrOUS0ci0c3z8vzK4_qJbrN-dUFmWTYOlzHy9ic2wUMUVvLTpLL7t2W3UlGNwN0F705H_Ys4BHQZif2QbGerz4vXbe96aXkO5UeKl9_zHM_QVt7iyUpzaXWCBQI4QKb0CPZs/s1600/gii+-+crud.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"><img border="0" height="143" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEi_uDAN-fCXrOUS0ci0c3z8vzK4_qJbrN-dUFmWTYOlzHy9ic2wUMUVvLTpLL7t2W3UlGNwN0F705H_Ys4BHQZif2QbGerz4vXbe96aXkO5UeKl9_zHM_QVt7iyUpzaXWCBQI4QKb0CPZs/s320/gii+-+crud.png" width="320" /></a></div>
<br />
<br />
Ahora debemos entrar a editar /protected/components/UserIdentity.php y reemplazar la clase con lo siguiente:<br />
<br />
<br />
<pre class="brush: php">public function authenticate() {
$username=strtolower($this->username);
$user=Usuario::model()->find('LOWER(username)=?',array($username));
if($user===null)
$this->errorCode=self::ERROR_USERNAME_INVALID;
else if(!$user->validatePassword($this->password))
$this->errorCode=self::ERROR_PASSWORD_INVALID;
else{
$this->_id=$user->id;
$this->username=$user->username;
$this->errorCode=self::ERROR_NONE;
}
return $this->errorCode==self::ERROR_NONE;
}
public function getId(){
return $this->_id;
}
</pre>
<br />
<br />
<div style="line-height: 100%; margin-bottom: 0cm;">
Luego en
/protected/models/Usuario.php debemos agregar al final del fichero,
las funciones para validar el usuario:</div>
<div style="line-height: 100%; margin-bottom: 0cm;">
<br /></div>
<div style="line-height: 100%; margin-bottom: 0cm;">
<br /></div>
<pre class="brush: php">
public function validatePassword($password){
return $this->hashPassword($password)===$this->password;
}
public function hashPassword($password){
return md5($password);
}
</pre>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0tag:blogger.com,1999:blog-464810788019518566.post-4509488769858134232013-06-01T17:10:00.001-04:002013-06-01T17:10:53.161-04:00YII - Conexión a la base de datos MySQL<div style="text-align: justify;">
<a href="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghjnMkcwCedwOvpszjls6hPD9i85t2v9ZrH-zwvK1nJF4XCJRas5e7y_1mbzokp07mejPRuv4S22pV37_LoE1Cz0deSpM8Ejhepj8WBJYLda1yPnNdnHm7fu-tsuE0hRS3qGFhmiybBTs/s1600/yiimysqltutorial3.jpg" imageanchor="1" style="clear: left; display: inline !important; float: left; margin-bottom: 1em; margin-right: 1em; text-align: center;"><img border="0" height="150" src="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEghjnMkcwCedwOvpszjls6hPD9i85t2v9ZrH-zwvK1nJF4XCJRas5e7y_1mbzokp07mejPRuv4S22pV37_LoE1Cz0deSpM8Ejhepj8WBJYLda1yPnNdnHm7fu-tsuE0hRS3qGFhmiybBTs/s200/yiimysqltutorial3.jpg" width="200" /></a>Por defecto YII utiliza la conexión sqlite, es muy probable que nosotros elijamos otro motor de base de datos para trabajar, en este caso, realizaré la conexión al motor MySQL, para hacer esto debemos abrir el archivo “/protected/config/main.php”, y buscar buscar:</div>
<div style="text-align: justify;">
<br />
<br />
<br />
<br />
<br />
<pre class="brush: php">
'db'=>array(
'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),
// uncomment the following to use a MySQL database
/*
'db'=>array(
'connectionString' => 'mysql:host=localhost;dbname=testdrive',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
*/
</pre>
<br />
<br />
En donde debemos invertir los papeles, comentaremos lo de sqlite y descomentar lo de MySQL, dejándolo de la siguiente forma:<br />
<br />
<br /></div>
<pre class="brush: php">
/*'db'=>array(
'connectionString' => 'sqlite:'.dirname(__FILE__).'/../data/testdrive.db',
),*/
'db'=>array(
'connectionString' => 'mysql:host=nuestro-host;dbname=nombre-bd',
'emulatePrepare' => true,
'username' => 'nuestro-user',
'password' => 'nuestra-password',
'charset' => 'utf8',
),
</pre>Anonymoushttp://www.blogger.com/profile/10553947582289033991noreply@blogger.com0