[Risolto] Permettere Visualizzazione In Base A Un Parametro

Salve, spero di riuscire a spiegare ciò che vorrei fare. Praticamente avrei bisogno di permettere la visualizzazione di alcuni contenuti in base al codice utente. Mi spiego meglio. Supponiamo che ho 5 utenti ognuno "collegato" a un codice postale (per fare un esempio capibile). Quindi:

08028 Pietro

01019 Andrea

02100 Flavio

88834 Lorenzo

09010 Giulio.

Ora tutti usano lo stesso form ma ovviamente nel form c’ è un campo (in questo caso) cap.

Ora vorrei che se tutti scrivono un messaggio indirizzato al cap 08028, questo possa essere visualizzato solo da Pietro e da chi lo ha inviato.

Come posso fare? Anticipo che sono alle prime armi con yii.

Grazie in anticipo dell’ aiuto.

Ciao Giannix,

in questo caso c’entra poco Yii, nel senso che è più un problema concettuale che legato al framework.

La tabella utenti dovrebbe essere così:

utenti:

  • id;

  • cap;

  • nome;

Immagino poi che ci sia una tabella messaggi con

messaggi:

  • id_mittente ( o nome mittente, se univoco);

  • id_destinatario ( o nome destinatario, se univoco);

  • testo;

A questo punto, almeno con queste condizioni, è abbastanza banale far visualizzare solo i messaggi destinatari ad un utente, con

SELECT * FROM messaggi WHERE id_destinatario = ID_UTENTE

e

SELECT * FROM messaggi WHERE id_mittente = ID_UTENTE

si, anche se potresti tirare fuori l’artigleria pesante, quello che ti ha consigliato fabrizio è corretto.

dicci cosa ne pensi, se non è ‘abbastanza’ ci inventiamo qualcos’altro

E … benvenuto sul forum

Ciao ragazzi e innanzitutto grazie della tempestiva risposta.

Le tabelle sono strutturate come dici tu Fabrizio.

Ora io pensavo che ci fosse una funzione grazie alla quale yii mi avrebbe permesso di fare questo, tramite un "roles" grazie al modulo "rights".

Invece a quanto ho capito devo integrare io con il php puro, appunto con le strighe che hai inserito tu.

In questo caso quindi dovrei fare io una pagina a se con le tabelle che permettano di visualizzare i risultati multipli in base all id dell utente.

Ma devo fare una cosa distaccata da yii? Oppure integro tutto con un CRUD?

Altra domanda…se volessi mettere dei pulsanti con i quali quando l’ utente (destinatario clicca) ad esempio su “Letto” il messaggio sparisce dal “view”, oppure un’ altro pulsante (per esempio “Assente”)con il quale dopo il click nel view appare un messaggio tipo “Assente al primo passaggio” come devo fare?

Terza ed ultima domanda a “realtebo”: Quando dici “anche se potresti tirare fuori l’artigleria pesante” a cosa ti riferisci? Scusate tutte queste domande…ma essendo novizio di yii…ho bisogno non solo di leggere le guide (cosa che sto facendo) ma anche di qualche consiglio da parte di chi e molto più “ferrato” di me.

Ahh…dimenticavo se l’ utente possiede più cap come devo agire? Mi spiego meglio…Se Pietro come cap ha 08028, 00165, 00174 come devo agire sulla tabella e sullo script? Devo usare le relazioni tra una tabella cap e la tabella utenti…con relazione UNO A MOLTI? Oppure separo i Cap tramite virgola nel campo “cap” della tabella utenti?

Per fare quello che ti serve, è sufficinete inserire delle relations nel model degli utenti.

Segui questa guida:

http://www.yiiframework.com/doc/guide/1.1/it/database.arr

Grazie era quello che stavo cercando. Ora la studio e poi ti dico se riesco a fare il tutto. Grazie ancora Fabrizio. :)

un consiglio: parti sempre dal presupporto che quasi il 100% di quello che vorrai mai fare è fattibilissimo con Yii.

A questo punto, inizia a fare una cosa per volta.

Cerca di capire come lavora Yii (anche grazie alla guida definitiva)

Quindi se UNA cosa non va, scrivi qui e noi ci saremo sempre.

Fix, Test,

… e prossima iterazione

Grazie del consiglio realtebo…non mancherò nel seguirlo. Ho cancellato il resto del commento perchè l’ ho reputato inutile alla discussione :)

Rieccomi qua ragazzi. Non riesco a relazionare le tabelle e a fare ciò che voglio.

Ho 5 tabelle

Agenzie

Cap

Cap_Gestiti

Telegramma

Login

Agenzie contiene ->id->Nome Agenzia->Codice->altre info utili come numeri delle licenze etc

