Modulo News - elencarle aggregate per anno di pubblicazione

La discussione sul CMS Made Simple in italiano.

Moderator: magallo

Post Reply
valeriop@
Forum Members
Forum Members
Posts: 51
Joined: Tue May 12, 2009 5:57 pm
Location: Perugia

Modulo News - elencarle aggregate per anno di pubblicazione

Post by valeriop@ »

Salve a tutti.
Ho le mie news tutte nella categoria "General".
Vorrei creare una sezione "Archivio News" che presenti un elenco di anni e, cliccandoci sopra, mi porti all'elenco delle news di quell'anno.

Qualcosa del tipo:
Archivio News
- 2011
- 2010
- 2009

Pensavo di modificare il modello sommario e filtrare nel ciclo le date che mi servono.

C'è qualche parametro che mi può aiutare?

Grazie a tutti, Valerio
wich
Forum Members
Forum Members
Posts: 31
Joined: Sun Mar 27, 2011 9:22 pm
Location: Italy

Re: Modulo News - elencarle aggregate per anno di pubblicazi

Post by wich »

Secondo me per risolvere il tuo problema potresti percorrere diverse strade:

1. Invece di usare un unica categoria potresti creare più categorie, una per anno: 2011, 2010, 2009, ecc...
In questo modo nella pagina puoi richiamare un sommario con l'elenco degli anni usando il parametro browsecat.
Non è elegante ma potrebbe funzionare!

2. Il modulo CGBlog, anche se è studiato per creare un blog, supporta nativamente la funzionalità Archive View Templates... potresti usare questo modulo per la gestione delle news.

3. Cerca nel forum "news summary by year"... ci sono dei post che affrontano il problema con UDT e/o modifiche al codice del modulo news. Ad esempio:
http://forum.cmsmadesimple.org/viewtopi ... =6&t=23969
http://forum.cmsmadesimple.org/viewtopi ... 28&t=35429
Anche se personalmente ti sconsiglio di apportare modifiche ai file dei moduli: è pericoloso se non sai esattamente dove mettere le mani, se hai un problema il devteam non ti può aiutare, e in caso di aggiornamento della versione del modulo le tue personalizzazioni saranno sovrascritte.

E' un problema che non mi si è mai presentato ma mi interessa: prova a postare qualcosa nelle discussioni internazionali (in inglese) e tieni aggiornata la community italiana degli sviluppi.
User avatar
blast2007
Power Poster
Power Poster
Posts: 508
Joined: Wed Aug 01, 2007 5:36 pm

Re: Modulo News - elencarle aggregate per anno di pubblicazi

Post by blast2007 »

Ciao a tutti.
Vorrei dare il mio piccolo contributo alla discussione, illustrandovi come ho risolto il problema. Inizialmente avevo messo mano al codice, ma non riuscendo a far integrare la modifica nel core, ho cercato un sistema alternativo.

Facciamo un esempio pratico: visualizzare solo le news del 2011.

Creiamo una pagina (Ad es. "news anno 2011") contenente il seguente codice:

Code: Select all

{assign var='news_start_period' value='2011-01-01'}
{assign var='news_end_period' value='2011-12-31'} 
{news summarytemplate="summary_storico" detailtemplate="quello_che_vuoi" category="Generali"}
Dopodichè creiamo il modello di summary news ossia "summary_storico"

Code: Select all

...
{foreach from=$items item=entry}
{if ($entry->postdate|date_format:'%F' >= $news_start_period|date_format:'%F') && ($entry->postdate|date_format:'%F' <= $news_end_period|date_format:'%F') }
<div class="NewsSummary">
		<strong>{$entry->postdate|date_format:"%d/%m/%Y"}</strong> {$entry->titlelink}
</div>
{/if}
{/foreach}
...
Con questo accorgimento verranno visualizzate solo le news pubblicate nell'anno 2011. Ovviamente basterà creare una pagina per anno per poter avere tutte le news suddivise correttamente.

Spero possa esserti utile.
Ciao
blast
nervino
Power Poster
Power Poster
Posts: 448
Joined: Sun Dec 28, 2008 12:15 pm
Location: Roma, Italy

