Esempi più concreti?

Buongiorno a tutti, è da qualche giorno ormai che sbatto la testa contro yii. Devo ammettere che più di una volta sono stato sul punto di dire “chi me lo fa fare, torno al mio stile” ma visto che sono testardo e non voglio riconoscere la sconfitta eccomi qui a chiedervi aiuto. Ormai è da qualche anno che lavoro con PHP ed ho un’ottima conoscenza di Java, quindi gli oop non mi spaventano. La mia difficoltà principale sta nel capire come sviluppare alcune cose che fino ad’ora avevo fatto alla vecchia maniera. In sostanza dovrei fare alcuni siti molti simili tra loro (i clienti sono tutti pub e locali), quindi i gestionali (il backend,la parte amministrativa,il cms…come preferite chiamarlo voi) sarebbero tutti molto simili. Gli oggetti che devo gestire, come potrete immaginare, sono :gestione di eventi,menù,gallerie fotografiche,news…niente di esagerato.

I miei dubbi sono davvero ridicoli:

-prima di tutto non ho ancora capito esattamente come sviluppare sia la parte di front-end che di back-end…(ho letto di admin come modulo maaa…)

-in secondo luogo, nella parte di front-end, ad esempio per la gallery avrei bisogno di personalizzare parecchio la grafica magari inserendo uno script carino per la visualizzazione delle foto…è possibile? come funziona? si interviene solo sulle views?

Ne avrei altre di domande…ma preferisco tirarle fuori dopo. Se avete anche solo risorse da consigliarmi, esempi…mandate pure. Per ora ho letto il leggibile e fatto tutti i tutorial che ho trovato…

dunque, la separazione di front end e back-end la puoi gestire semplicemente impostando le accessRules nel controller in maniera corretta… certe zone visibili da tutti e altre solo da utenti connessi (che sarebbero gli amministratori del sito)

per quel che riguarda le gallerie ovviamente puoi applicare gli effetti che vuoi, usando un qualsivoglia javascript o widget già integrato in yii. Ovviamente usa queste cose nella view… non fanno parte della logica o della gestione del db dopotutto

Nella mia esperienza non esistono siti simili, anche per quelli simili simili bisogna cambiare tanto.

Io mi arrangio in questo modo:

faccio un modulo per gli amministratori (puoi generarlo con gii)

Per le interfacce di amministrazione mi sono fatto un crud personalizzato che riciclo in tutti i siti. Con questo crud la parte di amministrazione si scrive veramente da sola.

Le interfacce pubbliche sono tutte diverse come grafica, ma come meccanica sono si solito semplicissime, assimilabili alle view o alle index delle pagine generate da gii. Quelle vanno scritte a mano.

Il mio consiglio e’ di mettersi di buzzo buono a fare un sito, cercando di usare il piu’ yii possibile. Il vantaggio che otterrai non sara’ nel riciclare siti interi (perche’ tanto non ci si riesce mai) ma nel riciclare metodi (crud + gestione utenti)

Bhè, fidati…in questo caso sarebbero davvero simili. A livello di elaborazione dei dati penso che le differenze sarebbero davvero minime. Al massimo saranno le viste ad essere adattate di volta in volta…

Una volta creato il modulo di amministrazione con gii…cos’ho in mano? La mia è proprio una carenza a livello pratico. La teoria che sta dietro ai framework mvc è limpida…ma essendo la prima volta che ne faccio uso non riesco a tradurre in pratica le cose che ho capito.

Detta in parole poverissime, tu a gii gli dici come si chiama una tabella, e lui ti crea il model. Da questo momento NON DOVRAI PIU SCRIVERE UNA RIGA DI SQL (salvo casi eccezionali). Poi a Gii gli dici il nome del Model che hai appena creato e lui ti genera schietto schietto un datagrid completo. Tanto per cambiare il datagrid ha incorporata la ricerca ajax su tutte le colonne. Puoi cambiare le colonne in un secondo a manazza mkodificando la view in questione. Dai insomma, io lo adoro. Sono sempre stato un purista per anni. Da novembre '10 non ho fatto nulla se non con yii.

