[RISOLTO]Per esperti - nodereference.module - C'è un limite mysql al numero di lettere in una autocomplete select list?

2 contenuti / 0 new
Ultimo contenuto
[RISOLTO]Per esperti - nodereference.module - C'è un limite mysql al numero di lettere in una autocomplete select list?

Ciao ragazzi
sto usando con successo nodereference di CCK abbinato al modulo Feeds per importare e referenziare ogni singolo feed item con il rispettivo node-title.
C'è solo un noioso problema che non riesco a risolvere; se il titolo del nodo è inferiore alle 3 lettere (esempio: LG, HP, EA) il matching con il nodo non avviene. Ho provato a chiedere agli sviluppatori del modulo Feeds, ma secondo loro non dipende da feeds.
Qualcuno mi suggerisce di controllare il modulo nodereference soprattutto la parte dei $where_clauses.Allego per semplicità la parte più importante del codice. Ne approfitto per chiedere:
Cosa vuol dire in questo caso ""$like '%%%s%%'" ? Non mi sembra come l'operatore LIKE nelle istruzioni sql......

<?php
 
function _nodereference_potential_references_standard($field, $string = '', $match = 'contains', $ids = array(), $limit = NULL) {
  ---------------
  if (
is_array($field['referenceable_types'])) {
    foreach (
array_filter($field['referenceable_types']) as $related_type) {
     
$related_types[] = "n.type = '%s'";
     
$args[] = $related_type;
  -------------------------
  if (
$string !== '') {
   
$like = $GLOBALS["db_type"] == 'pgsql' ? "ILIKE" : "LIKE";
   
$match_clauses = array(
     
'contains' => "$like '%%%s%%'",
     
'equals' => "= '%s'",
     
'starts_with' => "$like '%s%%'",
    );
   
$where[] = 'n.title '. (isset($match_clauses[$match]) ? $match_clauses[$match] : $match_clauses['contains']);
   
$args[] = $string;
  }
  elseif (
$ids) {
 -----------------------
 
$where_clause = $where ? 'WHERE ('. implode(') AND (', $where) .')' : '';
 
$sql = db_rewrite_sql("SELECT n.nid, n.title AS node_title, n.type AS node_type FROM {node} n $where_clause ORDER BY n.title, n.type");
 
$result = $limit ? db_query_range($sql, $args, 0, $limit) : db_query($sql, $args);
 
$references = array();
  while (
$node = db_fetch_object($result)) {
   
$references[$node->nid] = array(
     
'title' => $node->node_title,
     
'rendered' => check_plain($node->node_title),
-----------------
  return
$references;
}
 
?>

La parte che più mi fa riflettere è quella legata a : $result = $limit ? db_query_range($sql, $args, 0, $limit) : db_query($sql, $args);
ma non conoscendo come funzione Mysql e quindi l'eventuale db_query_range non saprei se e come intervenire.

Che ne pensate ?

In effetti i file del modulo Feeds non c'entravano nulla...ma nemmeno quelli di nodereference.

Siccome sono cocciuto ero certo che da qualche parte ci fosse un "lenght limit " in una delle fasi del processo.

L'ho trovato nel file extractor_simple.inc del modulo Extractor:

<?php
 
// Do not bother if word starts with a numeric or if word is in stop word list.
 
if ((strlen($word) < 3) || is_numeric($word[0]) || in_array(strtolower($word), _extractor_simple_stopwords())) {
    return array();
  } 
?>

modificato in:

<?php
 
if ((strlen($word) < 2)
?>

Adesso anche i titoli dei nodi di due lettere (HP, EA, LG, etc) sono correttamente referenziati !!

Thanks a lot