Aggiornare un campo programmaticamente

6 contenuti / 0 new
Ultimo contenuto
Aggiornare un campo programmaticamente

Salve ho creato un C.T. e tra i vari campi c'è un campo boolean (Attivo).

Ho la necessità di settare questo campo per tutti i movimenti presenti a false.
Pensavo di farlo scrivendo una qry sql.
Siccome non l'ho mai fatto e non so la sintassi, vi chiedo come impostare il tutto.
le linee di codice da scrivere dovrebbero essere:
apertura tabella
update = false

Non so se sia giusto mettere il collegamento in un link di un menù.

Spero di essere sttao chiaro
grazie

Drupal Version:

Mmmmm... dire preciso è troppo.... ad ogni modo esistono molte maniere per farlo.
Intanto bisogna capire se lo devi fare una sola volta oppure è una cosa che deve essere ripetuta nel tempo.
Se lo devi fare una volta sola, la più semplice è quella di accedere al pannello MySQL tramite phpmyadmin (se usi quello) e fare direttamente l'update da li. Altrimenti puoi creare un blocco (che vedi solamente tu tramite il filtro per ruoli o come meglio credi) con il codice php dentro che una volta posizionato in una regione del tema e visualizzata la pagina dove dovrebbe essere visto, lancia la query direttamente al database.
Se invece devi utilizzare questa funzione ripetutamente ti conviene crearti un piccolo modulo che una volta installato e attivato, chiamando una url da te decisa risponde con la callback alla funzione che lancia la query.

In linea di massima la query per drupal dovrebbe essere circa cosi (non posso essere preciso perchè non ho i nomi dei campi, del content type e altre info di rilievo)

<?php
$subquery
= db_select('node');
$subquery->addField('node', 'nid');
$subquery->condition('node.type', 'YOUR_NODE_TYPE', '=');
$num_updated = db_update('data_field_data_nome_del_tuo_campo')
->
fields(array('field_nome_del_tuo_campo_value' => '1',))  // 1 è TRUE 0 è FALSE
->condition ('data_field_data_nome_del_tuo_campo.entity_id', $subquery, 'IN')
->
execute();
?>

Questo è solamente un esempio della query

Si vanno bene entrambe, sia il codice che mo hai postato e sia la creazione del modulo.
Ho creato il blocco ed inserito il codice che mi hai postato. Ho scelto come formato del testo PHP -code.
Ho modificato il codice come da tua precisazione in:

<?php
$subquery
= db_select('node');
$subquery->addField('node', 'nid');
$subquery->condition('node.type', 'albo_fornitori', '=');
$num_updated = db_update('field_data_field_attivo')
->
fields(array('field_data_field_attivo_value' => '1',))  // 1 è TRUE 0 è FALSE
->condition ('field_data_field_attivo.entity_id', $subquery, 'IN')
->
execute();
?>

Siccome mi ritorna l'errore, ho anche modificato il campo.
Tu mi hai indicato:
'data_field_data_nome_del_tuo_campo'

visto l'errore, sono andato a vedere (tramite phpMyAdmin) il campo ed ho visto che lo indica come:
'field_data_field_attivo'

Purtroppo il risultato non cambia.
Mi potresti dire la sintassi del codice che mi hai indicato dove la posso trovare?

grazie

Gaetano

Allora, ho letto un po' di materiale e se non ti dispiace cerco di chiarirmi le idee
db_select ha come parametro la tabella, l'eventuale alias ed altro.
addField, serve per definire i campi che si ha intenzione di utilizzare. Dove indicare l'eventuale alias o si ripete il nome della tabella e poi il campo che si vuole usare.

Per capirne il funzionamento ho scritto (prendendo spunto dal tuo esempio) queste righe:

<?php
 $query 
db_select ( 'node'  ) ;
 
$query - > addField('node', 'nid')
 
$query - > execute ( ) ;
?>

Però mi ritorna questo errore:
Parse error: syntax error, unexpected '>' in /var/www/vhosts/liceoguaccibn.it/httpdocs/modules/php/php.module(80) : eval()'d code on line 3

ma non ho proprio idea di cosa possa significare

Gaetano

L'errore è dovuto a come hai scritto il codice. la "freccetta" che istanzia il metodo di classe è:
->
e non così:
- >

ti ringrazio provo e ti faccio sapere

Gaetano