Aggiungere campi al modulo Location

Il modulo Location permette di associare a nodi Drupal delle reali ubicazioni geografiche, comprese le persone, i luoghi, e altri contenuti. Il modulo Location consente agli amministratori di raccogliere indirizzi, li geocodifica (per tradurre gli indirizzi in latitudine-longitudine), associa le locations (ubicazioni) con i nodi Drupal e gli utenti.
I dati relativi all'ubicazione sono automaticamente utilizzati per generare GeoRSS all'interno dei feed RSS esistenti. Location fornisce anche un'API per fare in modo che altri moduli possano usufruire della sue caratteristiche di archiviazione indirizzo e di geocodifica.

Detto questo e se non o fatto orrori di traduzione madornali, aggiungo che utilizzato con il modulo GMap viene creata una mappa di Google piuttosto personalizzabile.

Ma veniamo al punto, premetto che non sono un programmatore ma alcune settimane fa mi serviva di aggiungere alcuni campi al modulo Location così mi sono avventurato all'interno del modulo ed ho trovato una soluzione semplice ed alla portata di ognuno.

Quella che segue non è una modifica del modulo ma un'aggiunta di un nuovo modulo per ogni campo in più che vi serve.

All'interno della cartella location c'è una cartella chiamata contrib. Qui dentro ci sono una serie di moduli buona parte dei quali aggiunge un campo specifico al form di Location.

Come esempio prendiamo il più difficile, ovvero l'aggiunta di un campo cliccabile che permette di aggiungere un sito web.

Facciamo una copia della cartella location_fax e la rinominiamo location_sito.

Apriamo la cartella e ripetiamo l'operazione rinominando allo stesso modo tutti i file presenti.

Quindi location_fax.info diventerà location_sito.info, location_fax.install diventerà location_sito.install ecc..

La prossima operazione da fare è quella di modificare tutte le occorrenze fax all'interno di ognuno dei file rinominandole in sito.

Quindi va aperto un file alla volta e trasformato ogni parola fax in sito. Esistono alcune eccezioni che non sono fondamentali per il funzionamento del modulo, ma forniscono i testi visibili nell'area amministrativa o agli utenti. Facendo una sostituzione automatica agli utenti apparirà ad esempio sito number e non è molto elegante.

Di seguito le righe da controllare e modificare a piacere:

File location_sito.info - Righe 2 e 4 contengono rispettivamente il titolo e la descrizione visibili nella pagina di installazione moduli.

File location_sito.install - Riga 24 in origine chiamata Fax number andrebbe chiamata Website o volendo direttamente in Italiano Sito web.

File location_sito.module - Righe 15 – 26 e 70 sempre come sopra.

File location_sito.views.inc - Righe 6 - 52 e 53 hanno titolo ed help della vista.

Quando abbiamo finito siamo pronti per installare il modulo ma prima sarà meglio fare un backup del database.

Installiamo il modulo, facciamo le nostre configurazioni, creiamo il nostro nodo prova e...orrore!!! I dati immessi non appaiono nel nodo.

Niente paura, manca un “piccolo” particolare da completare.

Il passo successivo è quello di prendere il file location.tpl.php nella cartella location e copiarlo dentro alla cartella del tema che usiamo per il nostro sito.

Fatto questo apriamo il file location.tpl.php presente nella cartella del nostro tema e facciamo una copia del seguente codice:

<?php if (isset($fax) && $fax): ?>
<div class="tel">
  <abbr class="type" title="fax"><?php print t("Fax");?>:</abbr>
  <span><?php print $fax; ?></span>
</div>
<?php endif; ?>

Lo incolliamo subito sotto <?php endif; ?> e lo trasformiamo in

<?php if (isset($sito) && $sito): ?>
<div class="tel">
  <abbr class="type" title="sito"><?php print t("Sito web");?>:</abbr>
  <span><?php print $sito; ?></span>
</div>
<?php endif; ?>

Volendo possiamo cambiare anche la classe per avere maggior controllo via CSS di quel div.

