Visualizzare Viste e Blocchi nel content della homepage

10 contenuti / 0 new
Ultimo contenuto
Visualizzare Viste e Blocchi nel content della homepage

Ciao ragazzi!
Ho difficoltà nell'apprendere drupal! Non capisco come personalizzare l'homepage e in generale le pagine. Vi spiego il problema:
ho creato una vista che visualizza gli ultimi 3 articoli di un determinato tipo di contenuto; fino a qua tutto bene. Voglio che questa vista (alla quale ho associato un blocco) venga visualizzata solo nella homepage e precisamente nel content! Come faccio? per il momento riesco solo a visualizzarla tramite l'url (il path creato con il modulo views) oppure inserendo il blocco (ma non posso inserirlo nel content).

Altra domanda un po' più generale, come posso dire a drupal di visualizzare nella home solo quello che voglio io e non il content (quello all'interno della variabile

<?php
 
print $content;
?>
)? o meglio, come faccio a modificare il content della homepage?
Pensavo di creare un file ____.tpl.php per gestire l'homepage oppure su page.tpl.php mettere un if che controlla se ci si trova nella homepage oppure no! Cosa mi consigliate?

Grazie!

Ciao,
ci possono essere 2 strade che puoi percorrere: la prima è di utilizzare la proprietà di visibilità specifica per ogni blocco. Se vai sulle impostazioni del blocco, verso la fine, vedrai un campo "Mostra il blocco su pagine specifiche": spunti su mostra solo sulle pagine elencate e nel campo di testo scrive <front> (sta ad indicare la home page).
Il secondo metodo è agire sul template: c'è una varibile che puoi usare su page.tpl.php e che è

<?php
 $is_front
;
?>

e sta ad indicare se la pagina che sto visualizzando è o meno la home page.
;)

Grazie mille per la risposta Gioppy! Sull'impostazione del blocco ho già messo quello che mi dicevi, ma non posso inserire un blocco nel content, posso colo nel content up, content bottom, left e right sidebar, header e footer! Non c'è content, hai capito il mio problema?

Bhe, quello dipende da che template stai usando.
Ad esempio, il template di default di Drupal (Garland) ha la regione contenuto...
Da quello che capisco ti serve aggiungere una regione al template. Per farlo è molto semplice: trova il file .info del template (del tipo nometemplate.info) e aggiungi questa riga:

regions[contenuto] = contenuto

(spiegazione del codice: regions[] sta ad indicare una nuova regione; [contenuto] è il nome della variabile da richiamare poi nel page.tpl.php; = contenuto è il nome - traducibile - che compare nella pagina dei blocchi).

Poi, vai su page.tpl.php e aggiungi

<?php
 
print $contenuto;
?>

nel punto in cui ti serve. Se devi visulizzarlo solo in home page potresti fare una cosa del genere:

<?php
 
if($is_front){
print
$contenuto;
}
 
?>

Salva tutti i file, ricostruisci la cache (bisogna sempre farlo quando modifichi il file .info, altrimenti non vedi le modifiche) e vai sulla pagina d'impostazione dei blocchi e dovresti vedere una nuova regione di nome contenuto.
Attenzione: io ho usato contenuto come nome... non mi sono azzardato a chiamarlo content per evitare casini con il vero $content...
;)

aaaaaaaaaaaaaaaaaaaaaaaaaa giusto! Grazie 1000!
Io sono partito dal tema basic e nel file .info non c'è la regione content! Mi rimane però un dubbio: la variabile

<?php
 
print $content;
?>

da cosa è formata? perchè la regione content non esiste nel mio tema, ma nel page.tpl.php c'è, ed è quello che stampa il contenuto della pagina (es. tutte le pagine dell'amministrazione, gli ultimi articoli inseriti nella homepage, ecc)! Posso impostare anche quello? tipo dirgli che nella homepage non mi visualizzi quello che vuole lui ma quello che voglio io?

gorgoglius wrote:
aaaaaaaaaaaaaaaaaaaaaaaaaa giusto! Grazie 1000!
Io sono partito dal tema basic e nel file .info non c'è la regione content! Mi rimane però un dubbio: la variabile

<?php
 
print $content;
?>

da cosa è formata? perchè la regione content non esiste nel mio tema, ma nel page.tpl.php c'è, ed è quello che stampa il contenuto della pagina (es. tutte le pagine dell'amministrazione, gli ultimi articoli inseriti nella homepage, ecc)! Posso impostare anche quello? tipo dirgli che nella homepage non mi visualizzi quello che vuole lui ma quello che voglio io?


