Problema con views, caratteri speciali e categorizzazione

5 contenuti / 0 new
Ultimo contenuto
Problema con views, caratteri speciali e categorizzazione

Ciao a tutti.
Vi spiego la mia questione. Innanzitutto la mia situazione nasce da una ricerca alla soluzione di questo problema qui (http://www.drupalitalia.org/node/14674). Per farla breve (per chi non avesse voglia di leggersi la discussione), la necessità di procedere in questa maniera, è dovuta al fatto che non posso superare le 2500 query giornaliere che google maps mi permette per il suo servizio di geocoding. Perciò, se qualcuno fosse così gentile da aiutarmi nella risoluzione del problema, questa esperienza potrebbe portare un vantaggio a tutti gli utenti che potrebbero trovarsi in questa situazione. E' una via per creare un sito di "directory" memorizzando una sola volta i dati forniti da google maps, senza effettuare un nuovo geocoding per le ricerche.

Ma passiamo al dunque:

- Questo sito deve permettere la ricerca per luogo (città, non solo provincie) delle aziende presenti nel database.

- Ho creato quindi un tipo di contenuto associato ad un profilo "azienda" e, all'interno di questo contenuto, c'è un Openlayers Geocoder che mi permette di localizzare il luogo di appartenenza.

- Sempre all'interno di questo contenuto, ho creato una text field (field_city) che, tramite l'opzione Autocomplete CCK (opzione che mi concede l'Openlayers Geocoder) si completa automaticamente (nel momento in cui l'azienda salva il suo indirizzo) con la città del luogo. Esempio: l'azienda si trova in "via Torino 10 Milano Italia", automaticamente quella casella si popola con il nome "Milan". Questo grazie all'opzione Autocomplete CCK.

- Il mio dubbio era: cerco di trasformare questa casella (che si popola automaticamente) in un termine della tassonomia o mi arrangio con le views? Considerate che il mio progetto ha un target mondiale o comunque non solo italiano, quindi non mi posso permettere di scrivere a mano (o importare) un elenco di tutti i comuni. Per questo sto cercando un procedimento automatico.

- A questa domanda non ho avuto risposta, però mi è sembrato di capire, leggendo in vari forum, che sarebbe stato meglio affidarsi alle views.

- Deciso questo, il problema era: come posso rendere questa casella un link che mi rimandi ad un elenco con tutte le aziende di quella città? Esempio: mi trovo nell'azienda "Tizio" che si trova a "Milano", come posso far comparire la scritta "Milano" da qualche parte che, cliccandoci, mi rimandi ad un elenco di tutte le aziende di Milano?

- Problema risolto: ho creato tramite views un blocco, che come argomento ha "Nod: Nid" e nell'opzione "Action to take if argument is not present:" -> Provide default argument -> Node ID from URL. Nella sezione "Fields" ho selezionato Content: (field_city) e in "Output this field as a link" la seguente stringa: http://localhost:8888/prova/ricerca/[field_city_value]. Ho associato poi questo blocco al contenuto. In questo modo, si crea un nuovo blocco in ogni profilo "azienda" con un link che ha la stessa scritta della casella field_city che rimanda ad un indirizzo ricerca/"nome della città"

- Ovviamente questo url ricerca/"nome della città" è un'altra views che ho creato in questo modo: una page che ha come argomento il contenuto di field_city e come "fields", Node: Title. Come path della pagina "http://localhost:8888/prova/ricerca/%"

- Tutto funziona quasi alla perfezione. Un utente registra la sua azienda e, automaticamente, si crea una casella che si popola con il nome della città. Sempre automaticamente, si crea un blocco (nel contenuto) che ha al suo interno un link con lo stesso nome della città, che cliccandoci, mi rimanda ad una pagina che contiene l'elenco di tutte le aziende registrate in quel luogo.

- Dicevo, quasi alla perfezione, perché ho notato che tutto il discorso salta con alcuni caratteri. Esempio: se la mia azienda si trova a Cortina d'Ampezzo, si crea un blocco con un link di questo nome, ma il percorso a cui punta è questo:

http://localhost:8888/prova/ricerca/Cortina d'Ampezzo

senza trovare alcun risultato (perché la views si aspetta invece "http://localhost:8888/risto/prova/Cortina d'Ampezzo". Evidentemente Drupal mi converte automaticamente l'apostrofo in quella maniera e tutto ciò mi sballa tutto. Senza contare che mi ritroverei degli url con degli spazi (almeno così succede nel mio browser visivamente). Però se la città è "Roseto degli Abruzzi" non succede nulla (l'url a cui punta è: "http://localhost:8888/risto/prova/Roseto degli Abruzzi") e mi compare l'elenco di tutte le aziende in questa città. Quindi i problemi non sono gli spazi, ma nell'ottica SEO mi sembra di capire che non sia il massimo.

Avete qualche suggerimento al riguardo? Sia per risolvere il problema dei caratteri speciali (in modo da permettermi la query giusta) che degli spazi?

La mia idea sarebbe inoltre quella di trovare il modo di associare le città alla relativa provincia e nazione (e penso che la via sia quella di partire dal fatto che nel geocoding, tramite l'opzione Autocomplete CCK, posso creare altre cck fields che si popolano con il nome della nazione e provincia; e da lì maneggiare con le views e i filtri). Però per questo c'è ancora tempo, ma mi farebbe molto piacere (che sia io da solo o grazie al vostro aiuto) continuare e completare tra qualche settimana questo topic, in modo da avere una soluzione completa ed utile per tutti gli utenti.

Intento vi saluto.

Un'altra possibilità potrebbe essere quella di creare una nuova text field nel profilo "azienda" che si popoli con il contenuto di field_city e usare del php per fare in modo che gli spazi siano sostituiti da trattini e che i caratteri speciali vengano cancellati o sostituiti in qualche maniera. Usare poi questo valore come argomento nelle altre views. Qualcuno potrebbe darmi qualche dritta su questo punto?
Grazie.

Ho trovato una soluzione completamente differente grazie a questo topic (http://drupal.org/node/297030). Associare il contenuto di field_city ad un nuovo termine del vocabolario City (precedentemente creato). Per fare questo ho installato il modulo Computed Field (http://drupal.org/project/computed_field). Ho creato quindi nel contenuto "azienda" una field di tipo computed. Il codice da inserire in Computed Code è:

    $vid = 4;
    $my_field = $node->field_city['0']['value'];
    $escaped = check_plain($my_field);
    $existing_terms = module_invoke('taxonomy', 'get_term_by_name', $escaped);
    if (count($existing_terms) > 0) {
        foreach ($existing_terms as $existing_term) {
            if ($existing_term->vid == $vid) {
                $term_id = $existing_term->tid;
            }
        }
    } else { //the term exists
        $edit = array('name' => $escaped, 'vid' => $vid);
        taxonomy_save_term($edit);
        $term_id = $edit['tid'];
    }
    $node->taxonomy = array($vid => array($term_id => $term_id));

Nella prima riga, il numero 4 rappresenta l'id del mio vocabolario. Mentre nella riga successiva, assegno alla variabile my_field il valore di field_city (che è la casella che si popola automaticamente tramite Autocomplete CCK).
Tutto funziona perfettamente e automaticamente si crea un termine della tassonomia con il nome della città. Ovviamente, se questo è già presente, non lo fa.
Il problema è che non riesco ad associare il termine al nodo, cosa che dovrebbe fare l'ultima riga di codice:

$node->taxonomy = array($vid => array($term_id => $term_id));

Infatti, sempre in quel topic, due utenti di Drupal 6 hanno il mio stesso problema (il codice appena menzionato è appunto per Drupal 5). Avete qualche idea?

Ho risolto sostituendo:

$node->taxonomy = array($vid => array($term_id => $term_id));

con:

$node->taxonomy[] = $term_id;
if(empty($node->build_type)) taxonomy_node_save($node, $node->taxonomy);

Tutto perfetto, tranne per il solito problema dei caratteri speciali, in particolare l'apostrofo. Riprendendo l'esempio di Cortina d'Ampezzo, il termine del vocabolario che si crea automaticamente è:

Cortina d'Ampezzo

La tassonomia funziona ugualmente, ma non posso creare un menu con quei nomi (per un fattore estetico ovviamente). Aprirò un nuovo topic per risolvere questo punto.

subscribe

Antonio Ficai