Diseño y programación de un portfolio web con CakePHP
junio 22, 2011 Dejar un comentario
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!