modulo Pathauto

12 contenuti / 0 new
Ultimo contenuto
modulo Pathauto

Ho appena installato il modulo Pathauto, che fa esattamente (o quasi) quello che volevo
creare url personalizzati del tipo www.sito.it/miapagina
adesso però ho un problema, una di queste pagine che ho creato, esempio lista
contiene una lista di libri, che lincano ad una pagina di dettagli che ho chiamato scheda
questa pagina, in php, riceve una variabile in GET chiamata ID e che contiene l'id della scheda per la query.
Funziona tutto perfettamente, ma sapete come fare affinchè Pathauto mi prenda in modo dinamico oltre al titolo della pagina ("pagina" appunto)
in modo dinamico anche il valore dell'ID.
Faccio un esempio, attualmente il nome dell'url è il seguente
www.sito.it/scheda?ID=34 (il nome dell'alias del nodo l'ho chiamato io con Pathauto in "scheda")

e funziona, ma come faccio con Pathauto a modificarlo in
www.sito.it/scheda/34
quindi a dargli in modo dinamico anche il valore ID

forse dovrei usare qualche altro modulo?

devi usate il modulo token.
nelle impostazioni per gli alias automatici dei nodi di tipo scheda dovrai inserire qualcosa tipo
scheda/[nid]

ok ho attivato il modulo token
- nel link della pagina lista che richiama la scheda ho inserito scheda/$ID
- nell'alias della pagina scheda ho inserito scheda/[nid]
- e nella pagina scheda ho sostituito
$mioid = $_GET['ID']);
con
$mioid = arg(2);

ma non funziona, mi dice "pagina non presente"

altrimenti cosa devo inserire nel php della scheda affinchè prenda la variabile $ID che gli passo?

hai controllato che gli alias siano effettivamente del tipo: "scheda/32"?
Oltre tutto se il tuo ID = NID, non ci dovrebbe essere neanche bisogno degli alias: arg(2) sarebbe sempre il nid

scusa, ma mica dovrei creare un nodo per ogni ID di scheda? io ho un migliaio di schede
Ho un unico nodo chiamato, come alias "scheda" e "node/10" come sistema,
per la verità
nell'alias della pagina "scheda" prima era:
alias = scheda
sistema = node/10

l'ho sostituito con
alias = scheda/[nid]
sistema = node/10

e nella pagina scheda che riceve quet'url www.sito.it/scheda/3432

ho inserito
$mioid = arg(2);
ma la pagina non riceve nulla nella variabile $mioid che mi serve per fare una SELECT
il numero che viene dopo scheda/ non è un numero fisso ma un numero variabile quindi non posso impostarlo staticamente nel' Alias URL

forse non mi sono spiegato bene, la pagina che contiene i dati si chiama
"node/10" e con l'alias URL gli ho assegnato il nome "scheda", ma io ho la necessità, richiamando la pagina scheda
di passargli anche una variabile in $_GET (esempio $id=500)

esiste un altro modo per evitare questa url www.sito.it/scheda?id=3432 ad esempio www.sito.it/scheda/NUMERO_VARIABILE
e se esiste, cosa devo metterci nel php della pagina scheda per recuperare il NUMERO_VARIABILE ?
generalmente basta inserire ad esempio $mioid = $_GET['id'];

non capivo e non capisco, scusami...

allora il tuo ID non c'entra nulla col nodo ed è un valore che non c'entra nulla neanche con drupal (nel senso che è una tabella esterna).
In questo caso, almeno per quanto ne so io, dovresti creare un token apposito da usare in pathauto per la generazione del tuo parametro come argomento dell'URL.
Però non mi è chiara la logica con cui il tuo sistema sceglie un ID piuttosto che un altro e in base a quali condizioni. se questo è chiaro a te, dovresti implementare la stessa logica nella generazione del token personalizzato.

mi viene il dubbio che l'ID lo passi alla scheda sulla base della pagina di partenza: in questo caso lascerei il punto interrogativo, visto che token non ti serve per quello (credo). Sempre se questo è il caso puoi provare il modulo prepopulate per vedere se puoi far sparire del tutto l'id dall'URL

ripeto però che non ho capito benissimo...

