CakePHP - 101 Creare un'applicazione con CakePHP. massimoi@impronta48.it http://impronta48.it



Documenti analoghi
COMUNICAZIONE UTENTI SISTEMI-PROFIS INSTALLAZIONE GE.RI.CO e PARAMETRI2015

Pagina 1 di 10

Creare un sito Multilingua con Joomla 1.6

Introduzione. Installare EMAS Logo Generator

Manuale Utente MyFastPage

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

MANUALE UTENTE INFOCAR REPAIR ACCESSO SMARTPHONE/TABLET

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Direzione Centrale per le Politiche dell Immigrazione e dell Asilo

MANUALE UTENTE. Computer Palmare WORKABOUT PRO

SERVIZIO DI MESSAGGISTICA ALL UTENTE. Manuale per l operatore

Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.

Registrazione nuovo utente. Per registrare un nuovo utente cliccare sul link Registrazione

STAMPARE FOTO CON LA COOP

MAUALE PIATTAFORMA MOODLE

GERARCHIE RICORSIVE - SQL SERVER 2008

Il calendario di Windows Vista

Database Manager Guida utente DMAN-IT-01/09/10

BLOCK CALL Manuale utente Block Call Manuale Utente

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

Manuale Istruzioni TELEPESCA. Sommario

SOMMARIO... 3 INTRODUZIONE...

Access. Microsoft Access. Aprire Access. Aprire Access. Aprire un database. Creare un nuovo database

Banca dati Professioniste in rete per le P.A. Guida all uso per le Professioniste

COSTRUZIONE SITO WEB da AlterVista (

Registratori di Cassa

VERIFICA CORSO: MASTER DI PRIMO LIVELLO IN TECNOLOGIE DI SICUREZZA WEB E NETWORKING CODICE CORSO: B

1.0 GUIDA PER L UTENTE

Let's start! File > New Project > Ruby > Ruby on Rails Application (events)

Bookenberg non è un softwere ma una piattaforma online, quindi:

Tutorial App Inventor #2 - messaggio automatico

Relazioni tra tabelle

CREAZIONE DI UN DATABASE E DI TABELLE IN ACCESS

Guida operativa. My Legal Corner. BestSoft SOFTWARE IN SANITÀ

Manuale del Docente - Scienze Politiche

Aggiornamento programma da INTERNET

Creazione Account PEC puntozeri su Outlook Express

Manuale di sviluppo Geecom Scritto da Andrea Pastore. versione /11/2014

Progetto ittorario Anno scol

GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL GUIDA RAPIDA PER LA COMPILAZIONE DELLA SCHEDA CCNL

Che cos'è un modulo? pulsanti di opzione caselle di controllo caselle di riepilogo

FISH Sardegna ONLUS. Manuale Utente.

Manualino d uso di Wordpress per le scuole

Guida alla registrazione on-line di un DataLogger

Olga Scotti. Basi di Informatica. Excel

INSTALLAZIONE JOOMLA

Product Shipping Cost Guida d'installazione ed Utilizzo

Il sistema C.R.M. / E.R.M.

Guida informatica per l associazione #IDEA

SEZIONI: 1. Aggiungere o modificare un corso 2. Inserire una news 3. Modificare una pagina 1. AGGIUNGERE O MODIFICARE UN CORSO

IMPOSTARE UNA MASCHERA CHE SI APRE AUTOMATICAMENTE

Corso basi di dati Installazione e gestione di PWS

Schede ADI ADP ADEM Prestazioni aggiuntive MMG. - Manuale - Data Solution Provider s.r.l.

filrbox Guida all uso dell interfaccia WEB Pag. 1 di 44

Configurazione della ricerca desktop di Nepomuk. Sebastian Trüg Anne-Marie Mahfouf Traduzione della documentazione in italiano: Federico Zenith

PORTALE CLIENTI Manuale utente

Guida all uso della piattaforma. portale Weblog & Podcast del MIUR COME UTILIZZARE AL MEGLIO L AMMINISTRAZIONE DEL BLOG

Come posso visualizzare la mia posta senza utilizzare programmi per la posta elettronica (es. Outlook Express, Outlook 2003, etc.)?

SharePoints è attualmente disponibile in Inglese, Italiano e Francese.

Guida all'uso del CMS (Content Management System, Sistema di Gestione dei Contenuti)

19. LA PROGRAMMAZIONE LATO SERVER

ALL FOR SCAN Versione Twain Manuale Utente. Versione 2.0A00. Luccarelli Srl


Mail Cube Guida utente

ISTR- XX Uso del Blog

Cosa succede quando si naviga

Apache 2, PHP5, MySQL 5

FPf per Windows 3.1. Guida all uso

GUIDA AL PORTALE PARTE 1

Esercizio data base "Biblioteca"

Integrazione InfiniteCRM - MailUp

Guida all'esportazione dei contratti di noleggio per l'agenzia delle Entrate con il programma MyRent

STAMPA UNIONE DI WORD

Guida Joomla. di: Alessandro Rossi, Flavio Copes

Database 1 biblioteca universitaria. Testo del quesito

ACO Archiviazione Elettronica e Conservazione sostitutiva

IL MIO PRIMO SITO: NEWS

Moduli (schede compilabili) in Word Esempio: scheda di alimentazione per un degente

Tale attività non è descritta in questa dispensa

IRSplit. Istruzioni d uso 07/10-01 PC

Cos è ACCESS? E un programma di gestione di database (DBMS) Access offre: un ambiente user frendly da usare (ambiente grafico)

MANUALE BREVE PER IL DOCENTE TUTOR

Guida all'installazione del CMS PrestaShop

GESGOLF SMS ONLINE. Manuale per l utente

schema riassuntivo del corso di access

Manuale MyGOLD. 1)Nuovo sito, per creare un nuovo ipertesto 2)Pannello di controllo, per modificare o cancellare un ipertesto già inserito.

