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:
modificato in:
Adesso anche i titoli dei nodi di due lettere (HP, EA, LG, etc) sono correttamente referenziati !!
Thanks a lot