Freelance Programador PHP ofrece sus servicios

juan_belon_PHP

Después del artículo programador Zen, sólo quedaba demostrar que con paciencia ,dedicación y perseverancia se consiguen terminar muchos proyectos, ésta web: Programador PHP, sólo refleja algunos de ellos por cuenta propia, en ella,además ofrezco mis servicios desde ella,…a algun@s ni les cobro! jajaja.

Hay que seguir mejorando, nunca dejar de aprender, esa es la actitud, …finalmente o eres bueno en lo que haces o te retiras…

En mi caso, antes de que acabe el año tengo que preparar dos presentaciones de zenphp en mi Escuela, una en Octubre y otra en Diciembre…me han pedido que lleve más ejemplos técnicos. ¡Deséame buena suerte! 🙂

Continue reading

Compártelo

Programador Zen

Las reglas del verdadero Programador Zen son las siguientes:

  1. Practicar Zazen (encontrar el dojo más cercano)
  2. Mientras estamos programando, sólo estamos programando, nos convertimos en el código
  3. La actitud del verdadero programador Zen es la de siempre continuar aprendiendo, cada vez que escribimos código es como si fuera nuestra primera vez, nunca dejamos de tener el espíritu del principiante y al mismo tiempo, lo escribimos como si fuera la última vez
  4. Enseñar y ayudar a todos los seres que lo necesiten
  5. Realizar que todo es interdependiente
  6. No-obsesión: no obsesionarse ni con los problemas, ni con las herramientas; si existe un problema, puede o no puede tener solución, no apegarse a las herramientas
  7. No-miedo: cada instante es nuevo ,fresco; seguir aprendiendo, tal como dice la regla número 3…no acostumbrarse

Tras estas sencillas y profundas reglas seguidas con concentración y atención al instante presente encontraremos más fácilmente la felicidad y el estado de paz interior que corresponde a la madurez del ser humano, la condición normal…respirando apacible y profundamente 🙂

Sed muy felices con vuestras creaciones!

Compártelo

Prioridad lineal de los procesos de una aplicación web

Cuando estamos manteniendo una aplicación web suele ocurrir que el usuario final nos pide cambios que rompen el esquema inicial de la misma, es decir, se quieren saltar todas las reglas del diseño en el que nos habíamos “partido los cuernos” de forma que fuera todo fácilmente mantenible y estable asi como escalable.

En estos momentos tenemos dos opciones: cabrearnos mucho y quejarnos con el usuario para que lo haga a “nuestra manera o carretera”, o bien, mucho mejor, que la prioridad forme parte de todo este asunto.

Es ahora cuando decidimos que la segunda opción favorece nuestro trabajo de forma que podemos ir todavía más un paso adelante, es decir, si después de realizar todas las tareas necesarias para generar una página de una aplicación el contenido generado requiere un cambio de última hora, podemos utilizar una prioridad para construir/destruir dicho contenido. Un ejemplo es utilizar CSS, la prioridad se establece con la opción “!important” ,entonces, si en el HTML de nuestro primer diseño de la web tenemos un listado de hoteles y necesitamos que en uno de los hoteles del listado se muestre una división de forma distinta, simplemente vamos a permitir que en el editor HTML WYSYWYG se puedan introducir etiquetas de estilo: <style> [ extended_valid_elements: “style” en tinymce ]y ahora vamos a reescribir la regla donde se necesita que se muestre de otra forma el contenido, en lugar de cambiar toda la lógica de la programación, entonces ,usando “!important” al lado de las reglas, por ejemplo para el ancho :

<style> #midivision { width: 350px !important;} </style>

de esa forma le damos prioridad a esta regla, lo mismo se puede hacer con javascript y el argumento “defer” de la etiqueta <script>, y lo mismo se puede utilizar en PHP si especificamos el orden de carga de las clases, etc etc.

Compártelo

Tratamiento dinámico avanzado con etiquetas entre dominios



Para compartir el uso de etiquetas entre varios dominios lo que se suele hacer es compartir una base de datos en un servidor y utilizar varias aplicaciones que comparten modelos de datos y modifican las vistas (visualizadores) para mostrar los resultados en una sinergía creada por los usuarios que rellenan artículos, contenido, noticias, productos, etc. y establecen las etiquetas asociadas a toda esta información…

