Se nell'hook_form_alter() di un modulo vengono chiamate le funzioni drupal_add_js() oppure drupal_add_css() per caricare dei Javascript o dei CSS nella form di creazione/modifica di un nodo, e la form non viene validata correttamente, all'apertura successiva non vengono caricati i Javascript e i CSS.
Il problema si può risolvere aggiungendo alla form il parametro #after_build e spostando le chiamate a drupal_add_js() e drupal_add_css() nella funzione da esso definita. In questo modo l'hook_form_alter() contiene esclusivamente gli elementi form, mentre nel #after_build ci sarà solo il caricamento dei Javascript e dei CSS.
Installando il modulo date_popup presente nel pacchetto date si può creare un elemento calendario per inserire date. Basta assegnare ad una normale casella di testo il tipo date_popup, ad esempio:
$form['data_inizio'] = array(
'#type' => 'date_popup',
'#title' => 'Data iniziale',
'#default_value' => $values['data_inizio'],
'#date_format' => 'd/m/Y',
'#size' => 13,
);
Cliccando dentro la casella viene fuori un widget calendario per scegliere la data.
Bisogna fare attenzione a NON INSERIRE la proprietà #maxlength, altrimenti verrà fuori un errore come questo:
warning: mb_strlen() expects parameter 1 to be string, array given in D:\localhost\drupal\includes\unicode.inc on line 410.
L'errore è dovuto al fatto che il modulo date_popup trasforma il valore della data in un array, quindi il controllo sulla lunghezza massima fatto durante la validazione della form si trova a eseguire la funzione drupal_strlen su un array anziché su una stringa, e genera quell'errore.
Il progetto Node images è un modulo Drupal per creare gallerie fotografiche. Per ogni contenuto inserito si possono caricare delle immagini, che poi saranno visualizzate come fotogallery. Le immagini possono essere caricate durante la creazione dei contenuti, e poi gestite in una pagina apposita, per modificare quelle già inserite o caricarne delle nuove.
Queste le caratteristiche principali del modulo:
Demo della fotogallery: Foto di Gaeta
$conf['i18n_variables'] = array(
// Site configuration
'site_slogan',
'site_mission',
'anonymous',
// User configuration
'user_registration_help',
'usermail_welcome_subject',
'user_mail_welcome_body',
'user_mail_approval_subject',
'user_mail_approval_body',
'user_mail_pass_subject',
'user_mail_pass_body',
// Primary and secondary links
'menu__primary_links_source',
'menu__secondary_links_source',
// Theme settings. This is an 'all or nothing' for each theme
// This is for 'garland' theme, for other theme it would be 'theme_[themename]_settings'
'theme_garland_settings',
);
global $language;
if (!empty($vars['primary_links'])) {
foreach ((array)$vars['primary_links'] as $id => $link) {
if ($link['langcode'] && strcmp($link['langcode'], $language->language) != 0) unset($vars['primary_links'][$id]);
}
}
