CakePHP, Blog [1]

5 Febbraio 2008

Comincio a fare “sul serio” con l’uso di CAkePHP, ora proverò a creare un blog.

Creazione database

Per prima cosa
Ecco alcuni accorgimenti sulle regole che devono seguire le tabelle (naming convention):

  • I nomi devono essere in plurale inglese (posts ad esempio), in modo che i modelli corrispondenti abbiano nomi in singolare;
  • tutte le tabelle devono avere una chiave primaria chiamata id;
  • le chiavi esterne utilizzate per costruire le relazioni tra le tabelle devono essere nomiate utilizzando il singolare della tabella a cui fanno riferimento seguito da _id (post_id per esempio);
  • è possibile includere i campi created e modified che verranno automaticamente aggiornati da CakePHP quando si opererà sui record.

Cake contiente una classe inflections che si occupa di ottenere i plurali dei vari nomi.

Creo il database blog_cake.

Creo la tabella posts.

/* First, create our posts table: */
CREATE TABLE posts (
id INT UNSIGNED AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(50),
body TEXT,
created DATETIME DEFAULT NULL,
modified DATETIME DEFAULT NULL
);


/* Then insert some posts for testing: */
INSERT INTO posts (title,body,created)
VALUES ('il titolo', 'Questo è il contenuto di un post.', NOW());
INSERT INTO posts (title,body,created)
VALUES ('secondo titolo', 'Altro contenuto di un post.', NOW());
INSERT INTO posts (title,body,created)
VALUES ('Divetimento', 'Divertiamoci.', NOW());

Imposto i dati di connessione al database nel file /app/config/database.php

var $default = array('driver' => 'mysql',
'connect' => 'mysql_pconnect',
'host' => 'localhost',
'login' => '‘,
‘password’ => ‘ ‘,
‘database’ => ‘blog_cakel’ );

Cake contiene una Classe AppModel da cui si parte per ottenere i nuovi modelli, estendendo tale classe di partenza.

Creo il modello Post:

/app/models/post.php


class Post extends AppModel
{
var $name = 'Post';
}
?>

Creo il controller Post
Dato che abbiamo deciso di seguire le convenzioni sui nomi sarà possibile accedere ai modelli implementati direttamente attraverso $this->NOME_MODELLO.
/app/controllers/posts_controller.php

class PostsController extends AppController
{
var $name = 'Posts';
}
?>

Ci aggiungo l’azione index


class PostsController extends AppController
{
var $name = 'Posts';
function index()
{
$this->set(’posts’, $this->Post->findAll());
}
}
?>

Il metodo index registra un array con tutti i post inseriti utilizzando il metodo set, che rende disponibile questo array alla vista.

Creo la vista index

/app/views/posts/index.thtml


<h1>Blog</h1>

<dl>
<dt>
<h3>link($post[’Post’][’title’], “/posts/view/”.$post[’Post’][’id’]); ?></h3>
echo $post['Post']['id'];
echo '<br/>';
echo $post['Post']['created'];
echo '<br/&gt';
echo '<br/>';
?>
</dt>
<dd>
echo $post['Post']['body'];
?>
</dd>
</dl>

Vado con il browser all’indirizzo:
http://localhost/cake/posts/
ed ecco il risultato:

cakePHP blog

Ora aggiungo l’azione view al controller, per gestire la visualizzazione di un singolo post.


class PostsController extends AppController
{
var $name = 'Posts';
function index()
{
$this->set(’posts’, $this->Post->findAll());
}
function view($id = null)
{
$this->Post->id = $id;
$this->set(’post’, $this->Post->read());
}
}
?>

Creo la vista view
/app/views/posts/view.thtml


<h2></h2>
<p><small>Created: </small></p>
<p></p>

Ora se clicco sul titolo del primo post, mi sposto all’indirizzo:
http://localhost/cake/posts/view/1

e vedo la vista view di questo post.

post singolo

Così ho completato tutte le pagine per visualizzare il blog, la prossima volta passo alle pagine per inserimento, modifica e cancellazione dei post.

