Création d'un bloc menu jump par autocompletion

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,

Je souhaite ajouter sur ma page d'accueil un bloc qui permette de rechercher une ville (= un terme de mon vocabulaire ville) via un champ texte en autocompletion et qui, lorsqu'on clique dessus, ouvre la page de ma ville.

Pour ce faire, j'ai décidé de passer par les hook_block_info, hook_block_view et une fonction hook_menu qui me permette d'appeler en callback la fonction qui ramène les termes de ma taxonomie.

function recherche_commune_block_info() {
  $blocks['recherche_commune'] = array(
    // The name that will appear in the block list.
    'info' => t('Rechercher une commune'),
    // Default setting.
    'cache' => DRUPAL_NO_CACHE,
  );
  return $blocks;
}

function recherche_commune_block_view($delta = ''){
    switch ($delta) {
        case 'recherche_commune':
            $block['subject'] = t('Rechercher une commune');
            $block['content'] = drupal_get_form('recherche_commune_form');
            break;
    }

    return $block;
}

function recherche_commune_menu() {
  $items['page-autocomplete'] = array(
    'page callback' => 'recherche_commune_autocomplete',
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

function recherche_commune_form($form, &$form_state) {
  $form = array();
  $form['Commune'] = array(
    '#title' => t('Commune'),
    '#type' => 'textfield',
    '#maxlength' => 60,
    '#autocomplete_path' => 'page-autocomplete',
  );

  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit',
  );
  return $form;
}

function recherche_commune_autocomplete($text) {
$results = array();
    $query = db_select('taxonomy_term_data', 'd');
$query->join ('taxonomy_term_hierarchy', 'h', 'h.tid=d.tid');
$query->join ('taxonomy_vocabulary', 'v', 'v.vid=d.vid');
$query
        ->condition('v.name', 'Géographie-Commune', '=')
        ->condition('d.name', '%' . db_like($text) . '%', 'LIKE')
      ->fields('d', array('name', 'tid'))
       ->fields('v', array('name'))
        ->fields('h', array('parent'))
      ->range(0, 10)
      ->orderBy('parent', 'ASC');
$sql_result = $query->execute();

  foreach ($sql_result as $row) {
    $results[$row->name] = check_plain($row->name);
  }

  drupal_json_output($results);
}

Ce code ne fonctionne pas ; je ne suis pas certain de pouvoir associer les hook_block_view() et hook_menu() dans le même module.

Pouvez-vous m'aider ?

Forum : 
Version de Drupal :