Una collezione di snippet da copiare e incollare

Argomenti: 

Una collezione di snippet da copiare e incollare

Eliminare tutti i termini di una tassonomia, conoscendendo il vid:
$ts = taxonomy_term_load_multiple(array(), array('vid' => [vid]));
foreach ($ts as $t) { taxonomy_term_delete($t->tid); }

Eliminare tutti i nodi di tipo Articolo:
$ns = node_load_multiple(array(),array('type' => 'article'));
foreach($ns as $n) { node_delete($n->nid); }

Resettare il numeratore degli ordini Drupal Commerce (dopo aver eliminato tuttgli gli ordini e i carrelli dall'interfaccia web) eseguire da sheel MySQL/MariaDB:
ALTER TABLE commerce_order AUTO_INCREMENT=1

Lista di tutti i widgets di campo utilizzati nel sistema (per dpm() occorre devel, altrimenti sostituire con print_r()):
$fii = field_info_instances();
$widgets = array();
foreach ($fii as $ename => $entity) {
foreach ($entity as $bname => $bundle) {
foreach ($bundle as $fname => $field) {
$widgets[$field['widget']['type']][] = $ename . ' ' . $bname . ' ' . $fname;
}
}
}
dpm($widgets);

Modificare la dimensione di un campo nel database, quando ci sono già contenuti e risulta bloccato (attenzione modificando la dimensione di una campo è probabile che si perdano dati: da usare solo se sappiamo esattamente cosa andiamo a fare). Modificare i valori tra parentesi quadra a seconda delle necessità:

$field_name = [field_nome_campo];
$field_new_len = [field_lunghezza_campo];
$result = db_query('SELECT data FROM {field_config} WHERE field_name = :name', array(':name' => $field_name))->fetchField();
$data = unserialize($result);
$data['settings']['max_length'] = $field_new_len;
db_update('field_config')
->fields(array('data' => serialize($data)))
->condition('field_name', $field_name)
->execute();
$new_field = array('type' => 'varchar', 'length' => $field_new_len);
$col_name = $field_name . '_value';
// modifichiamo sia la tabella dati che la tabella revisioni
db_change_field("field_data_$field_name", $col_name, $col_name, $new_field);
db_change_field("field_revision_$field_name", $col_name, $col_name, $new_field);
// pulizia delle cache
drupal_flush_all_caches();

Load & rendering dei teasers di una lista di nodi pagina e articolo

$query = new EntityFieldQuery();
$nids = $query->entityCondition('entity_type', 'node')->propertyCondition('type', array('page', 'article'))->execute();
$nodes = node_load_multiple(array_keys($nids['node']));
$teasers = node_view_multiple($nodes, 'teaser');
print render($teasers);

Stesso snippet aggiungendo il check per l'accesso ai nodi (filtra i nodi che l'utente corrente può effettivamente visualizzare)

$query = new EntityFieldQuery();
$nids = $query->entityCondition('entity_type', 'node')->propertyCondition('type', array('page', 'article'))->addTag('node_access')->execute();
$nodes = node_load_multiple(array_keys($nids['node']));
$teasers = node_view_multiple($nodes, 'teaser');
print render($teasers);

Ancora lo stesso snippet con l'ulteriore aggiunta dei metadati necessari a far girare la query impersonando un altro utente (nell'esempio l'utente con id 35)

$query = new EntityFieldQuery();
$nids = $query->entityCondition('entity_type', 'node')->propertyCondition('type', array('page', 'article'))->addTag('node_access')->addMetaData('account', user_load(35))->execute();
$nodes = node_load_multiple(array_keys($nids['node']));
$teasers = node_view_multiple($nodes, 'teaser');
print render($teasers);

[Altri aggiornamenti a venire...]