[RISOLTO] Autocomplete: cambiare il numero di suggerimenti o modificare la query

4 contenuti / 0 new
Ultimo contenuto
[RISOLTO] Autocomplete: cambiare il numero di suggerimenti o modificare la query

Salve a tutti.
Sto cercando di modificare il numero di suggerimenti del filtro "Taxonomy: Term ID (with depth)", usando come tipo di selezione "Autocomplete". Il limite è di 10 e vorrei aumentarlo. Questo perché ho un vocabolario della tassonomia che comprende la lista di tutti i comuni italiani (preso qui: http://www.drupalitalia.org/node/10139). Ho notato che se inizio a digitare "Roma", il nome non compare. Penso sia dovuto al fatto che molti comuni contengono la stringa "roma" all'interno del loro nome, quindi Drupal mi restituisce solo i primi 10 suggerimenti. Ho cercato in rete e tra i vari file di Drupal, ma non riesco proprio a trovare la porzione di codice in cui cambiare questo limite, da 10 a 20 per esempio.
Ancora meglio sarebbe cambiare la query che viene usata per costruire questi suggerimenti. Attualmente cerca i termini che contengono la stringa "roma" (Arcinazzo Romano, Bagnara di Romagna, ecc.): vorrei però che cercasse i termini che comincino per "roma". In questo caso inoltre non sarebbe necessario cambiare il limite di 10.
Qualche idea? Più che altro: dove si trova il codice da modificare?
Grazie.

Finalmente ho trovato il codice da modificare! Si trova in modules/taxonomy/taxonomy.pages.inc:

/**
* Helper function for autocompletion
*/
function taxonomy_autocomplete($vid, $string = '') {
  // The user enters a comma-separated list of tags. We only autocomplete the last tag.
  $array = drupal_explode_tags($string);
  // Fetch last tag
  $last_string = trim(array_pop($array));
  $matches = array();
  if ($last_string != '') {
    $result = db_query_range(db_rewrite_sql("SELECT t.tid, t.name FROM {term_data} t WHERE t.vid = %d AND LOWER(t.name) LIKE LOWER('%%s%%')", 't', 'tid'), $vid, $last_string, 0, 10);
    $prefix = count($array) ? implode(', ', $array) .', ' : '';
    while ($tag = db_fetch_object($result)) {
      $n = $tag->name;
      // Commas and quotes in terms are special cases, so encode 'em.
      if (strpos($tag->name, ',') !== FALSE || strpos($tag->name, '"') !== FALSE) {
        $n = '"'. str_replace('"', '""', $tag->name) .'"';
      }
      $matches[$prefix . $n] = check_plain($tag->name);
    }
  }
  drupal_json($matches);
}

Il numero "10" è quello che limita i risultati. Ora, siccome non sono molto pratico, qualcuno potrebbe aiutarmi a modificare la query per fare in modo che vengano suggeriti i termini che iniziano con la stringa digitata? Una specie di "start with" presente in Views?

Come non detto, trovata la soluzione. Basta cambiare in questo modo:

-
$result = db_query_range(db_rewrite_sql("SELECT t.tid, t.name FROM {term_data} t WHERE t.vid = %d AND LOWER(t.name) LIKE LOWER('%%s%%')", 't', 'tid'), $vid, $last_string, 0, 10);

+
$result = db_query_range(db_rewrite_sql("SELECT t.tid, t.name FROM {term_data} t WHERE t.vid = %d AND LOWER(t.name) LIKE LOWER('%s%%')", 't', 'tid'), $vid, $last_string, 0, 10);

Ciao benipulp,
è davvero molto utile questa modifica!!!
grazie.