Problema con Views

7 contenuti / 0 new
Ultimo contenuto
Problema con Views

Si può modificare l'sql in una query di una vista creata con il modulo views ??

Benvenuto Marco.
Si e no.
Si nel senso che puoi intercettare l'esecuzione dello query, come in questo esempio: http://drupal.org/node/409808
No nel senso che dopo questo tipo di intervento, non verrano visualizzati le modifiche fatto alla vista - affinchè non modifici o tolgi il codice ovvio.
Devi avere un motivo molto, molto ma molto valido per necessitare un intervento del genere...

Più imparo, più dubito.

Innanzitutto ti ringrazio per la risposta, vedo che sei una delle poche persone e forse la più costante che risponde spesso alle domande fatte in questi forum.
Nell'esempio che mi hai suggerito, se ho capito bene, bisogna andare a modificare il file in views/docs/docs.php, sai l'inglese lo capisco ma sicuramente meno di te :)
Io ho lavorato in precedenza in Php ma sempre su cms proprietari, però ultimamente mi sono incuriosito e avvicinato a Drupal.

E' possibile che in Drupal non ci siano altri modi o moduli per creare più immediatamente una vista con la possibilità eventuale di modificare l'sql ??!!

Ho infatti creato la mia vista come nodo scegliendo tre campi e ottenuto la seguente query:

SELECT node.nid AS nid,
node_data_field_attivita.field_attivita_value AS node_data_field_attivita_field_attivita_value,
node.type AS node_type,
node.vid AS node_vid,
node_data_field_attivita.field_cognome_value AS node_data_field_attivita_field_cognome_value,
node_data_field_attivita.field_nome_value AS node_data_field_attivita_field_nome_value,
node_data_field_cognome.field_cognome_value AS node_data_field_cognome_field_cognome_value
FROM node node
LEFT JOIN content_type_prenotazione node_data_field_attivita ON node.vid = node_data_field_attivita.vid
LEFT JOIN content_type_prenotazione node_data_field_cognome ON node.vid = node_data_field_cognome.vid
ORDER BY node_data_field_cognome_field_cognome_value ASC

I campi fanno riferimento alla tabella "content_type_prenotazione", quindi non capisco perchè la vista faccia riferimento anche a "node_data_field_attivita" entità che non vedo tra l'altro nel mio db PostgreSql.
E come ti dicevo non posso modificare la suddetta query.

Gli altri hanno un lavoro da fare ;-)

marco.latina wrote:
Innanzitutto ti ringrazio per la risposta, vedo che sei una delle poche persone e forse la più costante che risponde spesso alle domande fatte in questi forum.

marco.latina wrote:
Io ho lavorato in precedenza in Php ma sempre su cms proprietari, però ultimamente mi sono incuriosito e avvicinato a Drupal.
E' possibile che in Drupal non ci siano altri modi o moduli per creare più immediatamente una vista con la possibilità eventuale di modificare l'sql ??!!

No. Poi una volta che prendi la mano con Views, è facile - anche se ha per forza un UI mostruoso... Comunque lui scrive SQL meglio di me ;-)
Come programmatore, c'è sempre la voglia di tirare fuori un pò di codice. Invece (se segui le regole) Big D è fatto in modo che questo dovrebb'essere l'ultima arma da usare...

marco.latina wrote:
Ho infatti creato la mia vista come nodo scegliendo tre campi e ottenuto la seguente query:

SELECT node.nid AS nid,
       node_data_field_attivita.field_attivita_value AS node_data_field_attivita_field_attivita_value,
       node.type AS node_type,
       node.vid AS node_vid,
       node_data_field_attivita.field_cognome_value AS node_data_field_attivita_field_cognome_value,
       node_data_field_attivita.field_nome_value AS node_data_field_attivita_field_nome_value,
       node_data_field_cognome.field_cognome_value AS node_data_field_cognome_field_cognome_value
FROM node node
LEFT JOIN content_type_prenotazione node_data_field_attivita ON node.vid = node_data_field_attivita.vid
LEFT JOIN content_type_prenotazione node_data_field_cognome ON node.vid = node_data_field_cognome.vid
ORDER BY node_data_field_cognome_field_cognome_value ASC


