selecteren van nieuwsberichten per jaar

Een board om T&T's te plaatsen m.b.t. CMSMS, PHP of Smarty

Moderator: velden

Post Reply
User avatar
Gregor
Power Poster
Power Poster
Posts: 1874
Joined: Thu Mar 23, 2006 9:25 am
Location: The Netherlands

selecteren van nieuwsberichten per jaar

Post by Gregor »

Op mijn site heb ik sinds 2006 nieuws berichten staan in de vorm van een blog. De site is www.uisge-beathe.eu

Via de de volgende link werd ik op het idee gebracht om de nieuws items per jaar te kunnen laten zien:
http://forum.cmsmadesimple.org/index.php/topic,35465.0.html

Om dit werkend te krijgen, heb ik de volgende aanpassingen/instellingen gedaan:
- Een Summary Template gemaakt, genaamd: summaryperiodtemplate. Deze bevat de volgende code:

Code: Select all

{if !isset($news_start_period)}
   {assign var=news_start_period value='1900-01-01'}
{/if}

{if !isset($news_end_period)}
   {assign var=news_end_period value='2038-12-31'}
{/if}

{if isset($currentdate)}
   {assign var=news_start_period value=$currentdate}
{/if}

<div id="NewsPostDetailPrintLink">
	{$entry->printlink}
</div>

{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') }
<h3>{$entry->postdate|date_format:"%d/%m/%Y"} - {$entry->title}</h3>
{eval var=$entry->content}
{/if}
{/foreach}
Vervolgens heb ik per jaar een pagina gemaakt met de volgende code:

Code: Select all

{* Select your news_start_date formatted as yyyy-mm-dd *} {assign var='news_start_period' value='2009-01-01'}  {* Select your news_end_date formatted  as yyyy-mm-dd *} {assign var='news_end_period' value='2009-12-31'}  {* Call news module *} {news category="logboek" summarytemplate="summaryperiodtemplate" detailtemplate="_dflt" }
Per jaartal heb je dus een pagina met een ander jaartal.

Dit vond ik niet handig en bedacht om dit met Formbuilder te doen, door een drop down te laten zien met jaartallen en daar vervolgens een keuze uit te maken. Het jaartal zou dan als variabele naar een UDT moeten worden doorgegeven. Met veel ondersteuning van Calimer0 is het uiteindelijk niet gelukt om dit met Formbuilder te doen. Hierop deed Calimer) de suggestie om de volgende UDT te maken, genaamd 'archiveyear' met de volgende code:

Code: Select all

//Execute some smarty code to make the archive link
global $gCms;
$smarty = &$gCms->GetSmarty();
$smarty_data = "{cms_selflink href='lbjaar}"; //this is the archive link
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
$archivelink = $_contents;

//Set the first year of archives:
$firstyear=2006;

//Set some variables
$thisyear=date('Y');
//$i=$firstyear;
$i=$thisyear;

echo '<form id="selectyear" method="get" action="' .$archivelink. '" enctype="multipart/form-data"> ';
echo '    <div class="formbuilderform"> ';
echo '<div class="required">';

echo '<label for="year">';
echo 'Logboek van* ';
echo '</label>';
echo '<select id="year" name="year">';
echo '<option value="" selected="selected"> ';
echo ' Selecteer een jaar: ';
echo '</option>';

while ($i >= $firstyear) {
   echo '<option value="' .$i. '">' .$i. '</option>';
   --$i;
}

echo '</select> ';
echo '</div> ';
echo '<div class="submit">';
echo '<input value="Verstuur" type="submit" /> ';
echo '</div> ';
echo '</div> ';
echo '</form> ';



if (!isset($_GET['year']) || $_GET['year'] == "") {
$archiveyear=date('Y');
}
else {
$archiveyear=$_GET['year'];
}

$news_start_period="{$archiveyear}/01/01";
$news_end_period="{$archiveyear}/12/31";

$smarty->assign('archiveyear', $archiveyear);
$smarty->assign('news_start_period', $news_start_period);
$smarty->assign('news_end_period', $news_end_period);
In de aangepaste versie een pagina gemaakt, genaamd 'lbjaar'. Dit is dus de naam van een alias. De code in deze pagina is:

Code: Select all

<h2>{title}</h2>
<br />{archiveyear} {news category="logboek" summarytemplate="summaryperiodtemplate" detailtemplate="_dflt" }
Het resultaat is te zien op http://www.uisge-beatha.eu/Logboek/lbjaar.html
De site is voorzien van pretty url's.

Hoop dat dit voor iemand bruikbaar is en ik ben blij met de ondersteuning die ik via het forum heb mogen krijgen hierbij!

Gregor
Calimer0

Re: selecteren van nieuwsberichten per jaar

Post by Calimer0 »

Een kleine wijziging in de bovenstaande code, zorgt ervoor dat deze UDT ook werkend is met Smarty v3 die op alle nieuwe sites draait.

Code: Select all

$smarty_data = "{cms_selflink href='lbjaar}"; //this is the archive link
$smarty->_compile_source('temporary template', $smarty_data, $_compiled );
@ob_start();
$smarty->_eval('?>' . $_compiled);
$_contents = @ob_get_contents();
@ob_end_clean();
$archivelink = $_contents;
Wordt vervangen door:

Code: Select all

$smarty_data = "{cms_selflink href='lbjaar'}"; //this is the archive link
$archivelink = $smarty->fetch('string:'.$smarty_data);
Een stuk simpeler.. Maar erg noodzakelijk, want de oude code breekt nieuwe sites.
Post Reply

Return to “Tips en Trucs”