Diseño y programación de un portfolio web con CakePHP

Una de las secciones que más he cuidado de dejandomarcas.com v2.0 es el portfolio. Al programar con CakePHP he podido diseñar un controlador que me obtenga todos los datos de mis trabajos de forma clara y ordenada, dejando a la vista que se encargue de cómo quiero mostrarlo en pantalla.

A continuación voy a explicar cómo lo he hecho, tanto el código del controlador, como el diseño de la vista, para que si quereis montar una galería de imágenes o un portfolio personal, podais hacerlo de una forma sencilla, siempre utilizando CakePHP, así aprendemos un poquito de este maravilloso framework.

Creo el modelo -> app/models/portfolio.php

<?php 

// Este es el modelo que uso para trabajar con la bd
class Portfolio extends AppModel {
	
  // Nombre modelo
  public $name = 'Portfolio';
	
  // Nombre tabla BD
  public $useTable = 'portfolio';

  // Campo de ordenación por defecto
  public $order = 'Portfolio.id DESC';
	
  // Usado para la validacion de los datos de entrada dentro del panel de administracion
  public $validate = array(
    'nombre' => array('required' => array('rule' => 'notEmpty', 'message' => 'name can not be empty')),
    'descripcion' => array('required' => array('rule' => 'notEmpty', 'message' => 'description can not be empty'))
  );
}

?>

Creo el controlador -> app/controllers/home_controller.php


<?php

class HomeController extends AppController {

  // Nombre controlador
  public $name = 'Home';

  // Modelos empleados
  public $uses = array('Portfolio');

  // Disposición de diseño por defecto
  public $layout = 'main';

  // Componentes utilizados	
  public $components = array('String');

  // Helpers utilizados
  public $helpers = array('String');

  /* METODOS PUBLICOS */
	
  // Indice de trabajos
  public function index() {
	
    // Busco todos los registros
    $registers = $this->Portfolio->find("all", array("conditions" => array("Portfolio.ver" => 1)));
				
    // Seteo el registro y los medios
    $this->set('registers', $registers);
  }
	
  // Metodo para lanzar una URL del portfolio sumando uno a las visitas que ya tenia
  public function getURL($id) {

    // No renderizo la vista
    $this->autoRender = false;
		
    // Busco el registro correspondiente a la id recibida
    $register = $this->Portfolio->find("first", array("conditions" => array("Portfolio.id" => $id)));
		
    // Recupero la id
    $this->Portfolio->id = $id;
		
    // Sumo uno a las visitas
    $visitas = $register['Portfolio']['visitas'] + 1;

    // Guardo los datos
    if ($this->Portfolio->saveField('visitas', $visitas)) {
			
      // Lanzo la URL
      $this->redirect($register['Portfolio']['enlace']);
    }
  }
}
?>

Y por último, la vista -> app/views/themed/default/home/index.ctp


<div id="bread">
  <?php echo $html->image('main/blue-folder-open-document.png')?><?php echo __('latest works');?>
</div>
<?php
  // Recorro los registros del controlador
  foreach ($registers as $register) {
?>
  <div class="project">
    <div class="box">
      <a href="<?php echo $html->url(array('controller' => 'home', 'action' => 'getURL', $register['Portfolio']['id'])); ?>" target="_blank">
        <?php echo $html->image($register['Portfolio']['imagen'], array('alt' => __($register['Portfolio']['nombre'], true)))?>			
      </a>
    </div>
    <h2><?php echo $register['Portfolio']['nombre'];?></h2>
    <p>» <?php echo utf8_encode($register['Portfolio']['descripcion']);?></p>
  </div>
<?php
}
?>

Con estos tres archivos ya tengo declarado el modelo de datos que voy a utilizar junto con sus validaciones para el panel de administración, el controlador que me ayuda a declarar todos los métodos para gestionar los datos, y por último, la vista, que mostrará en pantalla los datos obtenidos.

El resultado es el que veis en http://www.dejandomarcas.com/index.php/home

¿Tenéis dudas?, pues animaros y comentar!

background-image: ese gran aliado

Un factor importante a la hora de diseñar nuestra web es el background. Yo siempre opto por un color sólido, pero es cierto que a veces queda mejor un pequeño pattern con una imagen simple. El efecto queda perfecto: imagen de poco tamaño, totalmente personalizable, acorde con el css de nuestro layout, y totalmente compatible con cualquier navegador.

¿Cómo puedo conseguir un pattern atractivo sin necesidad de volverme loco con Photoshop?, fácil, visitando AVA7 Patterns, una magnífica web que pone a nuestra disposición cientos y cientos de formas de crear nuestro patrón.

Espero que también os guste :)

¿Necesitas inspiración?

Es cierto que a la hora de diseñar un formulario, un layout, un header, y un larguísimo etc. para cualquiera de nuestros proyectos necesitamos inspirarnos en algo para poder encontrar ese diseño sólido que andamos buscando.

