drupal

Drupal 7: Aggiungere dei campi calcolati a una entità

drupal

Caso d'uso: state creando un modulo che deve aggiungere dei campi visibili a una entità. Il valore di questi campi è generato dal modulo stesso, e volete che questi campi fittizi siano visti nella pagina "Gestisci visualizzazione" dell'entità in modo da poter definire l'ordinamento, e in generale il layout, della visualizzazione in maniera tradizionale.

Per fare questo dovete usare l'hook hook_field_extra_fields (o l'analogo hook_field_extra_fields_alter).

https://api.drupal.org/api/drupal/modules!field!field.api.php/function/hook_field_extra_fields/7

Drupal: Gestione semplificata invio mail

drupal

In Drupal 7 la gestione mail è flessibile, ma anche un tantino complicata. Sotto una sistema per semplificare l'invio di mail, con alcune features:

  • permette di impostare gli headers velocemente in $params['headers']
  • permette di inviare mail HTML semplicemente impostando l'header Content-Type: text/html [...]

Questo il codice da inserire in un vostro modulo (oppure dentro settings.php):

[php]

Drupal: Visualizzare come viene costruita in SQL una query dinamica

drupal

Se stiamo costruendo una query con il nuovo formato "dinamico", e vogliamo tradurre ciò che stiamo facendo nel caro e vecchio SQL per vedere se stiamo effettivamente ottenendo ciò che vogliamo, possiamo fare in 2 modi.

Stampare semplicemente la query come stringa: in questo modo otteniamo la query non parametrizzata. Possiamo ottenere i valori dei parametri con il methodo arguments().

$query = db_select('node', 'n') ...
print((string) $query);
print_r($query->arguments());

Oppure, se abbiamo il devel.module attivo, usare la funzione dpq, che mostra direttamente la query già parametrizzata:

dpq($query);

Mysql: inserire in una colonna un contatore sequenziale di riga

mysql

A volte può servire inserire in una select un contatore sequenziale, in modo che ad ogni record venga generato il numero successivo. Ad esempio per generare degli ID incrementali per una "insert into table". Ecco come:

select @c := @c + 1, ... from ..., (select @c := 0) c

L'esempio effettua un conteggio da 1 a 10, variando i numeri è possibile ovviamente cambiarlo. Ad esempio, per inserire degli utenti drupal:

select @curRow := value from sequences;
insert into users (uid, ...) select @curRow := @curRow + 1 uid, ... from externale_table ...;
delete from sequences; insert into sequences (value) values(@curRow + 1);

Drupal: redirect dopo il logout non funzionante

drupal

In Drupal 7.2 (e mi sa anche fino alla 7.7) impostare un trigger per effettuare un redirect dopo il logout non funziona.

O meglio: il redirect lo fa, ma non fa realmente il logout (basta tornare nel sito per notare che si è ancora autentificati).

Il problema è stato segnalato in http://drupal.org/node/1068360, ma al momento non sembra che a nessuno freghi un granchè.

 

L'errore è probabilmente dovuto al session_destroy() di user_logout() viene chiamato DOPO l'invocazione degli hook "user_logout".

Una soluzione semplice è questa:

1. si crea una pagina interna del sito, che fa questo codice php:

<?
session_destroy();
drupal_goto('http://SITO_ESTERNO');