Gabba Gabba Hey
Bonzo

Plugin shadowbox per wordpress

31 Gennaio 2008

Ho letto di questo componente Shadowbox che è una specie di Lightbox, slimbox che consente di inserire molti tipi di contenuti: non solo foto ma video da youtube, animazioni flash, pagine html, ecc..

Ho quindi pensato di provare a creare il mio primo plugin per wordpress integrando questo componente.

Qui intanto gli esempi di come funziona Shadowbox:

Demos

Images

Single Image (Flickr)
Image Gallery


Large Image

You may have to shrink your browser window to view the effect here. See the handleLgImages option for more information.

Clipped (no resizing) Resized Draggable

Thumb Gallery

Unlike the previous image gallery, this one is triggered by thumbnail links. It also uses a skip counter and is continuous.

Red Red Red

Flash

Single SWF
SWF Gallery
Flash Video

Movies

Single Movie (mov)
Single Movie (mpeg-4, controller disabled)
Single Movie (avi, autoplay disabled)

Single Movie (wmv)
Apple.com Trailer
YouTube
Google Video
Movie Gallery



External Website
This page
Mixed Content Gallery


Il Plugin è molto semplice, basta caricare la cartella che si ottiene scompattando l’archivio compresso nelal cartella /wp-content/plugins, andare nella parte di amministrazione e attivare il plugin.

Per utilizzarlo basta aggiungere rel=”shadowbox” ai link che volete aprire in questo modo.

ecco un po’ di esempi presi dal sito di shadowbox

Markup

The simplest way to use Shadowbox is through your HTML markup. At the very least, you must add a rel="shadowbox" attribute to your links. For example, say you have this link to an image on your page:

<a href="myimage.jpg">My Image</a>

In order to set up this link for use with Shadowbox, simply change it to this:

<a href="myimage.jpg" rel="shadowbox">My Image</a>

If you would like to display a title for your image, simply add a title attribute to the link.

<a href="myimage.jpg" rel="shadowbox" title="My Image">My Image</a>

You must explicitly tell Shadowbox the dimensions to use to display content other than images. This is done by adding a few parameters to the end of the rel attribute, separated by semi-colons (like a CSS style declaration). To specify a movie’s height and width, use the height and width parameters. Note: unlike in CSS, these values must always be specified in pixels.

<a href="mymovie.swf" rel="shadowbox;height=140;width=120">My Movie</a>

Additionally, you may set Shadowbox options on a per-link basis. To do this, you must include a JSON-formatted parameter called options. An example could be:

<a href="myimage.jpg" rel="shadowbox;options={overlayOpacity: 0.5, resize: false}">My Image</a>

In addition to displaying single images and movies, Shadowbox is also capable of displaying galleries of content. In order to designate a link as part of a gallery, you must add the gallery name to the rel attribute between square brackets immediately following the word “shadowbox”. For example, the following markup creates a gallery called “Vacation” with two pictures:

<a href="beach.jpg" rel="shadowbox[Vacation]">The Beach</a>
<a href="pier.jpg" rel="shadowbox[Vacation]">The Pier</a>

Galleries may be composed of content of many different types. The following markup is a compressed version of the last demo above. It demonstrates how various media can be combined into a single gallery.

<a rel="shadowbox[Mixed];options={counterType:'skip',continuous:true}" href="vanquish.jpg">jpg</a>
<a rel="shadowbox[Mixed];width=520;height=390" href="caveman.swf">swf</a>
<a rel="shadowbox[Mixed];width=292;height=218" href="kayak.mp4">movie</a>
<a rel="shadowbox[Mixed]" href="index.html">iframe</a>

Per ora il plugin funziona con mootools, ma è facilmente adattabile ad altre librerie javascript, visto che shqdowbox include i vari adapter per queste librerie.

Scarica il plugin versione 0.1
Ovviamente spero che se ci sono reeori qualcuno me lo segnali.