Durante muchos años, páginas como cssmania o csszendgarden han sido motivo de visita obligada para conseguir ese toque final que andamos buscando, pero existe algo más concreto en la red? es decir, y si necesito diseñar una página 404 para mi web?

Os presento PatternTap.com

Pattern Tap is here to satisfy and encourage the inspiration needs of my interface design peers and peeps. We aspire to be the one stop pattern shop for your next inspiration need.

Sin duda una de mis web favoritas y de asistencia obligada en mis marcadores. Desde aquí se puede conseguir muchísima inspiración en múltiples de sets de diseños. Formularios, navegaciones, cabeceras, layouts, comentarios, listas, subnavegación, y un maravilloso etc. que nos ayudarán a conseguir ese diseño que tanto vamos buscando.

Espero que os guste :)

User experience

Es difícil medir la experiencia de un usuario en nuestra web. Gracias a Google Analytics y a otras aplicaciones, podemos hacernos una idea de qué está pasando desde que un cliente entra en nuestra página hasta que se va. Pero, realmente es fiable?.

Otra buena práctica es la de buscar a una persona totalmente ajena al proyecto y al campo, sentarla delante de un ordenador y observar cómo navega por nuestro site. Tomar apuntes, fijarse bien donde clica y donde no, ver si se ha dado cuenta de ese magnífico banner que tanto te ha costado diseñar, etc.

Acabo de encontrar una herramienta magnífica que nos ayuda en esta tarea. Se trata de CrazyEgg, una empresa especializada en User Experience que ofrece sus servicios para poder medir este hecho.

El sistema se basa en 4 factores principales: Heatmap, Scrollmap, Confetti y Overlay.

Heatmap nos permite ver los clicks de nuestros usuarios mediante un mapa de calor. Cuanto más azul es el color, menos clics ha habido, y cuanto más rojo, más clics ha tenido dicho enlace. Es genial como se ve el montaje en directo.

 

Scrollmap nos permite medir el factor de rebote. Si tenemos una página muy «larga», podemos observar qué factor de scroll ha hecho el cliente, de manera que podamos cazar al cliente que entra, echa un ojo, y se va sin hacer nada.

 

Confetti puede que sea de las más interesantes, ya que no solo nos permite ver los clics como Heatmap, sino que también nos lo fragmenta en enlaces referidos, sources, términos de búsqueda o keywords y un largo etc.

 

Overlay nos muestra un resumen del número de clics que ha tenido un enlace.

Vale, pero cuánto cuesta todo esto?, pues no es caro, en serio, por 9 euros al mes podemos tener derecho a tener 10 páginas monotorizadas.

 

Más información CrazyEgg

Dejandomarcas.com V2.0

Ya está arriba la nueva versión de Dejandomarcas.com

He procedido a reprogramar toda la aplicación usando CakePHP. El diseño también ha sufrido un cambio drástico, mostrando una cara mucho más limpia, más fresca y mucho más intuitiva.

Espero que os guste :]

CakePHP – Cómo hacer un contador de visitas

Desde hace unos meses estoy programando con CakePHP y no deja de asombrarme su simplicidad y su potencia a la hora de programar cualquier aplicación web. Haciendo mi portfolio, se me ocurrió la idea de montar un contador de clics para mis diferentes trabajos, de manera tal que cuando un usuario haga clic en un trabajo para lanzar la URL, el sistema registra ese clic en la base de datos.

Cómo se haría esto?, fácil:

<?php