spero che la mia opinione non sia una c**ata. io un sito così lo risolverei con wordpress: divisione backend/frontend già pronta, una miriade di plugins per gallerie fotografiche, una miriade di plugins di ogni sorta, una miriade di temi carini, un sistema maturo, sicuro, stabile, efficiente e perfettamente all’altezza di un sito con questo livello di complessità.

Non dici una ca**ata. Il sistema che mi appresto a fare è davvero semplice e non richiede chissà cosa. Ma piuttosto che farlo con wordpress(che non aggiungerebbe nulla alle mie conoscenze) preferirei ritornare alla cara vecchia scuola(il sito esiste già ed il cms l’ho sviluppato io). Stavolta voglio cimentarmi in qualcosa di nuovo come un framework mvc…

Se vuoi cimentarti, buttati! Imparare facendo e’ la cosa migliore

La cosa migliore e’ partire dalle view generate da Gii e modificarle finche’ assomigliano al tuo sito.

Dai una scorsa a questa pagina del manuale.

Per il tipo di sito che ti stai proponendo, non dovresti inventare niente che non esiste nel framework, per cui, per darti dei paletti, se devi aggiungere roba grafica (roba che sta nelle view), scrivi codice (soprattutto html), se ti mancano delle cose a livello di model o controller, non scrivere niente e cerca invece nella doc o chiedi sul forum, qualsiasi cosa ti stai inventando e’ gia’ disponibile nel framework.

Usa solo controller e action, se ti sembra dei modules, ma NON FARE MAI switch nelle action basate si parametri della get, fai diverse action!

Questo e’ quanto. Buon divertimento, porta tanta pazienza e leggi tanto, vedrai che sarai soddisfatto e, quando sara bravino con Yii, ricorda che Yii si puo’ integrare in Wordpresso come modulo!

Rieccomi…sto cercando di tirar fuori qualcosa.

Avei due domande:

1- sto generando tutto il codice con gii, tutto il CRUD che riguarda le mie tabelle. Come dicevo nel primo post, io ho bisogno di un’applicazione divisa in front end e back end. Una volta finito lo scaffolding, se ho capito bene, dovrò creare un modulo admin sempre attraverso gii…ma cosa succederà una volta creato? cosa avrò davanti? una pagina che raccoglie tutte le pagine di gestione precedentemente create o dovrò ancora usare il crud generator?

mi rendo conto di aver appena formulato una domanda abbastanza contorta…

2- ho una tabella in cui salvo i record delle immagini appartenenti agli album fotografici del sito: che estensione mi consigliate per gestire il caricamento multiplo di immagini? ho una colonna “order” che dovrebbe permettere all’utente di gestire l’ordine di visualizzazione delle foto. Come faccio a fare in modo che l’applicazione dia a quel campo un valore automatico a mò di auto_increment ma senza auto_increment perchè non voglio che sia un valore globale della tabella ma che dipenda per ogni album. mi spiego meglio: potrebbero esistere due record con lo stesso valore della colonna “order” ma solamente nel caso in cui appartengano ad album diversi.

Per la prima domanda, quando farai il modulo amministrativo rifarai tutto con il crud.

Ti conviene personalizzarti un po’ il codice che genera gii per fare piu’ in fretta. Io, per esempio, uso solo 4 action: create update delete e index.

Per la seconda domanda, io uso uploadify per fare l’upload delle immagini tipo ajax (e anche upload multipli), ma non uso nessuna estensione, mi sono scritto un wrapper apposta.

Per gestire l’ordinamento puoi fare un po’ come ti pare, non ci sono limiti. Puoi fare alla beforeSave, per esempio, se e’ un nuovo record gli metti il valore piu’ alto che trovi per quell’album + 1.