Non è un query cosi disastroso, anzi... Ma stai usando anche CCK ed hai creato un pò di campi 'attivita', 'cognome', 'nome' ecc. Questi vengono salvati in altre tabelle da CCK (di solito content_node_xxx, content_field_xxx, content_type_xxx)
marco.latina wrote:
I campi fanno riferimento alla tabella "content_type_prenotazione", quindi non capisco perchè la vista faccia riferimento anche a "node_data_field_attivita" entità che non vedo tra l'altro nel mio db PostgreSql.
E come ti dicevo non posso modificare la suddetta query.

Ma forse adesso si. Sta visualizzando node + campi CCK, quindi un join per forza.

Comunque mi sembra un pò sporco. Non capisco perchè cosi tanti campi 'cognome'. Hai esaggerato con i campi da visualizzare forse? Vedo che hai un cognome per prenotazione ma anche per attività... Ma io di cognome ho solo uno ;-P

Più imparo, più dubito.

Ma infatti ho creato prima un contenuto (scheda prenotazione) con dei campi personalizzati come cognome, nome ecc.. tra cui anche il campo attività (come select list).
Una volta inserite alcune schede tramite il contenuto (scheda prenotazione) è stata creata una tabella sul db "content_type_prenotazione" con i dati delle registrazioni di vari utenti.
Ora vorrei creare una vista che visualizza questi dati ma quando la creo ( considerando l'oggetto nodo), vado a selezionare i seguenti campi:

Contenuto: Attività (field_attivita)
Testo - Appears in: Scheda prenotazione
Contenuto: Cognome (field_cognome)
Testo - Appears in: Scheda prenotazione
Contenuto: Nome (field_nome)
Testo - Appears in: Scheda prenotazione

che presumo siano quelli giusti dato che non mi fa selezionare la tabella "content_type_prenotazione" con i campi

field_attivita_value
field_cognome_value
field_nome_value

il risultato però è la query che ti ho scritto prima:

SELECT node.nid AS nid,
node_data_field_attivita.field_attivita_value AS node_data_field_attivita_field_attivita_value,
node.type AS node_type,
node.vid AS node_vid,
node_data_field_attivita.field_cognome_value AS node_data_field_attivita_field_cognome_value,
node_data_field_attivita.field_nome_value AS node_data_field_attivita_field_nome_value,
node_data_field_cognome.field_cognome_value AS node_data_field_cognome_field_cognome_value
FROM node node
LEFT JOIN content_type_prenotazione node_data_field_attivita ON node.vid = node_data_field_attivita.vid
LEFT JOIN content_type_prenotazione node_data_field_cognome ON node.vid = node_data_field_cognome.vid
ORDER BY node_data_field_cognome_field_cognome_value ASC

come dici te più imparo più dubito :)

Scheda? Stai usando Drupal 7? O e semplicemente ingliano.
Comunque, come dicevo prima è giusto (più o meno) la query. I dati della 'schema' lo trovi nella tabella content_type_prenotazione tre campi; field_cognome, field_nome, e field_attivita

HTH

John

Più imparo, più dubito.

Ciao Jhon,
grazie ancora per la disponibilità, comunque sto utilizzando la versione 6.15.

Per rispondere alla tua constatazione di prima, non ho due campi cognome, ma avendo aggiunto l'orinamento per cognome mi è stata creata in automatico la seguente relazione con la creazione di un altro campo cognome "node_data_field_cognome.field_cognome_value" preso sempre dalla stessa tabella "content_type_prenotazione"
.....
node_data_field_cognome.field_cognome_value AS node_data_field_cognome_field_cognome_value
FROM node node
LEFT JOIN content_type_prenotazione node_data_field_cognome ON node.vid = node_data_field_cognome.vid
ORDER BY node_data_field_cognome_field_cognome_value ASC

Per il problema di cui ti avevo invece ho visto che la vista mi restituisce diversi record vuoti e, controllando meglio, ho verificato che dovrei cambiare la relazione che mi ha creato in automatico da:

FROM node node
LEFT JOIN content_type_prenotazione node_data_field_attivita ON node.vid = node_data_field_attivita.vid

a:

FROM node,content_type_prenotazione node_data_field_cognome
where node.vid = node_data_field_cognome.vid

Quindi la domanda è
"Come si cambia il tipo di relazione tra tabelle nelle viste in Drupal ?"

Grazie