Manuale utente Volta Control

1 Introduzione Installazione Configurazione di Outlook Impostazioni manuali del server... 10

Manuale di Blogilo. Mehrdad Momeny Traduzione e revisione del documento: Valter Mura

Le query. Lezione 6 a cura di Maria Novella Mosciatti

HTML. Usare il seguente HTML per i primi tre esercizi (che, si noti, al momento restituisce un errore JavaScript):

Note per scaricare e installare il software cliccando alla pagina DOWNLOAD del sito,

Che cos è BaseKit Site Builder.

Il software ideale per la gestione delle prenotazioni GUIDA UTENTE

. A primi passi con microsoft a.ccepss SommarIo: i S 1. aprire e chiudere microsoft access Start (o avvio) l i b tutti i pro- grammi

U-GOV Ricerca. Vecchia interfaccia (operazioni di amministrazione) Nuova interfaccia (altre operazioni) Sandro Amato Gloria Cresta

Università degli Studi di Ferrara - A.A. 2014/15 Dott. Valerio Muzzioli ORDINAMENTO DEI DATI

Corso di Archivistica

2015 PERIODO D IMPOSTA

Transcript:

CakePHP - 101 Creare un'applicazione con CakePHP massimoi@impronta48.it http://impronta48.it

Come Installare cakephp 1.3.x 1) Mi collego a https://github.com/cakephp/cakephp/archives/1.3 2) Salvo il file tar.gz 3) Scompatto il file tar.gz nel mio webserver [in aula si trova su www di a22docente - cake- 1.3.tar.gz] /var/www/massimoi/cake 4) Ricordarsi di mostrare i file nascosti! (per l'.htacces)

L'Applicazione Cake La nostra APPLICAZIONE si scrive nella cartella app (Ignoro CAKE, PLUGINS, VENDOR) Entro nella cartella APP Copio database.default.php in database.php Modifico i paramentri in database.php Imposto i permessi di scrittura 777 alla cartella app/tmp Verifico collegandomi a http://a22docente/massimoi/cake che le 3 righe centrali siano OK (verdi)

Creazione dei Model Creo i model corrispondenti alle tabelle autori >>> Autore libri >>> Libro ESEMPIO: libro.php <?php } class Libro extends AppModel { var $name='libro';

Impostazione dei plurali Imposto i plurali in Italiano, modifico il file app/config/bootstrap.php Inflector::rules('plural', array('rules' => array(), 'irregular' => array('libro'=>'libri', 'autore'=>'autori', ), 'uninflected' => array() ) );

Creazione dei Controller Creo i controller autori_controller.php e libri_controller.php ESEMPIO per LIBRI <?php class LibriController extends AppController { var $name='libri'; var $scaffold; } Mi collego a http://localhost/massimoi/cake/libri Notare lo SCAFFOLDING (fa automaticamente CRUD)

CREO LE RELAZIONI 1) Aggiungo nel MODEL libro $belongsto = 'Autore'; (singolare come la classe) 2) Aggiungo nel MODEL autore $hasmany = 'Libro'; (singolare come la classe) 3) Scoprio che tutto funziona automagicamente con le relazioni

CAMPI DI DEFAULT Aggiungo nel MODEL dell'autore $displayfield = 'nome'; così dappertutto l'autore viene identificato con il suo nome

Creare una home page e un layout 1) Creo un file app/views/pages/home.ctp e metto il contenuto della home page 2) Creo una pagina statica contatti.ctp 3) Modifico il file di layout. Parto dall'esempio standard che trovo in cake/libs/views/layout/default.ctp che copio nella mia cartella layout!!! NON MODIFICO QUELLO DI CAKE!!!

personalizzo il controller e le view 1) Creo nel controller autori_controller il metodo mostra($id) 2) Creo nella cartella /vies/autori/ il file mostra.ctp

