Submitted by NiRaDo on
Bonjour à tous.
Je suis en train d'apprendre à créer mes propres modules Drupal, et je bloque sur un truc tout bête.
Je veux créer un module qui crée un bloc comportant le logo et le slogan du site. Je veux donc que l'utilisateur puisse configurer le bloc et uploader le logo à afficher.
Voici mon code :
function telogo_block_configure($delta = '') {
$form = array();
switch($delta) {
case 'telogo-bloc':
...
$form['telogo_logo'] = array(
'#type' => 'file',
'#title' => 'Logo du site',
'#description' => 'Logo du site au format image. N\'oubliez pas de cocher "logo" dans la section "Afficher un texte ou un logo ?"',
'#size' => 1,
'#default_value' => variable_get('telogo_logo', '/sites/all/themes/telotheme/logo.png'),
);
$form['site_slogan'] = array(
...
}
return $form;
}
function telogo_block_save($delta = '', $edit = array()) {
if($delta == 'telogo-bloc') {
variable_set('site_name', $edit['site_name']);
variable_set('site_slogan', $edit['site_slogan']);
$validators = array();
$file = file_save_upload('telogo_logo', $validators, 'telogo');
file_set_status($file, FILE_STATUS_PERMANENT);
variable_set('telogo_logo', $file);
}
}
Je pense que je sèche sur la fonction file_save_upload. Lorsque je tente d'envoyer un fichier la page reste blanche (d'ailleurs, je ne sais pas comment faire en sorte d'avoir les messages d'erreurs PHP au lieu d'une page blanche avec drupal).
Je suis bloqué.
Si quelqu'un avait une piste, je suis preneur !
Merci d'avance
Fichier attaché | Taille |
---|---|
![]() | 3.17 Ko |
Un ptit ‘up !’ :p
Permalien Soumis par NiRaDo le 4 Novembre, 2012 - 17:03
Un ptit 'up!' :p
SOLUTION : Ca y est j’ai
Permalien Soumis par NiRaDo le 4 Novembre, 2012 - 18:35
SOLUTION :
Ca y est j'ai trouvé.
$form['telogo_logo'] = array(
'#type' => 'managed_file',
'#title' => 'Logo du site',
'#description' => 'Logo du site au format image. N\'oubliez pas de cocher "logo" dans la section "Afficher un texte ou un logo ?"',
'#size' => 300,
'#upload_location' => 'public://uploads'
);
Il faut préciser où doit être enregistré le fichier avec '#upload_location', et j'ai choisi le type 'managed file'. Lors de l'envoi du fichier, seul l'ID du fichier soumis est transmis comme valeur du champs 'telogo_logo'.
Ensuite, dans le hook_block_save :
// On charge les données relatives au fichier à partir de son FID :
$file = file_load($edit['telogo_logo']);
// On précise qu'il doit persister :
$file->status = FILE_STATUS_PERMANENT;
// Puis on sauvegarde :
file_save($file);
variable_set('telogo_logo', $file->uri);
Après je ne sais pas si c'est une bonne pratique que d'enregistrer l'URI dans les variables de configuration plutôt que le FID.