Page 1 of 1
Volgende en vorige artikel in CGBlog binnen categorie
Posted: Thu Mar 16, 2017 3:10 pm
by timdebuurman
Hoi,
In de detail sjabloon van CGBlog staat al een mooie code om naar het Vorige en Volgende artikel te gaan.
Ik wil dit echter alleen binnen de huidige categorie doen en standaard gaat hij alle artikelen langs.
Dit is de code:
Code: Select all
{$article_id=$entry->id}
{* find the id of the next viewable blog article (by post date) *}
{cgblog_relative_article article=$article_id dir='next' assign='next_id'}
{if $next_id}
<a class="photonav" href="{module_action_link module=CGBlog action=detail articleid=$next_id urlonly=1}">Vorige foto</a>
{else}
<span class="photonav" href="{module_action_link module=CGBlog action=detail articleid=$next_id urlonly=1}">Vorige foto</span>
{/if}
{* find the id of the prev viewable blog article (by post date) *}
{cgblog_relative_article article=$article_id dir='prev' assign='prev_id'}
{if $prev_id}
<a class="photonav" href="{module_action_link module=CGBlog action=detail articleid=$prev_id urlonly=1}">Volgende foto</a>
{else}
<span class="photonav" href="{module_action_link module=CGBlog action=detail articleid=$prev_id urlonly=1}">Volgende foto</span>
{/if}
Eerst even geprobeerd om 'category=...' toe te voegen, maar dat doet niets.
Iemand een idee?
gr Tim
Re: Volgende en vorige artikel in CGBlog binnen categorie
Posted: Thu Mar 16, 2017 3:17 pm
by Rolf
Een beetje omslachtiger, maar ik *denk* dat het bij deze methode wel werkt:
https://www.cmscanbesimple.org/blog/add ... tail-pages
Ik heb het eens gebruikt bij de Company Directory module en daar werkt het in ieder geval.
Re: Volgende en vorige artikel in CGBlog binnen categorie
Posted: Wed Mar 22, 2017 11:24 am
by Gregor
Binnen mijn site (
http://www.uisge-beatha.eu het ik het ooit op deze manier opgelost:
Code: Select all
<h5>Artikelen binnen dezelfde categorie</h5>
{prev_next pageid=$page_id currid=$entry->id currdate=$entry->postdate}
<div class="prevnext">
{if $cgblog_next_url}<a href="{$cgblog_next_url}"><< Vorig artikel in deze categorie</a> | {/if}
{if $cgblog_prev_url}<a href="{$cgblog_prev_url}">Volgend artikel in deze categorie >></a>{/if }
</div>
Re: Volgende en vorige artikel in CGBlog binnen categorie
Posted: Thu Mar 23, 2017 4:43 pm
by timdebuurman
Hoi Gregor,
Het lijkt er op dat je dan nog een UDT hebt genaamd 'prev_next' waarnaar de tag verwijst?
gr Tim
Re: Volgende en vorige artikel in CGBlog binnen categorie
Posted: Thu Mar 23, 2017 5:04 pm
by Gregor
Wel handig als je die dan ook hebt
Code: Select all
$gCms = cmsms();
$db = cmsms()->GetDb(); // changed this line.
$cgblog = cms_utils::get_module('CGBlog'); // changed this line.
// call from cgblog detail_template: {prev_next pageid=$page_id currid=$entry->id currdate=$entry->postdate}
$pageid = ($_REQUEST['pageid']) ? $_REQUEST['pageid'] : $params['pageid'];
$currid = ($_REQUEST['currid']) ? $_REQUEST['currid'] : $params['currid']; // added this line.
$currdate = $params['currdate'];
if(!$currdate) return;
// call from cgblog detail_template: {prev_next pageid=$page_id currid=$entry->id currdate=$entry->postdate}
// For performance, added an index over two columns on ".cms_db_prefix()."module_cgblog_blog_categories
// get all CGBlog articles sorted by ascending date
$query_next = "
SELECT cgblog_id, cgblog_title
FROM ".cms_db_prefix()."module_cgblog
WHERE cgblog_date > ?
AND status = 'published'
AND (end_time >= CURRENT_DATE OR end_time IS NULL)
AND cgblog_id IN
((SELECT blog_id
FROM ".cms_db_prefix()."module_cgblog_blog_categories
WHERE category_id IN
(SELECT category_id
FROM ".cms_db_prefix()."module_cgblog_blog_categories
WHERE blog_id = ".$currid.")))
ORDER BY cgblog_date
ASC LIMIT 1";
$result_next =& $db->GetRow($query_next,array($currdate));
$query_prev = "
SELECT cgblog_id, cgblog_title
FROM ".cms_db_prefix()."module_cgblog
WHERE cgblog_date < ?
AND status = 'published'
AND (end_time >= CURRENT_DATE OR end_time IS NULL)
AND cgblog_id IN
((SELECT blog_id
FROM ".cms_db_prefix()."module_cgblog_blog_categories
WHERE category_id IN
(SELECT category_id
FROM ".cms_db_prefix()."module_cgblog_blog_categories
WHERE blog_id = ".$currid.")))
ORDER BY cgblog_date
DESC LIMIT 1";
/* //echo "next-p = ";
//echo "$query_prev";
// end of get all CGBlog items */
$result_prev = &$db->GetRow($query_prev,array($currdate));
/* echo "prev = ";
print_r($result_prev); */
//date -> id
if($result_next['cgblog_id']) {
$aliased_title = munge_string_to_url($result_next['cgblog_title']);
$prettyurl = 'logboek/' . $result_next["cgblog_id"] .'/'.$pageid."/$aliased_title";
$next_uri = $cgblog->CreateLink('cntnt01', 'detail', $pageid, '', array('articleid' => $result_next["cgblog_id"]) ,'', true, false, '', true, $prettyurl);
}else{
$next_uri = "";
}
if($result_prev['cgblog_id']) {
$aliased_title = munge_string_to_url($result_prev['cgblog_title']);
$prettyurl = 'logboek/' . $result_prev["cgblog_id"] .'/'.$pageid."/$aliased_title";
$prev_uri = $cgblog->CreateLink('cntnt02', 'detail', $pageid, '', array('articleid' => $result_prev["cgblog_id"]) ,'', true, false, '', true, $prettyurl);
}else{
$prev_uri = "";
}
$smarty->assign('cgblog_next_url', $next_uri);
$smarty->assign('cgblog_next_text', $cgblog->lang("next"));
$smarty->assign('cgblog_prev_url', $prev_uri);
$smarty->assign('cgblog_prev_text', $cgblog->lang("prev"));
Re: Volgende en vorige artikel in CGBlog binnen categorie
Posted: Sat Mar 25, 2017 4:43 pm
by Rolf
Ik gebruik in het sjabloon 2 extra regels zie ik nu:
Code: Select all
{foreach from=$items item=the_entry}
{if $the_entry->hier_id|trim == $currentHIER} <------
{capture append='allIDs'}{$the_entry->id}{/capture}
{capture append='allURLs'}{$the_entry->detail_url}{/capture}
{/if} <------
{/foreach}
Re: Volgende en vorige artikel in CGBlog binnen categorie
Posted: Thu Mar 30, 2017 10:18 am
by timdebuurman
@Gregor
Het is gelukt met je UDT en code, THX
Re: Volgende en vorige artikel in CGBlog binnen categorie
Posted: Thu Mar 30, 2017 10:56 am
by Gregor
Graag gedaan Tim. Misschien wel goed nog even mee te lezen in dit topic
viewtopic.php?f=13&t=76404&p=332673&e=332673 ivm problemen om PHP 7 draaiend te krijgen.