Url amichevoli (pretty url) NON AMICHEVOLE http://www.trenitalia.it/orario.do? da=torino&a=milano&datada=31+5+2012... http://www.biblio.it/index.php?q=libri&action=edit&libroid=5 URL AMICHEVOLE http://www.biblio.it/libri/edit/5.htaccess fa l'operazione di rewriting, quindi ci dev'essere!

IL DATABASE Nel file di configurazione del db io devo scrivere il nome del server. 99% delle volte è localhost perchè è sulla stessa macchina del webserver!

CONVENZIONI invece che CONFIGURAZIONI Elenco di tutte le convenzioni di cake http://book.cakephp.org/1.3/it/view/901/conventions-in-cakephp http://cakephp.org/files/resources/cakephp-1.2-cheatsheet.pdf

Esercizio Biblioteca - Autori SPECIFICHE Riscrivere la funzionalità index per gli autori in modo da mostrare la foto dell'autore e il nome sotto la foto (tipo "amici di facebook") Quando faccio click sul nome o sulla foto vado alla pag mostra/id PASSAGGI 1) Nel controller creo una funzione index 2) Legge tutti gli autori dal database 3) Passa alla view (/views/autori/index.ctp) la lista degli autori (id, nome)

Controller Autori - mostra //corrisponde a http://.../autore/mostra/1 function mostra($id) { $a = $this->autore->findbyid($id); //Dopo la chiamata con $id = 1 // $a appare come segue // ['Autore']['id'] = 1 // ['Autore']['nome'] = manzoni $this->set('autore', $a); }

Controller Autori - index function index() { //Non mi serve portare dietro i libri $this->autore->recursive = 0; //leggo dal db la lista degli autori //$l = $this->autore->find('all'); //leggo dal db la lista degli autori ordinata per nome $l = $this->autore->find('all', array('order'=>'nome' ) ); } $this->set('autori', $l);

Controller Autori edit passo 1 function edit($id = null) { $this->autore->id=$id; //Se mi stai chiamando prima di aver premuto //submit if (empty($this->data)) { $this->data = $this->autore->read(); } else //hai già premuto submit { $this->autore->save($this->data) }

Controller Autori edit - passo2 function edit($id = null) { if (empty($id)) { //Scrivi un errore $this->session->setflash('manca id'); return; } Introduco gestione errori e casi particolari $this->autore->id=$id; //Se mi stai chiamando prima di aver premuto //submit if (empty($this->data)) { $this->data = $this->autore->read(); } else //hai già premuto submit { if ($this->autore->save($this->data)) { $this->session->setflash('salvato Autore'); $this->redirect('index'); } else { $this->session->setflash('salvataggio non riuscito'); } }

Controller Autori - delete function delete($id = null) { if (empty($id)) { $this->session->setflash('manca id'); $this->redirect('index'); } if ($this->autore->delete($id)) { $this->session->setflash('cancellato!'); $this->redirect('index'); } else { $this->session->setflash('non trovato e NON cancellato!'); } }

Autori / Views / Edit <?php echo $this->form->create('autore');?> <?php echo $this->form->input('id');?> <?php echo $this->form->input('nome');?> <?php echo $this->form->input('data_nascita');?> <?php echo $this->form->input('email');?> <?php echo $this->form->end('salva');?> Es: Validazione sull'email NEL MODEL autore.php var $validate = array ( 'email' => array('rule'=>'email', 'message' => 'email not valid', ), Cake usa le caselle più appropriate e fa la validazione!

Esercizio Biblioteca - Libri STORIE: 1) Vorrei vedere un elenco di libri con copertina La copertina è in img/libri/id.jpg Ogni libro > Edit / Delete / View 2) Scheda del libro che riporti: Titolo, Copertina, e Autore con Foto e Link alla scheda dell'autore (a partire dal nome e foto dell'autore)

Creo un link da un controller ad un altro Sono in libri/mostra.ctp e voglio creare un link a autori/mostra/1 $this->html->link('manzoni', 'mostra/1') mi fa vedere il libro 1 >>> libri/mostra/1 $this->html->link('manzoni','/autori/mostra/1') mi fa vedere l'autore 1 >>> autori/mostra/1 $this->html->link('manzoni', array('controller'=>'autori', 'action'=>'mostra', 1)); Il parametro

Gestiamo i prestiti Libri n-1 Autori n-1 Prestiti n-1 Utenti Scelta: scompongo la molti-a-molti in due 1- a-molti

Come creo il mio codice Scaffolding genera automaticamente index, edit, add, delete (CRUD) A mano Bake Scrittura del codice guidata

Usare Bake 1) Apro un terminale (sotto Win+R cmd) 2) Mi posiziono nella cartella dove c'è il mio cake (cd /var/www/massimoi/cake) Se sono su una cartella di rete (montata) cd.gvfs/a22\ docente\ Sotto linux mi assicuro di aver installato php5- cli Eseguo cake/console/cake bake