mmm…ma allora che senso avrebbe il lavoro che sto facendo ora? A me il fronend serve solo per visualizzare, non me ne faccio niente della parte di gestione, che è invece quella che mi interessa nel backend. Sto ufficialmente per gettare la spugna a sto punto. Sembra che l’utilizzo di un framework dovrebbe velocizzare le cose e invece a me le sta solo complicando. Voglio un sito con cms…è così complicato realizzarne uno con yii?

Bene, i comuni mortali, quelli che di yii ancora ne masticano ben poco…cosa devono fare?

In sostanza. Qualcuno mi può aiutare a mettere giù un workflow concreto di quello che devo fare?

Io ho installato la mi abella applicazione e anche personalizzato il layout. Ora sto procedendo a generare il crud con gii…e quindi sto modificando i vari form di inserimento dei dati e cose del genere. Il punto è che tutto questo lavoro di inserimento dati voglio che venga fatto nell’amministrazione…

bhò…mi potete aiutare? A volte le risposte su questo forum sono un po’ enigmatiche e vengono date lasciando troppe cose come scontate.

Allora, creati un module (con Gii) che si chiama Admin.

In questo module ci infili tutti i controller che hai generato per la parte amministrativa, e i futuri controller li generi come admin/mioController.

Questo ti serve per fare il modulo di amministrazione.

Per il frontend, ti conviene fare tutto a manina. Di solito non ci sono form, creazioni, modifiche nel fronted, e’ solo presentazione.

Per cui di solito avrai un frontend composto da tanti controller, al limite tanti quanti nel backend, con 2 action: index (con una lista) e view (con i dettagli).

E’ normale avere 2 controller, uno in frontend, pubblico e uno nel backend. Il lavoro del frontend e’ 90% grafica, quindi un controller semplice con una view con tanto html e css, e di solito poco ripetitiva

La parte di amministrazione e’ composta da tanti controller e view praticamente indentici tra di loro.

Ricapitolando il workflow:

Crea il modulo di amministrazione con gii

Crea i crud per l’amministrazione con gii

Crea il frontend a mano

Per quanto rigurarda uploadify, lascia perdere per adesso.

Comincia a farti il modulo di amministrazione, cosi’ ti familiarizzi con l’ambiente. Quando avrai masticato abbastanza Yii, non sara’ difficile sgranocchiarsi anche un plugin js.

Per rispondere alla tua domanda, bisogna andare sul sito di uploadify, o quello del tuo plugin preferito, scaricarsi la librerie e includerla.

Per capire come includere il plugin mi sa che scrivero’ presto una wiki, poi ti posto il link.

cosa intendi per "e i futuri controller li generi come admin/mioController."

Comunque grazie…purtroppo non riesco a dedicare tutti i giorni a tii perchè contemporaneamente ho il lavoro a cui badare, però grazie dell’aiuto.

Quando generi un controller, Gii ti suggerisce il nome del controller.

Se nella casella ti testo per il controllerId tu ci scrivi admin/controllerId, Gii generera’ tutto correttamente nel modulo di amministrazione

ah perfetto…non lo avevo notato, ora si. Bene, ci sto lavorando, sembra funzionare per ora. I modelli invece? li lascio nella cartella protected/models oppure devo spostarli in protected/modules/admin/model?

Come non detto, per chi fosse interessato: http://www.yiiframework.com/wiki/106/using-cbuttoncolumn-to-customize-buttons-in-cgridview

I model lasciali nella cartella di default.

Se devi fare tante modifiche, puoi creare un model che estende quello di default, ma e’ un caso piuttosto raro.

Dunque…sono arrivato al punto di dover ordinare i record (spostandoli su e giù) di una mia tabella. Ho messo le frecce up and down ma spulciando sul forum ho trovato un sacco di gente che ha provato a farlo ma anche un sacco di soluzioni sbagliate. Qualcuno di voi ha mai dovuto fare qualcosa del genere?