Template suggestions By Path

4 contenuti / 0 new
Ultimo contenuto
Template suggestions By Path

Ciao ragazzi

sto approcciando con molta soddidfazioane le template suggestions.

Ora volevo capire tramite chi è più esperto di me "fin dove" posso spingermi e come. Spiego:

Sto temizzando delle aree particolari, questo mi riesce sia con il content-type che col le views create ad hoc.
per quanto riguarda il tipo :

if ($vars['node']->type == "scheda_prodotti" && arg(2) != 'edit') {
    $vars['template_files'][] = 'page-node-scheda_prodotti';
  }

per le pagine :
if ($vars['node']->path == "prodotti/cioccolattini" && arg(2) != 'edit') {
    $vars['template_files'][] = 'page-node-scheda_prodotti';
  }

e fin qui ci siamo :-)

Ora però mi sorge un problema.
Quando comincio a "sfogliare" le pagine 1-2-3-4-etc della views , ovviamente il path cambia
prodotti/cioccolattini/2
prodotti/cioccolattini/3
e così via....

e altrettanto ovviamente ...grrrrr...NON FUNZIONA!

Come posso risolvere questo problema ?
E visto che ci sono , come mai se indico un path più annidato tipo " prodotti/cioccolattini/all" la funzione non funzia ? :-)

Grazie a chi potrà darmi un indizio !!

Ciao, non so se stai seguendo la strada corretta visto che per singolo tipo di contenuto tu vai a ricreare tutta la pagina, mentre dovresti andare a creare solo il contenuto.

Comunque ho avuto un problema analogo in un grosso sito che ho curato, dove alcune pagine dovevano avere la sidebar stretta, ed altre larga. Io ho risolto il problema così:

<?php
$widePath
[] = 'chi-siamo';
$widePath[] = 'user*';
if (
drupal_match_path($_GET['q'],implode("\n",$widePath))) {
 
//Qui sidebarstretta
}
else {
 
//Qui sidebar larga
}
?>

Nota l'uso del carattere * che ti permette di gestire path tipo user, users, users/pippo, users/pippo/pluto.

M.

--
Michel 'ZioBudda' Morelli -- [email protected]
Sviluppo applicazioni CMS DRUPAL e web dinamiche -- Corsi Drupal -- Amministrazione Drupal -- Hosting Drupal

Ciao ziobudda,

ti spiego come mi sto muovendo, così mi dici se il mio approccio è corretto:
Sto creando delle aree che a seconda del tipo di contenuto sono, "molto diverse" nel contenuto, parzialmente diverse (principalmente i colori, font-family e poco altro) nel layout pagina.
Come lo ottengo:
Content-type: Qui ovviamente agisco soltanto sul contenuto e con i due file, page-qualcosa, page-node-qualcosa. Ok
Sidebar: Sempre per tipo di contenuto, imposto nelle Sidebar ( ho due sidebar dx) non solo blocks diversi ( e qui ovviamente
viene facile andando a dare i parametri di visibilità ai blocchi stessi (Qui si, qui no ) , ma li personalizzo anche come
layout, colori , etc , attraverso il modulo blocktheme, che, permettendo di assegnare una classe diversa ad ogni blocco
ne permette anche la personalizzazione totale. OK
Header: Su page-node-qualcosa, cambio classe al st-header-group e posso rimaneggiare un pochino anche quello.

A questo punto la mia area personalizzata è completa...direi , qui chiedo il tuo parere, e almeno così pare a me , senza "appesantire" la navigabilità
del sito con tonnellate di variabili.

Quasi completa....
Mi rimane L'unico problema : l'header nella view di gruppo. IL contenuto no , pechè essendo dei campi generati con CCK hanno già una propria classe formattabile.
Se , ad esempio quindi , sono in un'area "cioccolatini" e ho fatto in modo che Content + Sidebar + header abbiano
colore "cioccolato" , quando vado nella pagina (view) e tutte le sue pagine a cascata, che mi raggruppano TUTTI i cioccolatini , ovviamente l'header mantiene il coloro di fondo generale e non quello della "categoria prodotto"

Prima di testare la strada del "suggestion by path" , avevo tentato con "by view" , ma non ho trovato documentazione sufficiente chiara perchè potessi comprenderla.
Sarebbe certamente più comodo dire "se il contenuto è una view e " se si chiama x , carica x " ,ma non mi è riuscito…
Il carattere * lo conosco. In questo caso non mi funziona, ma ho il sospetto che avvenga perchè a monte c'è qualcosa che non va ..

AGGIORNAMENTO

Ho provato ad impostare il tuo codice di esempio...neanche a dire che funziona benissimo..e con * mi prende tutto quello che c'è sotto !
Ho passato ore su pagine trovate sull'argomento senza ricavarne un ragno dal buco...quello che non mi tornava era appunto la mancanza del $path..che infatti tu hai messo ...
era cosi' semplice e non ne ho trovato un esempio che fosse uno...

Che dire...grazie, come sempre!!

Un ultima cosa ziobudda..qualcuno , sempre in una di queste pagine, sconsigliava di usare $_GET['q'] in quanto pare che in determinate situazioni che non ho ben capito quali , possa creare un "loop infinito" . Puo' essere un rischio reale ?

Buona serata
E

Grazie per il suggerimento, utile a distanza di tempo.
Io aggiungerei però:

$alias = drupal_get_path_alias( $_GET['q'] );
$widePath = array( 'chi-siamo','user*' );
if( drupal_match_path( $alias,implode( "\n",$widePath ) ) ) {
...
}