Cap contiene->Tutti i cap d’ Italia con campi->id->Cap->Comune->Provincia->Regione

Cap_gestiti contiene->id->Cap->Comune->Provincia->Regione

Telegramma

contiene->id->nome_mittente->via_mittente->civico_mittente->cap_mittente->citta_mittente->

provincia_mittente->stessi campi per destinatario->n_parole->prezzo

Login contiene->id->username->password

Ora se riesco a relazionare queste tabelle posso continuare con le altre…altrimento abbandono xchè inizio a darci di matto @@!!!

Devo far si che,ogni telegrama (che viene inviato tramite il form) appaia nella view dell’ agenzia che copre il cap del destinatario.

Ogni agenzia possa vedere ed esitare (consegnato - non consegnato) solo i telegrammi che vengono indirizzati

nei cap di competenza della stessa e quindi avrà in carico di consegnare.

Come detto prima nella _view dovrebbe vedere solo ciò che è indirizzato verso i cap che la stessa Agenzia copre.

Come posso relazionare le tabelle? Ho provato in mille modi…ma non ne vengo a capo.

Ho provato a relazionare Agenzie con Cap con HAS_ONE (un cap può essere gestito da una sola Agenzia), Agenzie con Cap_Gestiti con BELONGS_TO (ogni Agenzie può gestire più cap), Telegramma con Cap con HAS_ONE (ogni telgramma va a un solo cap che grazie alla relation tra Cap e Agenzie dovrebbe permettermi di indirizzare il telegramma all’ agenzia di destinazione e se non c’è vorrei apparisse la scritta Poste Italiane).