La función que va en la clase tags del modelo de datos de zenphp es:

 /**
  * Devuelve un array con todos los tags de todas las tablas que coinciden con $nombre
  **@TODO: Es inestable, no carga bien los modelos de datos que no estuvieran ya cargados...
  *
  * @param str $nombre
  * @param str $modelos
  * @return array
  */
 function obtener_lista($nombre="",$modelos=""){
  $nombre    = str_replace("_","-",$nombre);
  $modelos   = empty($modelos)?array("noticias","contenidos"):split(",",$modelos);
  if (!is_array($modelos)) return false;
  $etiquetas = array();
  foreach ($modelos as $modelo){
   $unset =false;
   if (!$this->padre->$modelo instanceof zen_modelo_datos) {
   	if (!zen___importar_modelos($this->padre,$modelo)) {
   		continue;
   	} else {
   		$unset = true;
   	}
   }
   $c = split(",",$this->padre->$modelo->campos);
   $this->padre->$modelo->poner_campos_al_modelo();
   $r = $this->padre->$modelo->obtener($c[0].",tags");
   $n = count($r);
   for ($i=0; $i<$n; $i++){
   	$tags = str_replace(array(" ,",", "),",",$r[$i]['tags']);
    $tags = split(",",$tags);
    foreach ($tags as $tag){
     $tag = html_entity_decode($tag);
     if (empty($nombre)){ //No buscamos un tag en concreto sino todos:
      if (!in_array($tag,$etiquetas)) //Insertar en la lista
       $etiquetas[] = $tag;
      continue;
     }
     if (zen_codifica_nombre_para_url($tag)==
    	zen_codifica_nombre_para_url($nombre))
     {
      if (!in_array($r[$i][$c[0]],$etiquetas)){
     	array_push($etiquetas,array(
     	 "modelo"=> $modelo,
     	 "id"   =>  $r[$i][$c[0]]
        ));
      } //comprobacion de si se estaba repetida
     } //comprobacion de si es la buscada
    } //bucle foreach de tags
   } //bucle for que recorre todos los tags de este campo
   if ($unset) unset($this->padre->$modelo);
  } //bucle for que recorre todos los modelos especificados
  return $etiquetas;
 }

Para utilizar una función dinámica que un visualizador (html_tags extends zen_html_modelo_datos) interprete usando diferentes plantillas para cada dominio podemos usar la siguiente :

 /**
  * Mostrara una pagina con un listado de tags, que enlazan a los distintos dominios,
  * se especifica el $dominio para ver cual de los contenidos han de rellenarse
  *
  * @param str $tag
  * @param str $dominio
  */
 function ver($tag,$dominio=ZF_SITIO_WEB){
  //Intentemos encontrar el tag
  $tags = $this->padre->obtener_lista($tag);
  $p = new zen_plantilla();
 // if (!count($tags)) die(sprintf("no hay ningun elemento con el tag %s",$tag));//header("Location: ".ZF_SITIO_WEB);
  $r['tag'] = str_replace("_","-",zen_sanar($tag));
  $r['enlaces'] = "";
 
  foreach ($tags as $tag){
   switch ($tag['modelo']){
   	case 'noticias': //Noticias a la web del grupo (corporativa)
   	 $tit = $this->padre->padre->noticias->obtener_campo($tag['id'],"titular");
   	 $r['enlaces'] .= 'Noticia: <a href="'.ZF_SITIO_WEB.'noticias/ver/'.$tag['id'].'/'.zen_codifica_nombre_para_url($tit).
   	 	'/">'.$tit.'</a><br>';
   	 break;
   	case 'contenidos': //Presentacion.. (informacion corporativa)
   	 $tit = $this->padre->padre->contenidos->obtener_campo($tag['id'],"nombre");
   	 $zona= $this->padre->padre->contenidos->obtener_campo($tag['id'],"zona");
   	 $r['enlaces'] .= 'Presentaci&oacute;n: <a href="'.ZF_SITIO_WEB.'presentacion/'.
   	 	$tag['id'].'/'.zen_codifica_nombre_para_url($tit).
   	 	'/">'.$tit.'</a><br>';
   	 break;
   }
  }
  $this->padre->padre->contenido['contenido'] = $p->contenido_reemplaza("etiquetas/indice.html",$r);
  switch ($dominio){
   case ZF_SITIO_WEB:
    $this->
    $this->padre->padre->contenido['columna_izda1'] = $this->listar();
    $this->padre->padre->html->mostrar_web("Etiqueta ".
  	 zen_sanar($r['tag']),"sel_inicio","cab_contacto.html","rut_etiqueta.html"); 
  	break;
   default:
    //$titulo,$menu,$ruta="",$col_izda="indice"
    $this->padre->padre->html->mostrar_web("Etiqueta ".$tag,"sel_indice","rut_etiqueta.html","indice"); 
  	break;
  } 
 } //fin-ver
Compártelo

Automatizando Flash mediante XHTML, DHTML,ActionScript y PHP

Primero deberemos preparar el Flash, con un poco de código en ActionScript para cargar el XML y guardar las variables Flash en el nodo root de la película de forma que así activaremos las animaciones

Después diseñamos el XML como plantilla para zenphp:

así como el JavaScript en otra plantilla, que escribirá el objeto Flash con las variables mediante PHP

sólo queda el PHP, una función simplísima para escribir los contenidos:

Y ya tenemos funcionando el conjunto para cualquier entrada de la base de datos:

Compártelo