Pagination

Ritocchi Il menu contenga anche utenti e prestiti Scegliere alcuni campi da visualizzare nei prestiti Titolo libro, Utente, DataP, DataR (in quest'ordine) Visualizzare correttamente le tendine dentro il prestito (utente e libro) Data vuota

Ricerca Utente - view Aggiungere la possibilità di effettuare la ricerca di tra gli utenti per nome e cognome e filtrare la lista degli utenti Nella view utenti/index.ctp aggiungo il campo per la ricerca lo chiamo q <?php echo $this->form->create('utente', array('action'=>'index')); echo $this->form->input('q', array('label'=>'cerca per nome o cognome') ); echo $this->form->end('cerca');?>

Ricerca Utente 2 - controller //Inizializzo le variabili vuote $q=''; $conditions=array(); //Se i campi sono valorizzati //metto nella variabile $q //quello che l'utente ha scritto nel campo q if (!empty($this->data)) { $q = $this->data['utente']['q']; } if (!empty($q)) { $conditions = array('or' => array('cognome LIKE' => "%$q%", 'nome LIKE' => "%$q%") ); } $u = $this->paginate('utente',$conditions);

Profilo Utente Aggiungere data di nascita Email Telefono Visualizzare il datepicker jquery per la data di nascita

Esecuzione Profilo Utente Aggiungo i campi al db: email -varchar(255), tel varchar(50), data_nascita date tutti accettano null Nelle view aggiungo la gestione di questi campi Edit / Add Index

Gestione data di nascita (1) Uso i selettori standard di cake, in ordine italiano (GMA), e con l'anno partenza a 1900 echo $this->form->input('data_nascita', array( 'type'=>'date', 'dateformat'=>'dmy', 'minyear'=>1900 //Utile per le date di nascita ) );

Usiamo jquery per la data di nascita La libreria di base si chiama jquery La libreria con le interfacce utente interessanti si chiama jquery UI tutte le info su http://jqueryui.com/docs/getting_started Le scarico dalla sezione download del sito jqueryui.com e le copio in /app/webroot/js il contenuto della cartella js /app/webroot/css il contenuto della cartella css (ignoro la cartella development-bundle) Richiamo le librerie in views/layout/default.ctp echo $this->html->css('ui-lightness/jquery-ui-1.8.18.custom.css'); echo $this->html->script('jquery-1.7.1.min.js'); //Include jquery echo $this->html->script('jquery-ui-1.8.18.custom.min.js'); Aggiungo datepicker nella views/utenti/edit.ctp <script> $("#UtenteDataNascita").datepicker( ); </script>

Attributi del datepicker Data in formato 2011-04-29 $("#UtenteDataNascita").datepicker( { dateformat: 'yy-mm-dd' }); Primo giorno della settimana sia LUN $("#UtenteDataNascita").datepicker( { dateformat: 'yy-mm-dd', firstday: 1 });

Selezione di un elemento con jquery ES: Voglio cambiare lo sfondo a un campo di testo <input id= cognome class= campi /> $(SELETTORE).azione() $('#cognome').css('background-color:red'); ES: Voglio nascondere il campo quando uno ci clicca sopra $('#cognome').hide();

Esercizio Parte 4-4 Convertire data prelievo e data restituzione (prestito) in datepicker jquery ui Aggiungere al libro un link che mostri tutti i prestiti in cui è stato coinvolto (ordinati con il più recente in alto) mostrare sia in view che in index Nell'elenco dei libri aggiungere una casella di ricerca per titolo o autore Colorare lo sfondo della cella dei libri (nell'elenco libri) di rosso pallido se il libro è in prestito

Aggiungere al libro un link che mostri tutti i prestiti in cui è stato coinvolto (ordinati con il più recente in alto) mostrare sia in view che in index Model >>> Niente da cambiare Controller Agisco sul controller dei prestiti (! non su quello dei libri, perchè voglio vedere un elenco di prestiti, non di libri, e il libro è il parametro) Function stato($idlibro) {...} View app/views/prestiti/stato.ctp Presento una tabella di prestiti (utente, datap, datar) ordinata per datar e ORDINABILE

Link Utili Template e Layout Professionali http://960.gs/ http://www.templatemonster.com/cms-blog-templates.php (50$ circa) Programmazione Agile 1) SCRUM from the trenches (SCRUM dalle Trincee) Opensource - http://www.infoq.com/resource/news/2007/06/scrum-xpbook/en/resources/scrumandxpfromthetrenchesitalian.pdf;jsessioni d=df3d2fd7d5422e0c2ab257132dcd127a 2) EXTREMEPROGRAMMING.ORG - Extreeme Programming Installed