Php retorcido
slot machine tournaments
- Añadir nuevo comentario
- 6 lecturas
Código para hacer edición en el lugar, con jQuery y Symfony
Acostumbrado a usar jQuery y no teniendo en el plugin sfJqueryPlugin de Symfony las funciones para hacer edición en el lugar, bajé el plugin Another In-Place Editor, jQuery Plugin en su versión pack, lo agregué en /web/js/jq/ y agregué la siguiente función en /plugins/sfJqueryPlugin/lib/helper/jQueryHelper.php
- function jq_input_in_place_editor_tag($element_id, $url, $options=array()) {
- sfContext::getInstance()->getResponse()->addJavascript('jq/jquery.inplace.pack.js');
- $values="url:'".url_for($url)."',params: 'ajax=yes'";
- $textarea=false;
- if(isset($options['rows'])) {
- $textarea=true;
- $values.=", textarea_rows: ".$options['rows'];
- }
- if(isset($options['cols'])) {
- $textarea=true;
- $values.=", textarea_cols: ".$options['cols'];
- }
- if($textarea) {
- $values.=", field_type: 'textarea'";
- }
- $code="$(\"#$element_id\").editInPlace({".$values."});";
- return jq_javascript_tag($code);
- }
La función tiene los mismos argumentos de input_in_place_editor_tag, así que puede ser utilizada sin mayores cambios
- 9 comentarios
- 3231 lecturas
Seguimos con symfony, 2 trasnochadas y dos monitores después
Cómo ha se habrán dado la lata con los dos artículos anteriores sobre symfony, he tenido que tragarme más de un par de trasnochadas mejorando una aplicación en symfony que debo sacar sí o sí esta semana.
Después de leer casi completo EL LIBRO y partes de la API, ya casi, casi, puedo decir que entiendo como funciona el bicho.
En primer lugar, todavía me parece muy razonable la forma en la cual estructuraron la capa "Control". No es nada del otro mundo desarrollarlo (es cosa de hacer un par de includes bien puestos en función del URL), pero el sistema de ruteo con las URL no está mal. Casi drupaliano :)
- 2 comentarios
- Leer más
- 2656 lecturas
PHP 4.4.0, o la escoba que está quedando
Aunque yo no he tenido muchos líos, excepto con phppgadmin, parece ser que los arreglos en la manera de trabajar las referencias en PHP 4.4.0 ha dado multitud de problemas a mucha gente.
Lo malo ha sido la actitud de los desarrolladores de PHP, tipo "su código es malo, arréglenlo". Hombre, que uno trabaja muchas veces con código de muchas otras personas, ya sea por las bibliotecas o por otros desarrolladores del proyecto, y es horrible tratar de encontrar todos los movimientos extraños de referencias dando vueltas.
En términos sencillos: no es nada bueno que un sistema completamente funcional en 4.3.x comienza a dar fallos extraños en un servidor, sólo por el hecho de que un buen admin se le ocurrió actualizar la versión a la 4.4.x. No deberían presentarse problemas tan graves de compatibilidad dentro de una revisión interna, ¿no es cierto?
- 2 comentarios
- Leer más
- 2497 lecturas
Nicechat: Un agradable chat en Php, Mysql y XmlHttpRequest
Se lo mostré a Christian, y le gustó. Lo pusé en una aplicación del lugar donde trabajo y las chicas se pusieron a chatear como locas.
Así que, nada que hacer. Presentamos en sociedad a nicechat, el chat en php que puede (o no) hacerles la vida más fácil.
Entre sus características se encuentran:
- Pequeño: No más de 20kb de código
- Rápido: En una intranet, fácil hace ping de 60ms, sin ningún tipo de optimización. En internet, los ping pueden llegar a 300ms
- Fácil de instalar: Es cosa de meter el sql en la base de datos, configurar un archivo y comienza a funcionar!
- Fácil de adaptar: El sistema está hecho para que se integre del modo menos instrusivo posible en cualquier tipo de aplicación ya hecha. Hasta creo que sería fácil con smarty :P
- 21 comentarios
- Leer más
- 12827 lecturas
PHP5 para Ctags
Un patch para Ctags 5.4.2, que permite listar por separado los miembros privados, protegidos y públicos de las clases en PHP 5. Buena adición para jEdit!
- Añadir nuevo comentario
- 2708 lecturas
Libro a leer: PHP 5 Power Programming
En la lista en español de php lo recomendaron harto, así que a leerlo:
PHP 5 Power Programming, por Andi Gutmans, Stig Bakken, Derick Rethans.
- 4 comentarios
- 5164 lecturas
Mi primer módulo drupaliano : codefilter
Bueno, tenía que pasar algún día, no? Como suelo publicar mi buena cantidad de código, me gusta que se vea lo más bonito posible. En Wordpress ocupaba un plug-in que pasaba todo texto entre <pre lang='php> por highlight_string. Al pasar a Drupal, no me quedó más que activar el modo php en algunos post y hacerlo a mano.
Obviamente, esto aburre. Así que decidí gastar un par de neuronas y ver si podía crear un filtro. En la página de ejemplo de módulo de filtro de la documentación de Drupal encontré la información que necesitaba.
- 3 comentarios
- Leer más
- 4146 lecturas
Lector de Excel, en Php nativo
El ejemplo incluido reza algo como lo siguiente:
- require_once 'Excel/reader.php';
- $data = new Spreadsheet_Excel_Reader();
- $data->setOutputEncoding('CP1251');
- $data->setUTFEncoder('mb');
- $data->read('jxlrwtest.xls');
- /*
- $data->sheets[0]['numRows'] - count rows
- $data->sheets[0]['numCols'] - count columns
- $data->sheets[0]['cells'][$i][$j] - data from $i-row $j-column
- $data->sheets[0]['cellsInfo'][$i][$j] - extended info about cell
- $data->sheets[0]['cellsInfo'][$i][$j]['type'] = "date" | "number" | "unknown"
- if 'type' == "unknown" - use 'raw' value, because cell contain value with format '0.00';
- $data->sheets[0]['cellsInfo'][$i][$j]['raw'] = value if cell without format
- $data->sheets[0]['cellsInfo'][$i][$j]['colspan']
- $data->sheets[0]['cellsInfo'][$i][$j]['rowspan']
- */
- error_reporting(E_ALL ^ E_NOTICE);
- for ($i = 1; $i <= $data->sheets[0]['numRows']; $i++) {
- for ($j = 1; $j <= $data->sheets[0]['numCols']; $j++) {
- echo "\"".$data->sheets[0]['cells'][$i][$j]."\",";
- }
- echo "\n";
- }
Nice. Hubiera preferido un método basado en objetos, de tal manera de hacer algo como
- while($aSheet=&$data->fetchSheet()) {
- while($aRow=$aSheet->fetchRow()) {
- echo $aSheet->name.' '.$aRow[1];
- }
- }
- 41 comentarios
- 27591 lecturas
Ordenar por campos múltiples en arrays asociativos
Una de las grandes dudas existenciales es como lograr ordenar un array de dos dimensiones por los nombres de los campos en la segunda dimension.
Un ejemplo bruto:- $a=array(
- 0=>array('id'=>1,'nombre'=>'Uno'),
- 1=>array('id'=>2,'nombre'=>'Dos')
- );
En este caso, podríamos querer ordenar las filas por la columna 'id', o la columna 'nombre'. En el fondo, lo mismo que ORDER BY en SQL.
Para los que no saben, la función uasort permite ordenar un array de acuerdo al criterio que estimemos conveniente, a través de la entrega de un callback. O sea, podríamos ordenar a mano el array por el nombre haciendo
- uasort($a,'ordenar');
- function ordenar($a,$b) {
- if ($a['nombre']>$b['nombre']) {return 1;
- } elseif ($a['nombre']<$b['nombre']) {return -1;
- } else {
- return 0; }
- }
El problema está en si queremos ordenar por múltiples campos. Por decir, primero el nombre, luego el id, o viceversa. La solución está en crear en forma dinámica el código que permita resolver el problema.
Si se dieron cuenta, la función es muy simple. Debe devolver 1 si se quiere dar a entender que el primer valor de la tupla debe ir después, -1 si debe ir antes.
Por tanto, bastaría con entregar el array y la lista de campos en un array a la función, señalando la dirección del orden (ascendente o descendente). La función debería crear en tiempo real el código necesario para ordenar, el cual se 'inyecta' en el uasort a través de la función create_function, la cual nos permite crear una función lambda o anónima, a partir de una cadena.
Basta de chachara y les muestro la función con un pequeño ejemplo
- function ordenar(&$aTabla,$aCampos) {
- $aSalida=array();
- foreach($aCampos as $sCampo=>$sOrden) {
- if($sOrden=='ASC') {
- $s1='>';
- $s2='<';
- } else {
- $s1='<';
- $s2='>';
- }
- $aSalida[]=<<<HERE
- if(array_key_exists('$sCampo',\$a)) {
- if(\$a['$sCampo'] $s1 \$b['$sCampo']) {
- return 1;
- } elseif (\$a['$sCampo'] $s2 \$b['$sCampo']) {
- return -1;
- }
- }
- HERE;
- }
- $aSalida[]='return 0;';
- uasort($aTabla, create_function('$a, $b', implode("\n",$aSalida)));
- }
- $tabla=array(
- array("nombre"=>"7-Juan Perez","direccion"=>"Aseo 100"),
- array("nombre"=>"6-Juan Perez","direccion"=>"Aseo 300"),
- array("nombre"=>"2-Juan Perez","direccion"=>"Aseo 200"),
- array("nombre"=>"1-Juan Perez","direccion"=>"Aseo 500"),
- array("nombre"=>"9-Juan Perez","direccion"=>"Aseo 900"),
- array("nombre"=>"3-Juan Perez","direccion"=>"Aseo 700"),
- array("nombre"=>"4-Juan Perez","direccion"=>"Aseo 600"),
- );
- ordenar($tabla,array("nombre"=>"ASC","direccion"=>"ASC"));
- print_r($tabla);
Ven? Nada tan terrible.Recuerden dos cosas: la tabla se envía por referencia a la función y, segundo, los campos se envían en un array asociativo, siendo la clave el campo y el valor "ASC" o "DESC"
Si algo no se entiende mucho, tiren un comentario!
- 8 comentarios
- 14950 lecturas

Comentarios recientes
hace 1 día 23 horas
hace 1 día 23 horas
hace 3 días 23 horas
hace 5 días 13 horas
hace 1 semana 4 días
hace 1 semana 5 días
hace 2 semanas 9 horas
hace 2 semanas 6 días
hace 3 semanas 2 días
hace 3 semanas 4 días