Di tutto ciò che vorrei…non sono riuscito a fare niente :( . Ora mi scuso se ho anche scritto stronzate in questo post…ma sono alle prime armi con yii come sapete…e non ne vengo fuori. Mi potete dare almeno un’ opinione su come fareste le relations tra queste tabelle? In php ho gia fatto questo modulo ma solo per la mia agenzia. Ossia, ho già il modulo funzionante sul mio sito con il quale un utente invia e paga il telegramma. Questo arriva nella mia area amministrativa da dove io lo rigiro o a Poste Italiane o all’ agenzia di competenza. Io vorrei che questo processo fosse automatizzato!!! Ma non riesco a farlo.

Penso che il tuo problema sia principalmente con i database relazionali.

Prima di tutto devi disegnare un database con le relazioni che ti occorrono, Yii creerà da sé (o quasi) la definizione delle relazioni.

Se stai utilizzando MySQL assicurati di conoscere bene come funzionano le chiavi straniere e una volta disegnato il database riprova con Yii.

Ciao Nicola, il database l’ ho disegnato con DB Designer, quindi anche le relazioni puoi inserirle con lo stesso programma che ti crea le chiavi relazionali, ma non riesco a relazionare con yii. Sono io che devo inserire i parametri nel relations di yii. Se vuoi incollo anche una copia del database xlms se qualcuno vuole darci uno sguardo. Oppure se qualcuno potrebbe dirmi come farebbe le relations, magari non inserisco campi utili nelle tabelle, questo mi aiuterebbe. Che l’ errore era lì (dove dici tu)lo avevo capito…ma non capisco come risolverlo.

Nessuno può darmi un suggerimento utile perfavore??? ho la testa che sta fumando da 15 gg

Andiamo con ordine e ti aiutiamo

  1. Creare il db e le tabelle, e mi sembra lo hai fatto

  2. Per ciascuna tabella creare il modello con gii, credo l’hai fatto; sennò fallo ora

  3. Per ciascun model, se gii non ha creato le relations inseriscile tu a manina.

Questo punto, il 3, credo sia quello dove possiamo lavorare insieme ora.

Salve, realtebo e grazie della risposta.

Si sono fermo al passaggio 3 … o meglio o eliminato i model perchè non sono riuscito a creare le giuste relazioni. Quindi devo prima capire quali relazioni inserire nelle tabelle per poi avere le chiavi esterne che le colleghino, poi ricreo model - controller - viste.

Quello che non capisco per fare cio che serve a me, sono i tipi di relazione da usare per ogni model.

Ti scrivo le relazioni che avrei in mente.

Model User (login nel mess precedente) è relazionata ad Agenzie con BELONGS_TO (1 Agenzia = + utenti (operatori postali)).

Model Agenzie è relazionata a CapGestiti con HAS_ONE (1 Agenzia = 1 cap gestito).

Model CapGestiti è relazionata a Cap (tutti i cap d’ italia) con HAS_ONE (1 Agenzia = 1 solo cap generale gestito)

Model Telegramma è relazionato a Agenzie con BELONGS_TO (1 agenzie può ricevere + telegrammi)

Model Telegramma è relazionato a Cap con BELONGS_TO (ogni nuovo telegramma può andare a un diverso cap)

Queste sono le relazioni che ho in mente. Ovviamente nella vista (index o view come preferisci) del model Telegramma vorrei che ogni agenzie vedesse solo i telegrammi indirizzati a lei e potesse esitare (consegnati - non consegnati) solo i propri telegrammi.

Ora devo finire delle cose al lavoro. Se vuoi riprendiamo la chiaccherata stasera dopo cena. Grazie ancora della risposta.

Dici che mi conviene aggiungere un campo "cap" nella tabella Agenzie?

Per evitare poi di dover relazionare la tabella Telegrammi con Cap e Agenzie e ritrovarmi quindi una relazione “circolare” che ovviamente mi causerebbe un’ errore con DB Designer. Che ne pensi ???Credi che le altre relazioni vadano bene??

Nessuno ha qualche novità??? che possa essermi utile? Chiamate il 118 xchè inizia lo sclero ;D

Scusami, ti ho trascurato

Allora

Dallo user collegato riesci a sapere a quale Agenzia appartiene

Dalla agenzia dello user, riesci a sapere i capi gestiti da quella agenzia.

Quando carichi l’elenco dei telegrammi, ti potrebbe bastare filtrare per capi in (elenco cap gestiti) ?

Ciao realtebo, per quanto riguarda l’ user e l’ agenzia, collego le tabelle con la relation BELONGS_TO e nella vista “user” (index) recupero il nome dell’ agenzia assegnato a quell’ user, perchè quando creo l’ user nel form User inserisco l’ id dell’ agenzia alla quale l’ user appartiene e poi nella vista lo recupero grazie alla relazione tra le tabelle.

Per i cap ho relazionato la tabella cap con agenzie e anche li, alla creazione del nuovo cap, dentro al form inserisco l’ id dell’ agenzia in maniera tale che associ quel cap all’ id_agenzia.

Io vorrei che la vista “telegrammi” (index) mostrasse solo i telegrammi che sono destinati a quell’ agenzia (o user) che in quel momento è loggata nell’ applicazione. Poi ogni agenzia (o operatore dell’ agenzia stessa …tramite i role che asegno) possa esitare consegnato o non consegnato ogni telegramma che ha in gestione.

Ovviamente se lo esita consegnato il telegramma deve sparire dalla vista (perchè è già stato esitato).

Vorrei anche che magari si potesse fare un “reso” all’ agenzia mittente in caso di indirizzo errato…magari creando una tabella resi dove in caso di esito negativo (indirizzo errato per es) vengano inseriti nella tabella resi i dati del destinatario e l’ id dell’ agenzia mittente in maniera tale da poter poi fare il reso cartaceo tramite corriere…ma capisco che chiedo troppo e quindi mi accontento di quanto scritto prima, sulla visualizzazione e la possibilita di esitare i telegrammi.

Praticamente è una piattaforma dove ogni agenzia può inviare dei telegrammi e gli stessi in base al cap di destino devono essere assegnati all’ agenzia che copre quel cap. Se quel cap non è coperto allora li assegna a Poste Italiane.

Se mi risolvi questo…se un giorno passo dalle tue parti ti offro una pizza ;D Scusa se rompo…ma non ne vengo a capo e so che sto intoppando in una caxxata madornale … ma non essendo esperto di yii…non ne vengo fuori. Non farmi invecchiare per l’ attesa ehhhh ;D ;D (scherzo …GRAZIE infinite per l’ interessamento, la pazienza e gli spunti che mi hai suggerito fin’ ora).

Aiutare è quasi sempre un piacere, ma mi devi aiutare a capire cosa vuoi di preciso. Non parlarmi dell’intera app, fermati alla singola cosa che non va, poi nuovo thread e via andare.

come ti ho detto sopra, dato che dall user ricavi la sua agenzia e dall’agenzia ricavi i cap assegnati, è facile ottenere che l’elenco telegrammi si popoli solo con quelli il cui cap è gestibile dall’agenzia dell’utente.

Per cui ora servono solo poche cose per andare avanti

  1. La tabella user ed il suo model, anche senza relation, ci pensiamo insieme

  2. La tabella agenzie. ed il suo model

  3. La tabella cap. ed il suo model

  4. una tabella di associazione n-n tra agenzie e cap. In questo caso NON serve il model

Appena hai queste cose, posta la definizione delle tabelle. così vediamo se tutto ok.

Rieccomi realtebo, metto in allegato uno screenshot della realizzazione delle tabelle tramite DBDesigner.

Ho creato anchei model che mi hai chiesto. Ma la tabella Telegramma non la relazioni con nessuno???

Quando vuoi sono tutto ((°__°)) orecchie (occhi ;D in questo caso)