scusami hai ragione, mi sono spiegato io male, nel senso che davo per scontato alcune cose che tu giustamente non potevi sapere.
Ho una tabella non di Drupal, ma che si trova nello stesso DB mysql chiamata "libri", che contiene un migliaio di libri che avevo negli anni memorizzato
(titolo, autore, copertina, categoria, ecc. ecc.)
dato che avevo anche già pronto le 2 pagine php che avevo fatto per un altro sistema non drupal, "lista_libri.php" che mi visualizza i titoli dei libri
e "scheda.php" che mostra tutti i dettagli compreso la copertina del determinato libro prendendo l'ID che gli passa "lista_libri.php"
es: scheda.php?ID=ID_DEL_LIBRO.
ho creato 2 pagine drupal sfruttando il Formato input PHP CODE di drupal facendo un include dei file php modificati per funzionare in drupal (compreso la paginazione).
mi dirai che avrei dovuto importare tutta la tabella in una view di drupal, ma i campi sono molti e non sono un conoscitore di drupal, e anche i record sono tanti, e poi mi sarei trovato con un migliaio di nodi.

invece in questo modo ho fatto subito, e funziona tutto.
oltre all'id del libro gli passo in GET anche il titolo del libro che faccio apparire, modificando il page.tpl.php, in alto nel TITLE della pagina.
La cosa alla quale puntavo (e sarebbe il massimo per me) era quella di creare anche un alias dell'url che comprendesse il titolo nell'url
attualmente il link alla scheda che richiama "lista_libri.php" è ad esempio il seguente
www.sito.it/scheda?id=342&urltitolo=LA+GRANDE+GUERRA
sarebbe il massimo riuscire ad avere un alias url del genere
www.sito.it/scheda/342/LA GRANDE GUERRA
questo principalmente per ottimizzarlo per i motori di ricerca.

...spero di essere stato chiaro, e di non abusare della tua certosina pasienza

se vuoi usare gli alias devi per forza usare il "sistema" di drupal: ad un alias corrisponde una pagina (nodo, vista).
con una tabella arbitraria non credo si possa fare con semplicità.

è invece molto più semplice importare i dati di quella tabella in un content type. un volta fatto quello puoi raggiungere facilmente il tuo obiettivo e anche molto di più. 1000 nodi non ti devono spaventare ;)

in alternativa puoi importare la tabella con feeds+data senza creare nodi e fare tutto con views. richiede un po' più di pianificazione ma si può fare

Grazie mille, credo di aver capito.
e mi piacerebbe approfondire l'ultima tua soluzione (feeds+ data)
sono moduli?

Grazie bohz, sei gentilissimo!!!
molto...molto... interessanti questi due moduli che mi hai segnalato, credo proprio che li andrò a provare di corsa.

p.s.
AMMAZZA quanti sono stì moduli di drupal, una marea, ma devo frenare il mio impeto altrimenti ne installo troppi
e il database si affatica troppo :-)
l'unica piccola carenza è che molte volte i moduli presenti sul sito ufficiale drupal.org non hanno una buona documentazione o un preview
e si fa fatica a capire realmente cosa servono.

ho fatto varie prove ed ho installato vari moduli tra i quali quelli suggeriti da bohz.
ma alla fine ho preferito non importare le tabelle esterne a drupal (per vari motivi gestionali)
Però ho risolto il problema.
1) ho installato il modulo "subpath alias" che mi ha consentito di far funzionare la pagina alias "scheda" anche inserendo dei sub alias esempio :
www.sito.it/scheda/3454/LA GRANDE GUERRA
(prima mi dava errore di pagina non trovata su qualsiasi cosa inserissi dopo www.sito.it/scheda/QUALSIASICOSA)
2) nella pagina page.tpl.php per recuperare il titolo del libro e inserirlo nel TITLE ho inserito queste righe di codice php

if ($node->type == "scheda") {
$get_path =  $_SERVER['REQUEST_URI'];
$folderNames = explode('/', $get_path);
$titolo_libro= $folderNames[(count($folderNames)-1)];
$titolo_libro = urldecode($titolo_libro)." / ";
}

e nel title ho inserito
<title><?php print $titolo_libro ?><?php print $head_title ?></title>

3) per recuperare l'id del libro nella pagina scheda indispensabile per la SELECT
ho inserito queste altre righe di php in sostituzione del precedente
$mioid = $_GET['id_libro'];

$get_path =  $_SERVER['REQUEST_URI'];
$folderNames = explode('/', $get_path);
$mioid = $folderNames[(count($folderNames)-2)];

ora la pagina alias scheda funziona perfettamente recuperando ben 2 variabili passate
nel'url senza utilizzare url del tipo
scheda?id_libro=3456=&titolo_libro=LA GRANDE GUERRA
ma semplicemente:
scheda/3456/LA GRANDE GUERRA

l'ho scritto nel caso potesse essere utile a qualcuno nel forum