Gabba Gabba Hey
Bonzo

CakePHP, installazione

28 Gennaio 2008

Visto che conosco e lavoro soprattutto con PHP ma mi affascina molto Ruby on Rails ho deciso di provare CakePHP, framework web PHP da molti paragonato al celebre framework scritto in Ruby.

cakePHP

Installazione di cakePHP:

Manuale cakePHP

Requisiti:

  • An HTTP server (like Apache) with the following enabled: sessions, mod_rewrite (not absolutely necessary but preferred)
  • PHP 4.3.2 or greater. Yes, CakePHP works great in either PHP 4 or 5.
  • A database engine (right now, there is support for MySQL 4+, PostgreSQL and a wrapper for ADODB).

Userò Apache, PHP 5 e MySQL.

Scaricare la versione stabile e scompattarla

cake_1.1.19.6305.tar.gz

Esistono due tipi di configurazione per lo sviluppo e per la produzione.

Produzione
In ambiente di produzione è meglio installare CakePHP in una directory indipendente configurando poi il Web server in modo che la cartella di root corrisponda a /path/di/cakephp/app/webroot.

Sviluppo
In ambiente di sviluppo è sufficiente scompattare i sorgenti nella directory di root, all’interno della directory cake.

Io utilizzerò la configurazione per lo sviluppo.

Schema applicazione
/app
   /config
   /controllers
      /components
   /models
   /plugins
   /tmp
   /vendors
   /views
      /elements
      /errors
      /helpers
      /layouts
      /pages
   /webroot
      /css
      /files
      /img
      /js
   /index.php
/cake
/docs
/vendors
/index.php

Configurazione Apache
attivo il modulo mod_rewrite ed ed utilizzo il file .htaccess fornito all’interno dell’installazione standard per poter utilizzare URL puliti e chiari da leggere che non facciano uso di query string.
riscrivere gli url con il modulo modrewrite di apache

Configurazione database
E’ necessario configurare l’accesso al database. Per fare questo bisogna modificare il file app/config/database.php.default e rinominarlo in database.php, modificando i valori dell’array $default.

var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'user',
'password' => 'password',
'database' => 'project_name',
'prefix' => '');

Creo il database cake

Se vado a http://localhost/cake vedo:

CakePHP Rapid Development

Your database configuration file is present.

Cake is able to connect to the database.

CakePHP release information is on CakeForge
Read the release notes and get the latest version
Editing this Page

To change the content of this page, create: /app/views/pages/home.thtml.
To change its layout, create: /app/views/layouts/default.thtml.
See the views section of the manual for more info
You can also add some CSS styles for your pages at: app/webroot/css/.

Ora sono pronto per scrivere la mia prima applicazione con CakePHP.

Gabba gabba hey
Bonzo

Joomla 1.5, finalmente

23 Gennaio 2008

Dopo una lunga attesa è finalmente uscito Joomla 1.5 versione stabile.

http://www.joomla.org/

joomla 1.5

Ora non resta che fare i complimenti a chi ha lavorato al progetto dando a tutti la possibilità di usarlo anche in produzione e di decidere se e quando far passare i siti fatti in joomla a questa versione.

Purtroppo non sono riuscito ad andare al joomla day, in cui c’era un talk sulla migrazione, spero che i video dell’evento prima o poi siano disponibili on-line.

Gabba Gabba hey
Bonzo

Chiuso Italia.it

19 Gennaio 2008

Davvero incredibile, dopo un investimento iniziale incredibile e dopo neanche un anno on-line italia.it viene chiuso.

Articolo su La Stampa.

Certamente le [giuste] polemiche dopo il lancio del portale avranno contribuito, ma credo che dopo un tale utilizzo di risorse non si possa pensare di gettare la spugna.
Ecco l’articolo dal Blog di Roberto Scano sull’argomento.
Per ora è difficile fare dei veri commenti, restiamo tutti in attesa di avere tutte le motivazioni che hanno portato a questa scelta.

Gabba Gabba Hey
Bonzo