Supongamos que se debe tener 'datos conocidos' de una tabla, algo así como en una tabla llamada 'sexo' y los campos son 'Masculino' y 'Femenino', pero todavía no tenemos la tabla. Se puede implementar 'mientras tanto' un campo de tipo enum[1] con esos datos.
Ahora, supongamos que tenemos dos o mas tablas y queremos traer datos de ellas para luego mostrarlos en una lista desplegable, entonces podemos hacer lo siguiente:
En el controlador se define una función llamada addEnums que toma como parámetros el nombre del campo de la tabla y el modelo que se va a usar:
public function addEnums($name, $modelo){
$this->loadModel($modelo);
$type = $this->$modelo->getColumnType($name);
preg_match_all("/'(.*?)'/", $type, $enums);
foreach ($enums[1] as $n){
$data[$n]=$n;
}
$this->set($name, $data);
}
Luego, en el mismo controlador, se llama de la siguiente forma (tengo dos tablas, Users y Players. Users tiene un campo que se llama 'sex' y Player un campo que se llama 'position'):
$this->addEnums('sex','User');
$this->addEnums('position', 'Player');
Y luego, en la vista, se muestran de la siguiente forma:
echo $this->Form->input('sex', array('options'=>$sex));
echo $this->Form->input('position', array('options'=>$position));
Y listo!
[1] http://dev.mysql.com/doc/refman/5.0/en/enum.html
Sitio para difundir y compartir nuestras experiencias en linux, tecnología, ciencia y en general.
Buscar aquí
martes, 11 de noviembre de 2014
Imprimir datos de tipo enum en una lista desplegable en cakephp
viernes, 31 de octubre de 2014
Agregar tipos de archivo a Bluefish
Uno de los editores por defecto que tiene ubuntu es bluefish. Cuenta con resaltado de sintaxis y reconoce muchos lenguajes, pero no los tiene todos, por ejemplo la extensión ctp, que es la que usa CakePHP[1] para mostrar las vistas. Entonces, éste tipo de archivo se ve en blanco y negro. Horrible.
Otra de las cosas que tiene bluefish es que no se puede añadir otro tipo de archivo desde la interfaz gráfica, por lo que aquí está una solución a ese problema.
Lo hacemos con ctp, que es igual a php, pero para cake.
Se copia el archivo donde se especifica cómo se comportará el editor para un lenguaje (php) con el nombre que queremos que aparezca (ctp)
sudo cp /usr/share/bluefish/bflang/php.bflang2 /usr/share/bluefish/bflang/ctp.bflang2
Luego se edita ese archivo
sudo gedit /usr/share/bluefish/bflang/ctp.bflang2
Y reemplazamos con coincidencias de capitalización las palabras PHP por CTP y php por ctp
Y listo!
Al iniciar bluefish coloreará nuestro ctp
[1]http://cakephp.org/
Otra de las cosas que tiene bluefish es que no se puede añadir otro tipo de archivo desde la interfaz gráfica, por lo que aquí está una solución a ese problema.
Lo hacemos con ctp, que es igual a php, pero para cake.
Se copia el archivo donde se especifica cómo se comportará el editor para un lenguaje (php) con el nombre que queremos que aparezca (ctp)
sudo cp /usr/share/bluefish/bflang/php.bflang2 /usr/share/bluefish/bflang/ctp.bflang2
Luego se edita ese archivo
sudo gedit /usr/share/bluefish/bflang/ctp.bflang2
Y reemplazamos con coincidencias de capitalización las palabras PHP por CTP y php por ctp
Y listo!
Al iniciar bluefish coloreará nuestro ctp
[1]http://cakephp.org/
miércoles, 29 de octubre de 2014
SFTP con otra instancia de SSH
Buen día
Supongamos que se contrata un servicio de VPS al que se puede acceder solo por ssh y con una llave como en amazon ec2, y que este VPS va a ser un servidor web. Los usuarios desarrolladores del VPS necesitan acceder a este servidor, pero el administrador no puede dar la llave por seguridad. ¿Solución? Un servidor ftp, por ejemplo, pero ftp es inseguro [1], pero podemos asegurar mediante ssl o pasarlo por un túnel ssh. Supongamos que no queremos todavía ssl, y accedemos a la segunda opción. ¿Cómo hacerlo en la instancia de amazon?
Bueno, he aquí una solución:
Seleccionamos un puerto que no esté siendo usado y lo abrimos en el firewall de amazon añadiéndolo a las reglas de seguridad del grupo. Para el ejemplo será el 2221.
Se crea un usuario para editar los archivos web. En amazon el usuario por defecto es www-data. Así que podemos cambiarlo. Para nuestro ejemplo, creamos el usuario con nombre http. Hacemos que apache arranque con este usuario.
Detenemos apache
sudo service apache2 stop
Editamos /etc/apache2/envvars
Cambiamos www-data por http
Editamos /etc/passwd
Cambiamos /home/http por /var/www
Cambiamos los permisos del directorio /var/www PERO no del directorio en si. Este debe ser de root
chown http:http -R /var/www
chown root:root /var/www
Reiniciamos apache
sudo service apache2 start
Copiamos /etc/ssh/sshd_config con otro nombre /etc/ssh/sshd_ftp_config y editamos ese archivo
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_ftp_config
sudo nano /etc/ssh/sshd_ftp_config
Cambiamos 22 por 2221
Cambiamos ChallengeResponseAuthentication no por ChallengeResponseAuthentication yes
Cambiamos Subsystem sftp /usr/lib/openssh/sftp-server por Subsystem sftp internal-sftp
Y agregamos al final
Match User http
ChrootDirectory /var/www
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
Y arrancamos el nuevo servicio
sudo /usr/sbin/sshd -f /etc/ssh/sshd_ftp_config
Y listo, Ya podemos conectarnos por filezilla por sftp
sftp://[ip]
[1]http://juan0022.blogspot.com/2012/09/ftp-es-un-protocolo-inseguro.html
Supongamos que se contrata un servicio de VPS al que se puede acceder solo por ssh y con una llave como en amazon ec2, y que este VPS va a ser un servidor web. Los usuarios desarrolladores del VPS necesitan acceder a este servidor, pero el administrador no puede dar la llave por seguridad. ¿Solución? Un servidor ftp, por ejemplo, pero ftp es inseguro [1], pero podemos asegurar mediante ssl o pasarlo por un túnel ssh. Supongamos que no queremos todavía ssl, y accedemos a la segunda opción. ¿Cómo hacerlo en la instancia de amazon?
Bueno, he aquí una solución:
Seleccionamos un puerto que no esté siendo usado y lo abrimos en el firewall de amazon añadiéndolo a las reglas de seguridad del grupo. Para el ejemplo será el 2221.
Se crea un usuario para editar los archivos web. En amazon el usuario por defecto es www-data. Así que podemos cambiarlo. Para nuestro ejemplo, creamos el usuario con nombre http. Hacemos que apache arranque con este usuario.
Detenemos apache
sudo service apache2 stop
Editamos /etc/apache2/envvars
Cambiamos www-data por http
Editamos /etc/passwd
Cambiamos /home/http por /var/www
Cambiamos los permisos del directorio /var/www PERO no del directorio en si. Este debe ser de root
chown http:http -R /var/www
chown root:root /var/www
Reiniciamos apache
sudo service apache2 start
Copiamos /etc/ssh/sshd_config con otro nombre /etc/ssh/sshd_ftp_config y editamos ese archivo
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_ftp_config
sudo nano /etc/ssh/sshd_ftp_config
Cambiamos 22 por 2221
Cambiamos ChallengeResponseAuthentication no por ChallengeResponseAuthentication yes
Cambiamos PasswordAuthentication no por PasswordAuthentication yes
Cambiamos Subsystem sftp /usr/lib/openssh/sftp-server por Subsystem sftp internal-sftp
Y agregamos al final
Match User http
ChrootDirectory /var/www
ForceCommand internal-sftp
AllowTCPForwarding no
X11Forwarding no
sudo /usr/sbin/sshd -f /etc/ssh/sshd_ftp_config
Y listo, Ya podemos conectarnos por filezilla por sftp
sftp://[ip]
[1]http://juan0022.blogspot.com/2012/09/ftp-es-un-protocolo-inseguro.html
martes, 28 de octubre de 2014
Descargar fuentes de Mac y iOS
Esto es para que no se me olvide y, para futuras referencias. Para descargar las fuentes de Mac e iOS, proporcionadas oficialmente por Apple, ir a la página:
http://opensource.apple.com/tarballs/
http://opensource.apple.com/tarballs/
Suscribirse a:
Entradas (Atom)