home page ed elenco notizie per categoria
Salve a tutti,
vorrei nella mia home page visualizzare una serie di contenuti nel modo seguente:
- una parte di notizie sempre in cima (diciamo 2 notizie)
- un'altra parte di notizie chiamate per esempio ultim'ora (diciamo altre 2 notizie)
- un'altra serie di notizie chiamate in primo piano (diaciamo 10)
In pratica il primo punto dovrebbe uscire impostando lo 'sticky' sulle notizie che interessano,
per gli altri due punti invece ho paura che devo smanettare in php oppure avrei bisogno di un modulo che non saprei proprio come trovare.
Avete una qualche idea ?
Inoltre vorrei rendere + flessibile la descrizione abbreviata che viene visualizzata nelle pagine di indice delle categorie.
Posso solo impostare il numero di caratteri per il troncamento, se in quel troncamento non vengono chiusi alcuni tag, il layout va a farsi friggere.
Vorrei avere un ulteriore campo da inserire nel tipo di contenuto (descrizione abbreviata) e da visualizzare nelle pagine index delle categorie.
Avevo pensato di usare un campo personalizzato di CCK ma qui mi fermo, non saprei come dire a drupal di inserirlo nella pagina di indice.
Altro dubbio, è possibilemettere l'elenco delle news in una tabella ?
Per risparmiare spazio mi piacerebbe mettere le news a coppie una di fianco all'altra, coi div sembra un po' complicato.
Scusate ma mi sono scordato di dire che uso drupal 5.1.
grazie a chiunque voglia rispondermi
ciao, ciao
Daniele

