[Résolu] [Débutant] Uploader un fichier avec hook_block_configure

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

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
Icône texte brut telogo.module.txt3.17 Ko
Forum : 
Version de Drupal : 
Tags : 

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.