/* Esto es un metodo del controlador, por tanto, debera estar en app/controllers/controller.php

// Metodo para lanzar una URL del portfolio sumando uno a las visitas que ya tenia
public function getURL($id) {

     // Lo defino en false para no renderizar la vista
     $this->autoRender = false;
		
     // Busco el registro correspondiente a la id recibida
     $register = $this->Portfolio->find("first", 
                                   array("conditions" => array("Portfolio.id" => $id)));
		
     // Recupero la id
     $this->Portfolio->id = $id;
		
     // Sumo uno a las visitas
     $visitas = $register['Portfolio']['visitas'] + 1;

     // Guardo los datos
     if ($this->Portfolio->saveField('visitas', $visitas)) {
			
          // Lanzo la URL
          $this->redirect($register['Portfolio']['enlace']);
     }	
}

?>

De esta manera, cuando alguien haga clic sobre uno de mis proyectos, primero lo localizo, después le sumo uno a las visitas y después utilizo el método redirect para redirigirlo a la URL del proyecto que ha elegido.

Para usar este método, en la vista habrá que montar el link de la siguiente manera:

<?php

// Sobre el enlace HTML, definimos el nombre del controlador, la accion, y el registro
<a href="<?php echo $html->url(array('controller' => 'Name',
                                     'action' => 'getURL', 
                                     $register['Portfolio']['id'])); ?>" target="_blank">Link</a>

?>

De esta manera, ya podemos saber cuántos clics recibe un vínculo de nuestra web.

Referencia CakePHP Cookbook

Dejandomarcas.com y cakePHP

Estoy programando de nuevo mi site principal usando el framework cakePHP.

Pronto estará en producción corriendo con este framework cuyo trabajo me ha agilizado bastante. Espero que os gusten los cambios ya que hacía bastante tiempo que no actualizaba mi web (en cuanto a diseño y programación). Decir también que me mudo de Arsys, ya que, después de muchos años con muchísimos errores, he decidido mudarme de servidor a uno más barato y con más opciones de configuración, ya que desde el servidor compartido que tengo contratado con ellos me es imposible editar el .htaccess, imprescindible para que cakePHP trabaje con URLs amigables

Os dejo un pequeño pantallazo para que veais cómo está quedando:

Nuevo diseño y programación

Creando un ámbito de trabajo

Desde hace unos años estoy programando en PHP tanto para empresas como para mí particularmente. Gracias a dios, desde entonces nunca me ha faltado trabajo y he estado en empresas grandes al pie del cañón (Cajasol, Sadiel…).

En mi experiencia he pasado a programar desde el notepad hasta en linux, pasando por frontpage, dreamweaver, notepad++, incluso microsoft word. Ahora puedo presumir de tener una buena base para poder decidir qué necesito para desarrollar bien mi trabajo, para organizar mi tiempo e intentar ser lo más productivo posible.

Esta es mi opción para poder desarrollar sin contratiempos y con la máxima eficacia:

  1. A nivel de hardware, procesador de cuatro núcleos intel core duo 2 a 2.2ghz.
  2. Memoria DD3 a 1.333mhz. Un total de 8ghz.
  3. Un buen monitor de 21 pulgadas (con uno sobra, aunque a mucha gente les guste tener dos, yo lo probé en su día y me sobró uno al tener expose o multiescritorios).
  4. A nivel de software, sistema operativo Linux, por mi parte, Ubuntu 11.04.
  5. Paquete Apache 2, MySQL, phpMyAdmin y PHP5.
  6. Para la gestión de bases de datos MySQL, phpMyAdmin y MySQL Workbench (fundamental para los modelos de datos).
  7. Para picar código, Gedit, el editor de código de Ubuntu.
  8. Web browser, sin duda alguna, Firefox.
  9. Para la comunicacion entre el entorno de desarrollo y el de producción, conexión SSH directo al servidor o en su defecto, FileZilla (cliente FTP).
  10. Para testear las aplicaciones en windows con Iexplorer en todas sus dichosas versiones, una máquina virtual. Yo uso Virtual Box.
  11. Para el control de versiones y archivos, Subversion.
  12. Para backups, una opción es Dropbox (por lo menos a mí me parece bastante buena, desde mi total ignorancia).
  13. Para gestionar las tareas pendientes, incidencias y desarrollos de un proyecto, una aplicación de código abierto hecha en PHP y gratis: Mantis Bug Tracker.
  14. Y por último pero menos importante, el framework que utilizo es CakePHP.

En cuanto a la configuración local, al tener Linux es mucho más cómodo. Puedes editar los hosts y los espacios virtuales de una forma muy rápida y sencilla. Sinceramente, si alguien quiere abrirse camino en este complicado mundo, yo creo que esta es la base para poder trabajar en un entorno profesional y productivo.

¿Y vosotros?, ¿cómo lo tenéis montado?, me encantaría saber cuál es vuestra opinión y de qué forma trabajáis para la web.

Instalar Ubuntu
Instalar el paquete Apache, MySQL y PHP para Ubuntu
Instalar Firefox 4 para Ubuntu
Instalar MySQL Workbench
Conexión SSH a servidor
Instalar FileZilla Ubuntu
Instalar Virtual Box
Instalar Subversion Ubuntu
Instalar Dropbox
Instalar Mantis Bug Tracker
Instalar CakePHP

Lipsum o quijotipsum?

Para todas aquellas personas que usamos el famosísimo lipsum a la hora de generar texto aleatorío y «rellenar» nuestros diseños, os presento otra magnífica herramienta llamada Quijotipsum. El servicio es básicamente igual que lipsum, pero esta vez, en lugar de generar texto en latín, nos muestra textos sacados directamente de la obra El Quijote.

Muchos no sabréis de qué estoy hablando, pero para los que lo sepan tanto como yo, seguro que les hace gracia la idea.

Enlace Quijotipsum

Agatel.net

Otro proyecto más para el tintero.

Este ya estaba acabao hace tiempo, lo que pasa es que el cliente aún no lo había confirmado para subirlo a su hosting. Se trata de Agatel, una empresa de telecomunicaciones que opera en barcelona. La web es bastante sencillita, clara, limpia y comercial.

Os invito a echarle un vistazo. En breve subiré lo que hoy por hoy será mi obra maestra… pronto tendreis más detalles, lo prometo.

Un abrazo.