Salviamo, puliamo la cache di Drupal ed ora l'indirizzo del sito apparirà nella pagina il problema è che non è cliccabile.

Per renderlo cliccabile è sufficiente trasformarlo nel modo seguente:

<?php if (isset($sito) && $sito): ?>
<div class="tel">
  <abbr class="type" title="sito"><?php print t("Sito web");?>:</abbr>
   <span><a href="http://<?php print $sito; ?>" title="Vai al sito web di <?php echo $name; ?>"><?php print $sito; ?></a></span>
</div>
<?php endif; ?>

Buon divertimento :-)

Argomenti:

Ma questo campo poi sarà visibile in View?

Non ho provato ma teoricamente, essendo visibile nel modo descritto, dovrebbe esserlo anche in View. Se non è visibile dovrebbe bastare aggiungere alcune righe seguendo uno schema simile a quello in location.tpl.php

Perfetto, provo e ti faccio sapere.
Grazie

Ok confermo che il campo si vede anche in view.

Grazie Krima dei tuoi suggerimenti!

Ottimo :-)

Ma secondo te come mai il campo cck si trova sotto field mentre in Sort Criteria non lo trovo?

Non ho capito la domanda, io se vado ad inserire il campo cck lo trovo in Percorso-> Location Field

Si è vero, infatti quello lo trovo.
Ma se voglio ordinarli per ordine alfabetico del campo che ho inserito?

Nel mio caso ho inserito un campo Regione.
Vorrei ordinare i risultati della view in base all'ordine alfabetico di questo campo ma in Sort Criteria non lo trovo mica...

I campi cck in una view, mi risulta che non possono essere ordinati in ordine alfabetico. Ad ogni modo esula dal modulo location ed andrebbe aperto un post specifico.

Strano però, perchè gli altri field di location li trovo in Sort Criteria e se per esempio scelgo il Campo Location:city riesco ad ordinarlo in ordine alfabetico...
ora vedo un pò come fare

Ok risolto.
Basta cambiare al file location_sito.views.inc da cosi:

// ----------------------------------------------------------------
  // location_regione table -- fields
  $data['location_regione']['regione'] = array(
    'title' => t('regione'),
    'help' => t('The regione number of the selected location.'),
    'field' => array(
      'click sortable' => TRUE,
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
      'empty field name' => t('None'),
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
      'allow empty' => TRUE,
    ),
  );

a cosi:

// ----------------------------------------------------------------
  // location_regione table -- fields
  $data['location_regione']['regione'] = array(
    'title' => t('regione'),
    'help' => t('The regione number of the selected location.'),
    'field' => array(
      'click sortable' => TRUE,
    ),
    'argument' => array(
      'handler' => 'views_handler_argument_string',
      'empty field name' => t('None'),
    ),
    'filter' => array(
      'handler' => 'views_handler_filter_string',
      'allow empty' => TRUE,
    ),
    'sort' => array(
      'handler' => 'views_handler_sort',
    ),
  );

aggiungendo la stringa:

'sort' => array(
      'handler' => 'views_handler_sort',
    ),

Spero che possa essere d'aiuto.
Ciao

Ottimo! :-)

Scusate, poichè vorrei inserire all'interno del modulo location il campo city come una lista a tendina data dalla selezione dello State/provincia. Pensate sia possibile nel modo che avete indicato sopra? vi prego di rispondere grazie.

E' passato un bel po' di tempo e non uso più D6 quindi non saprei dirti se la cosa è semplice ed alla portata di chi non è un programmatore. Sicuramente devi aggiungere del codice.

L'unica è fare delle prove su un sito di test.

Uhm, la cosa mi è stata molto utile, in quanto avevo bisogno di un campo regione che mancava, l'unica cosa è che, se non sbaglio, ogni qualvolta si aggiorna il modulo location la modifica andrà persa.
Conviene farsi una copia del sottomodulo nuovo e copiarla nella cartella "contrib" una volta aggiornato il modulo o ci sono metodi migliori, tipo creazione di un nuovo modulo a se stante?