Nuevo proyecto basado en zenphp para el CUSL3

Este año vuelvo a participar en el Concurso Universitario de Software Libre en su tercera Edición con un proyecto para facilitar una plataforma con la que ayudar a la gente que se quiere preparar sus exámenes, disponer fácilmente así de apuntes, bibliografía, foros de asignaturas, pdf’s con enunciados de exámenes, redes que comunican palabras que comparten conocimiento entre las personas y etc… qué os voy a contar, mejor lo investigamos y luego desarrollamos, ¿no os parece? 🙂

El blog: http://pie.zenphp.es

Más por venir 🙂 sigan atentos…

Compártelo

Encontrar el equilibrio en las cosas pequeñas

Siendo detallista y equilibrado encontraremos que nuestro trabajo se ha convertido en algo sumamente sencillo de mantener.

El caso más fundamental de lo que estoy hablando es cuando un cliente nos pide un nuevo cambio que requiere modificar, en este caso añadir un campo nuevo de imagen de miniatura a una tabla de noticias y,bien, ahora tenemos que añadirlo en la interfaz de administración además de en la BD y en el cliente que habíamos escrito…

Sabemos que podemos implementar la lógica de administración fácilmente haciendo copio y pego de la parte del formulario de edición de la noticia cambiando el nombre por el del campo de la imagen ,guardado de ficheros, procesamiento de imágenes “thumbs” , etc.

Lo que debemos recordar es que podemos encontrar el equilibrio en el funcionamiento por medio de las sentencias IF de SQL, de modo que si ya teníamos un campo imagen y ahora lo que necesitamos es mostrar una miniatura pero no queremos cambiar el resto, simplemente modificamos la línea en la que se nombran los campos para realizar las operaciones de la siguiente forma:

si antes se hacia un “Select imagen from noticias” ,ahora sólo tenemos que cambiar “imagen” por

IF(miniatura=”,imagen,miniatura) as imagen

de forma que el resto de la lógica del programa se mantiene intacta, sólo hemos hecho un cambio más las operaciones básicas para administrar los datos con el campo 😉

Ahora sólo queda relajarse sabiendo que todo funciona sin quebrarnos demasiado la cabeza jeje

Compártelo

Howto: filtrar datos de forma avanzada pero pensando como un principiante

En principio, parece que el título del post es algo de lo más paradójico, pero nada más lejos de la realidad, en zenphp siempre hay un Joker, y éstos son los trucos que enseño en este blog, triquiñuelas rápidas y complejas pero fáciles de entender y modificar en poco tiempo.

Continue reading

Compártelo

Diseño de aplicaciones web en Agencia Q4

Diseño web en Granada de la mano de Agencia Q4

Después de tanto tiempo con este proyecto tengo que mencionar a quien me ha ayudado tanto ,dándome espacio y ancho de banda para publicar mis proyectos, también es el lugar donde tengo la oportunidad de desarrollar todas esas maravillosas y glamourosas aplicaciones web:

Agencia Q4

, una agencia de Diseño Web,marketing, publicidad,etc. que se dedica a esto desde hace ya casi 5 años, empezando desde 0 , para ello genera y usa software libre…

Gracias a la libertad en el proceso de creación se pueden crear verdaderas obras de arte. 🙂

Compártelo

Google chrome: otra aproximación de una interfaz para mejorar las aplicaciones web

Aplicaciones web

Como vengo diciendo en mis artículos de este blog, con zenphp se escriben sistemas de aplicaciones web, ahora “San Google” ha creado el navegador Google Chrome para hacer más fácil la presentación y funcionamiento de estos programas tan completos como dinámicos y potentes para plataforma Internet que son dichas aplicaciones web.

 

El navegador está construido como el proyecto zenphp, desde 0, a partir de las necesidades de la misma web, i.e., de la gente, del público,los usuarios…(sino mirad los dibujos con términos:OMFG)

Es estable y muy parecido a Mozilla Firefox de hecho es una copia XD,sin embargo un poco más rápido, supongo que por no tener un motor con soporte de extensiones y otros componentes…sin embargo sigue siendo seguro…y eficiente con JavaScript, de forma inteligente se manejan los plugins asi como esos impertinentes popups, separando en cada pestaña de cada vista de una web mediante un proceso independiente,esto le llaman: control…aunque creo que aún les queda un poco por depurar la sincronización entre dichos procesos…
 

 

Interesante sobre todo es la propuesta que hacen con este navegador, ahora estamos viendo si el público reacciona tan bien como se espera…por mi parte me parece que es un buen trabajo el que están haciendo, no me cabe duda de que han elegido al mejor colaborador en cuanto a navegadores se refiere para construir una plataforma que ha de operar con tecnologías distintas…

y hacer que todas funcionen sin cuelges 🙂

Mientras tanto seguiremos desarrollando y depurando webs con FireFox y Firebug jeje

 

Compártelo