Re: Modulo News - elencarle aggregate per anno di pubblicazi

Post by nervino »

C'è un post dell'utente Peciura che mostra come creare una suddivisione anno/mese per le news (http://forum.cmsmadesimple.org/viewtopi ... 1&start=15); ho provato a seguire le istruzioni ma ci deve essere qualche problema perché non mi funziona tutto correttamente.
È probabile che dipenda dal fatto che il post è precedente alla versione di cmsms che sto usando 1.10.1.

Personalmente sono passato a CGBlog per la gestione delle News. Il modulo è pressoché identico a quello delle News ma ha molte altre opzioni e funzioni.

Se interessa, ho manipolato i template di CGBlog per ottenere un menu del tipo:

2011
novembre (2)
giugno (1)

2010
ottobre (3)
settembre (5)

ecc.
velumax
New Member
New Member
Posts: 4
Joined: Tue Oct 18, 2011 1:53 pm

Re: Modulo News - elencarle aggregate per anno di pubblicazi

Post by velumax »

Mi interessa eccome!!!!!
Mi spieghi come fare????
grazie
nervino
Power Poster
Power Poster
Posts: 448
Joined: Sun Dec 28, 2008 12:15 pm
Location: Roma, Italy

Re: Modulo News - elencarle aggregate per anno di pubblicazi

Post by nervino »

Io ho usato anche JQuery per creare l'effetto "EXPAND/COLLAPSE" (Vedi: http://viralpatel.net/blogs/2009/09/cre ... query.html).
Se non ti serve, rimuovilo.
Lascio anche alcuni stili CSS di prova che avevo usato..

CODICE da inserire nel Template "Archive" di CGBlog (TAB: Archive View Templates) o anche nel corpo della pagina (ma in questo caso bisogna catturare CGBlog: {capture}{CGBlog}{/capture}).
Per conoscere ed evidenziare la coppia Anno/Mese selezionata dall'utente, dal menu dell'archivio, è necessario catturare il CONTENT della pagina, anche nel template "Archivio", perché quando si passa al sommario e al dettaglio l'informazione viene persa.

Code: Select all

{* Catturo il CONTENT per sapere quale anno/mese è stato selezionato dal menu *}
{capture}{content}{/capture}

{foreach from=$archivelist item=y name=yearmonths}
{if $y.year != $lastused_year}
     {if $smarty.foreach.yearmonths.first}
     <ul id="accordion">
     {else}
     </ul></li>
     {/if} 

     {if $param_year == $y.year}
     <li class="year_active"><div>{$y.year}</div><ul>
     {else}
     <li class="year"><div>{$y.year}</div><ul>
     {/if}
{/if}

{if $y.month != $lastused_month}
     {if $param_month == $y.month}
     <li class="month_active"><a href="{$y.summary_url}">
     {$y.datestamp|date_format:"%b"} ({$y.count})</a></li>
     {else}
     <li class="month"><a href="{$y.summary_url}">{$y.datestamp|date_format:"%b"} ({$y.count})</a></li>
     {/if}
{/if}

{assign var='lastused_month' value=$y.month}
{assign var='lastused_year' value=$y.year}

{if $smarty.foreach.yearmonths.last}
</ul>
{/if} 
{/foreach}
****************************************
JQUERY
Per ottenere il menu "espandibile" delle NEWS (CGBlog), nel template della pagina richiamare innanzitutto le librerie JQuery (con il TAG nell'head {cms_jquery}),
quindi inserire lo script dopo il richiamo di CGBlog.

Esempio:
<div id="menu">
{CGBlog action='archive'}
</div>

{literal}
<__script__>
$("#accordion > li > div").click(function(){

if(false == $(this).next().is(':visible')) {
$('#accordion ul').slideUp(300);
}
$(this).next().slideToggle(300);
});
if(false == $("#accordion ul").is(':visible')) {
$('#accordion ul:eq(0)').show(); // Primo livello visibile solo se non ce ne sono altri già aperti
}
</__script>
{/literal}
****************************************
Template "Sommario"

Code: Select all

{foreach from=$archivelist item=y}
{if $y.year != $lastused_year}

{* Catturo il CONTENT per sapere quale anno/mese è stato selezionato dal menu *}
{capture}{content}{/capture}

{if $param_year == $y.year}
<h2 style="color: yellow; font-weight: bold;">{$y.year}</h2>
{else}
<h2 style="color: red; font-weight: bold;">{$y.year}</h2>
{/if}

{/if}
{if $y.month != $lastused_month}

{if $param_month == $y.month}
<h2><a href="{$y.summary_url}"">{$y.datestamp|date_format:"%B"}</a> ({$y.count})</h2>
{else}
<h2><a href="{$y.summary_url}" style="color: green; font-weight: bold;">{$y.datestamp|date_format:"%B"}</a> ({$y.count})</h2>
   {/if}      
          {/if}{assign var='lastused_month' value=$y.month}

{assign var='lastused_year' value=$y.year}
{/foreach}
****************************************
Template "Dettaglio"

Nel template dettaglio non è possibile catturare il CONTENT della pagina perché manda in crash l'applicazione.
Per mantenere traccia della coppia Anno/Mese selezionata dall'utente, ed usare l'informazione per evidenziarla nel menu dell'archivio, va catturato il postdate ed estratto l'anno ed il mese

Code: Select all

{* CATTURO ANNO e MESE e li assegno alle variabili usate nel template dell'archivio *}
{assign  var="param_year" value=$entry->postdate|cms_date_format:'%Y'}
{assign  var="param_month" value=$entry->postdate|cms_date_format:'%m'}
{* set a canonical variable that can be used in the head section if process_whole_template is false in the config.php *}
{if isset($entry->canonical)}
  {assign var='canonical' value=$entry->canonical}
{/if}

{if $entry->postdate}
	<div id="CGBlogPostDetailDate">
		{$entry->postdate|cms_date_format}
	</div>
{/if}
<h3 id="CGBlogPostDetailTitle">{$entry->title|escape}</h3>

<hr id="CGBlogPostDetailHorizRule" />

{if $entry->summary}
	<div id="CGBlogPostDetailSummary">
		<strong>
			{eval var=$entry->summary}
		</strong>
	</div>
{/if}


{if $entry->categories}
<div class="CGBlogSummaryCategory">
{strip}{$category_label}
 {foreach from=$entry->categories item='category'}
   {$category.name} 
 {/foreach}
{/strip}
</div>
{/if}

{if $entry->author}
	<div id="CGBlogPostDetailAuthor">
		{$author_label} {$entry->author}
	</div>
{/if}

<div id="CGBlogPostDetailContent">
	{eval var=$entry->content}
</div>

{if $entry->extra}
	<div id="CGBlogPostDetailExtra">
		{$extra_label} {$entry->extra}
	</div>
{/if}

{if isset($entry->fields)}
  {foreach from=$entry->fields item='field'}
     <div class="CGBlogDetailField">
        {if $field->type == 'file'}
	  {* this template assumes that every file uploaded is an image of some sort, because CGBlog doesn't distinguish *}
          <img src="{$entry->file_location}/{$field->value}"/>
        {else}
          {$field->name}: {eval var=$field->value}
        {/if}
     </div>
  {/foreach}
{/if}
****************************************
Nota: il commento

Code: Select all

{* this template assumes that every file uploaded is an image of some sort, because CGBlog doesn't distinguish *}
credo sia obsoleto. CGBlog distingue "file" e "immagini"; quindi se usi una immagine puoi scrivere:

Code: Select all

{if $field->type == 'image'}
Mi sembra tutto..

Ciao
velumax
New Member
New Member
Posts: 4
Joined: Tue Oct 18, 2011 1:53 pm

Re: Modulo News - elencarle aggregate per anno di pubblicazi

Post by velumax »

Sei stato eccezionale, ma per le mie conoscenze mi pare molto difficile: ci provero' grazie ancora!!
max
Post Reply

Return to “Italian - Italiano”