Risposte
cck è un punto di
cck è un punto di partenza... poi con views fai tutto quello che ti pare... e anche di più :-)
Ottimo
Veramente un bel modulo, devo giocarci un po' e farci esperienza, se ho problemi disturberò ancora ...
grazie mille !!
Ancora sul modulo views ...
Ho creato la mia home page con tre blocchi nella parte di contenuto,
- news fisse (blocco di 2 teaser)
- ult'im'ora (blocco di 2 teaser)
- in primo piano (blocco di 10 teaser)
Vorrei che ogni contenuto fosse diviso in due colonne.
Dal codice che genera views ( ) non riesco a creare le news della stessa riga alte uguali.
Mi basterebbe creare delle tabelle ma non riesco a capire come farlo.
Views di crea del codice per le liste, ma non riesco a trasformarlo in celle di una tabella.
Ho provato con panels, ma la struttura a colonne riguarda l'intera pagina, non i singoli blocchi, ovvero posso incolonnare nella colonna di destra le news fisse e in quella di sinistra l'ultim'ora ecc.
Probabilmente ci sono quasi ma non riesco a crearmi il template corretto.
Ho cercato a destra e a manca ma non ho trovato qualcosa che faccia al caso mio.
per avere un'idea di quello che voglio rappresentare, guardate questo link: http://www.almalaurea.it/info/almanews/
ciao e grazie in anticipo,
Daniele
Potresti provare col
Potresti provare col seguente modulo:
http://drupal.org/project/nodeasblock
Permette di creare nodi da usare poi come blocchi... quindi puoi facilmente fare un file .tpl per questi tipi di nodi.
Facci sapere.
Il modulo effettivamente è
Il modulo effettivamente è carino, però non è proprio quello che cerco.
Vorrei capire come poter modificare la struttura nei blocchi.
Cioè, invece di inserire
<ul><li>ecc. vorrei mettere una tabella<table><tr><td>ecc.La funzione di views che sovrascrivo è:
views_view_list, che nel mio template.php diventa:<nomeTemplate>_views_view_list_<nomeBlocco>Il codice completo della funzione è il seguente (suggerito dal wizard di views):
function <nomeTemplate>_views_view_list_<nomeBlocco>($view, $nodes, $type) {
$fields = _views_get_fields();
$taken = array();
// Set up the fields in nicely named chunks.
foreach ($view->field as $id => $field) {
$field_name = $field['field'];
if (isset($taken[$field_name])) {
$field_name = $field['queryname'];
}
$taken[$field_name] = true;
$field_names[$id] = $field_name;
}
// Set up some variables that won't change.
$base_vars = array(
'view' => $view,
'view_type' => $type,
);
foreach ($nodes as $i => $node) {
$vars = $base_vars;
$vars['node'] = $node;
$vars['count'] = $i;
$vars['stripe'] = $i % 2 ? 'even' : 'odd';
foreach ($view->field as $id => $field) {
$name = $field_names[$id];
$vars[$name] = views_theme_field('views_handle_field', $field['queryname'], $fields, $field, $node, $view);
if (isset($field['label'])) {
$vars[$name . '_label'] = $field['label'];
}
}
$items[] = _phptemplate_callback('views-list-<nomeBlocco>', $vars);
}
if ($items) {
return theme('item_list', $items);
}
}
Immagino che sia la funzione theme() a fare tutto, io vorrei richiamare o sovrascrivere (se è possibile nel template.php) una funzione che mi metta i nodi dentro delle celle di una tabella.
Però non ho ancora capito se posso sovrascrivere questa funzione, ma il problema + grosso è:
quale funzione ?
theme_views_view_list($view, $nodes, $type) ?theme_views_view_teasers($view, $nodes, $type) ?
theme_views_view_nodes($view, $nodes, $type, $teasers = false, $links = true)
views_theme('<xxxx>', $view, $nodes, $type, true)
theme_views_view_table($view, $nodes, $type) ? [mi mette i nodi per riga, non in una singola cella]
Sono un programmatore, non PHP, ma penso di capirci qualcosa, ho guardato un po' il views.module, ma non sono riuscito a trovare una soluzione.
Continuo la ricerca, se trovo qualche soluzione la posto ....
ciao e grazie a tutti,
Daniele
Sono riuscito a risolvere il
Sono riuscito a risolvere il problema della visualizzazione della home page in blocchi di news da 2 colonne.
Come avevo scritto in precedenza c'ero vicino alla soluzione ma mi sfuggiva una cosa:
LE FUNZIONI 'THEMEABLE' DI DRUPAL: http://api.drupal.org/api/5/group/themeable
Una di queste è:
theme_item_listche è quella che richiama la funzione creata dal wizard di views.I casi quindi erano 2 o sovrascrivere la theme_item_list e quindi ogni lista ora veniva creata come una tabella, oppure crearne una nuova e richiamare questa nuova nella funzione creata da views solo per quel blocco di views.
In entrambi i casi bisogna farlo su template.php un file che deve stare nella directory in cui sono presenti tutti i template di personalizzazione del nostro sito: .../site/.../themes//
Tutto questo è valido per chi usa phpTemplate come motore per la personalizzazione del sito.
Il codice della funzione se può essere utile per qualcuno lo riporto qui sotto ed evidenzio solo le modifiche effettuate con i delimitatori (-: :-):
<?php
function <nomeTemplate>_item_list($items = array(), $title = NULL, $type = '(-:table:-)', $attributes = NULL) {
$output = '<div class="item-list">';
if (isset($title)) {
$output .= '<h3>'. $title .'</h3>';
}
if (!empty($items)) {
$output .= "<$type" . drupal_attributes($attributes) . '>';
(-: $i = 0; :-)
foreach ($items as $item) {
$attributes = array();
$children = array();
if (is_array($item)) {
foreach ($item as $key => $value) {
if ($key == 'data') {
$data = $value;
}
elseif ($key == 'children') {
$children = $value;
}
else {
$attributes[$key] = $value;
}
}
}
else {
$data = $item;
}
if (count($children) > 0) {
$data .= almanews_item_list($children, NULL, $type, $attributes); // Render nested list
}
(-: $i % 2 ? $output .='' : $output .='<tr>'; :-)
(-: $output .= '<td' . drupal_attributes($attributes) . '>'. $data .'</td>'; :-)
(-: $i % 2 ? $output .='</tr>' : $output .=''; :-)
(-: $i++; :-)
}
$output .= "</$type>";
}
$output .= '</div>';
return $output;
}
?>
Spero che sia utile, comunque se qualcuno volesse sapere di preciso quali moduli ho utilizzato e come ho configurato il tutto posso essere più preciso ...
saluti,
Daniele
Ciao, Daniele, sarei molto
Ciao,
Daniele, sarei molto interessato alla tua soluzione! Se puoi contattarmi anche in privato, la mia email è ale_tommasi @ libero.it
Alessandro
Ciao, vorrei avere nel
Ciao,
vorrei avere nel contenuto della pagina tre blocchi come quelli da te proposti disposti in due colonne ultima ora e news e in un altro blocco sotto altre news. Quali sono i moduli da utlizzare e come posso realizzare il tutto?
Grazie mille
Alessandro
Iniziamo ...
Non so se ci sono altri metodi, io ho trovato questo un po' comlesso, ma efficace.
I moduli che ho utilizzato sono:
- CCK per creare pagine di inserimento contenuti personalizzati (per i redattori) (i miei redattori possono inserire solo un titolo, un'immagine, la categoria di appatenenza della news, e la descrizione della news in formato HTML filtrato)
- VIEWS per creare i blocchi da inserire nella home page
- FRONT_PAGE per la personalizzazione della home page (forse si riesce con lo stesso views, ma io non sono riuscito)
- TinyMCE per facilitare l'inseriento di codice HTML da parte dei redattori nei contenuti
Prima di tutto, devi leggerti un po' di documentazione soprattutto dei moduli CCK [http://drupal.org/node/101723] e VIEWS [http://drupal.org/node/109604] sul sito ufficiale se non li conosci già.
- CATEGORIE
Devi creare le categorie delle news, per esempio lavoro, università, rassegna stampa, comunicati stampa e soprattutto: visualizzazione in prima pagina.
come lista di elementi di visualizzazione in prima pagina ho creato ultim'ora, altre news, in primo piano.
Per ognuna di queste categorie ho creato una VIEWS di tipo blocco e ogni blocco l'ho inserito (tramite l'interfaccia drupal blocchi) nell'ordine corretto e con la condizione visualizza solo nelle pagine elencate: front_page.
Ho messo un po' di carne al fuoco, non so che livello di conoscenza hai di drupal, quindi per il momento mi fermo qui, pronto per le tue domandee alla prossima puntata.
ciao,
Daniele
Il mio problema purtroppo è
Il mio problema purtroppo è il fatto di non saper usare CCK e VIEWS, il mio inglese è a dir poco scarso, il mio tema non ha il file template.php dove inserire il codice generato da views, ma solo page.tpl.php e gli altri file tpl che fanno parte del tema. Se ho capito bene è necessario inserire il codice generato da theme wizard, esatto?
Esatto
Non è semplice spiegare in poche righe il funzionamento di due moduli così complessi, però ci proverò.
Se non devi creare un 'nodo' ad hoc e ti basta quello predefinito, allora passiamo subito alla visualizzazione con VIEWS.
Crea una nuova VIEWS, dalle un nome (es. BloccoUltimOra) inserisci solo i campi del nodo che vuoi visualizzare (per esempio titolo e descrizione abbreviata) nel blocco, e filtra la VIEWS in base alla categoria ultimOra che dovresti aver creato in precedenza.
Drupal ti mostrerà una lista di contenuti, tra tag
Noi dobbiamo trasformare la funzione che crea la lista con una che crea una struttura tabellare a 2 colonne.
E qui arriviamo al punto.
Nel file template.php in site/www.tuominisito.com (se non c'è crealo o copialo da un theme di default per es.:/themese/garland) dovrai creare una nuova funzione che sostituisce quella predefinita.
Prima di tutto ti copi il codice che ti dà VIEWS che sarà la funzione:
function <theme>_views_view_list_BloccoUltimOra($view, $nodes, $type) {Poi creati una funzione che lista i contenuti su 2 colonne (come quella che ho inserito sopra), per esempio io l'ho fatta così:
function almanews_listInTable2Cols($items = array(), $title = NULL, $type = 'table', $attributes = NULL) {
$output = '<div class="item-list">';
if (isset($title)) {
$output .= '<h3>'. $title .'</h3>';
}
if (!empty($items)) {
$output .= "<$type" . drupal_attributes($attributes) . '>';
$i = 0;
foreach ($items as $item) {
$attributes = array();
$children = array();
if (is_array($item)) {
foreach ($item as $key => $value) {
if ($key == 'data') {
$data = $value;
}
elseif ($key == 'children') {
$children = $value;
}
else {
$attributes[$key] = $value;
}
}
}
else {
$data = $item;
}
if (count($children) > 0) {
$data .= almanews_item_list($children, NULL, $type, $attributes); // Render nested list
}
$i % 2 ? $output .='' : $output .='<tr>';
$output .= '<td' . drupal_attributes($attributes) . '>'. $data .'</td>';
$i % 2 ? $output .='</tr>' : $output .='';
$i++;
}
$output .= "</$type>";
}
$output .= '</div>';
return $output;
}
Creandone una nuova non sovrascrivi le funzioni vecchie e non rischi che altre liste vengano visualizzate in tabelle di 2 colonne.
In più nella funzione che hai incollato dal theme wizard di VIEWS devi modificare la riga seguente:
return theme('item-list', $items);in
return theme('listInTable2Cols', $items);
ovvero con il nome della funzione appena creata.
Il theme wizard di VIEWS ti dice di creare inoltre un altro file dal nome per es. :views-list-BloccoUltimOra.tpl.php
dove inserirai i valori dei vari campi che ti interessano.
Per sicurezza cancella la cache di VIEWS in tools.
Ora VIEWS ti mostrerà un blocco ultimOra con i campi che tu hai richiesto creando una lista in base alla funzione listInTable2Cols.
Non so se sono stato chiaro, ma non è semplice spiegare tutto il meccanismo, comunque se hai domande, io sono qui ...
alla prossima puntata
Ho seguito alla lettera, ma
Ho seguito alla lettera, ma non succede nulla, rimane tutto invariato.
sta per il nome del tema che utilizzo io? Di default vievw inserisce phptemplate.Alla funzione
_views_view_list_BloccoUltimOra($view, $nodes, $type) {
Il file views-list-BloccoUltimOra.tpl.php l'ho lasciato invariato, praticamente non c'è scritto nulla dato che è tutto commentato. E' qui l'errore?
esatto!
devi sostituire phptemplate con il nome del tema che usi, ovvero la directory in cui salvi i vari template.php, blocco....tpl.php ecc.
In pratica, il nome della funzione deve essere:
<nomeTemplate>_views_view_<nomeDellaView>.Controlla che non sia da sostituire anche in altri punti, se devo dire la verità non ricordo di preciso,
Ciao,
Daniele
Ci siamo!
Ce l'ho fatta, ha funzionato! vorrei capire che tipo di modifiche fare nel file views-list-BloccoUltimOra.tpl.php
Ottimo, proseguiamo allora ...
Dipende da cosa vuoi far vedere nel "box" della singola notizia, quali campi, quale stile.
Views, nel commento nella prima parte del template (cioè il tpl.php), ti dà un elenco di variabili PHP che puoi utilizzare per personalizzare il box della singola notizia.
Siamo dentro una cella, io per esempio utilizzo un ulteriore 'div' e stampo i campi che mi interessano.
Per esempio, se volessi che nel box venga visualizzato il titolo, la categoria e un contenuto accorciato basta che inserisci le variabili dei campi esportati da VIEWS.
Se VIEWS ti esporta le variabili (chiaramente ti esporta SOLO le variabili che hai impostato nella VIEW stessa):
$node_title, $field_descabbr_value, $created, $name, allora potresti pensare di mettere il titolo, la sua descrizione abbreviata, a quale categoria appartiene e quando è stato creato per esempio nel modo seguente:
<div class="node">
<h2 class="titolo_news"><?php print $node_title ?></h2>
<div class="content">
<div class="descabbr">
<?php print $field_descabbr_value ?>
</div>
</div>
<?php if($name !== ''){ print '<span class="taxonomy">Categorie: ' . $name . '</span>';} ?>
<span class="submitted"><?php print $created ?></span>
<!-- per i commenti -->
<?php if ($links) { ?><div class="links">» <?php print $links ?></div><?php }; ?>
</div>
La struttura la crei tu come meglio credi,come vedi è un template di HTML e PHP se non hai un'idea precisa puoi prendere spunto dal file node.tpl.php.
Anche gli stili (tag,classi) li puoi inventare tu, se prendi quelli di default (nel node.tpl.php per es.) devi modificare lo stile predefinito di rupal, altrimenti ti crei il tuo css, come più ti piace.
Spero di essere stato chiaro,
a presto,
Daniele
Grazie
Grazie mille per il tuo aiuto Daniele, sei stato gentilissimo e davvero molto disponibile.
Mi sei stato davvero molto d'aiuto.
Alessandro