Il $content è una variabile particolare in Drupal e prende molti signifacati, a secondo del posto in cui viene utilizzata. In page.tpl.php sta a signifacare il posto in cui viene stampato il contenuto di un nodo/pagina. In node.tpl.php sta a significare il contenuto del nodo (campi aggiuntivi compresi). In block.tpl.php sta a significare il contenuto del blocco, giusto per farti alcuni esempi!
Se vuoi che $content non sia stampato in home page prova con una cosa del genere:

<?php
 
if($is_front){
print
$contenuto;
}else{
print
$content;
}
?>

In questo caso $content viene stampato solo se non ti trovi nell'home page e $contenuto (la regione fatta precedentemente) viene stampata solo in home page.
;)

good! Gentilissimo!
Per il momento nel page.tpl.php ho messo lo stesso if che mi hai proposto però all'inizio della pagina.. se mi trovo in homepage mi carica un determinato file con la funzione include_once, altrimenti mi carica un altro file sempre con la medesima funzione!
Probabilmente sbaglio atteggiamento, ma non essendo abituato ad utilizzare CMS mi devo ambientare un po' quindi ho scelto questa strada!
In sintesi page.tpl.php ora è cosi:

<?php
if($is_front)    /* homepage */
{
  include_once(
'page_home.php');
}
else            
/* qualsiasi altra pagina */
{
  include_once(
'page_all.php');
}
?>

ultima domanda, lo giuro :) , come chiamo un determinato blocco o una determinata vista tramite codice? avevo visto che esistono delle funzioni apposta, ma non sono riuscito a farle funzionare!

gorgoglius wrote:
good! Gentilissimo!
Per il momento nel page.tpl.php ho messo lo stesso if che mi hai proposto però all'inizio della pagina.. se mi trovo in homepage mi carica un determinato file con la funzione include_once, altrimenti mi carica un altro file sempre con la medesima funzione!
Probabilmente sbaglio atteggiamento, ma non essendo abituato ad utilizzare CMS mi devo ambientare un po' quindi ho scelto questa strada!
In sintesi page.tpl.php ora è cosi:
<?php
if($is_front)    /* homepage */
{
  include_once(
'page_home.php');
}
else            
/* qualsiasi altra pagina */
{
  include_once(
'page_all.php');
}
?>

ultima domanda, lo giuro :) , come chiamo un determinato blocco o una determinata vista tramite codice? avevo visto che esistono delle funzioni apposta, ma non sono riuscito a farle funzionare!

Come tu stesso dici, l'approccio a Drupal è molto particolare: il codice che hai inserito non andrebbe molto bene, in quanto non è mantenibile come cosa. Prova a pensare a Drupal come un framework piuttosto che come un CMS: in questo caso, sarebbe meglio realizzare un modulo per fare quello che devi fare (non è una cosa semplice realizzare un modulo, ma neanche complessa... comincia, comunque, con piccoli passi e vedrai che piano piano arriverai a soluzioni sempre più efficienti!).

Se vuoi richiamare, via php, una vista all'interno del template oppure all'interno di un modulo puoi utilizzare queste funzioni:

<?php
 $view
= views_get_view('NOME_VISTA');
$display $view->execute_display('VISUALIZZAZIONE', array());
print
$display['content'];
?>

Breve spiegazione:
Istanziamo una vista con $view; la funzione view_get_view accetta un parametro di tipo string e deve contere il nome della vista che vuoi richiamare (attenzione, per nome intendo il machine name che dai alla vista al momento della creazione).Successivamente, impostiamo il tipo di visualizzazione con $display: la funzione execute_display accetta due parametri: il nome della visualizzazione (di tipo stringa - può essere default, page_1, block_1, ecc) e un array contenente gli argomenti della vista, se ce ne sono (attenzione: passare sempre un array, anche che la vista non ha argomenti). Infine, stampiamo il contenuto della nostra vista con $display['content'].
Richimare un blocco all'interno del template (a meno che il blocco non sia una vista) non saprei... io di solito lavoro con le regioni: molto più semplice da gestire (soprattutto se la gestione dei blocchi la deve fare il cliente che non sa cosa sia php!) e molto più semplice da mantenere!
;)

esiste un modulo che ti permette di togliere il contenuto in prima pagina e quindi lasciare solo i blocchi nel contenuto centrale
crea una pagina vuota
http://drupal.org/project/empty_page
se invece vuoi inserire un blocco in un nodo puoi scegliere Block Reference che ti crea un nuovo campo per qualsiasi tipo di contenuto(CCK field type 'Block Reference')
http://drupal.org/project/blockreference

ho creato una nuova regione e messo ripristinato page.tpl.php. Ho messo l'if all'interno del div content-area in maniera tale da caricare la regione nuova se sono in homepage e il classico content in tutti gli altri casi!

Grazie a tutti!