View Full Version : VB Most Viewed Article Widget
subojac
11-29-2010, 10:32 AM
Hey, I need to create a Widget that will display the most view CMS articles in the sidebar. I've tried to use the code here https://vborg.vbsupport.ru/showthread.php?t=240904
ob_start();
// Current Week Most Viewed
$starttime = time() - (3600*24*7);
$mostpopularweek_get = vB::$db->query_read("
SELECT DISTINCT
ca.contentid,
cn.publishdate,
cn.nodeid,
cni.title,
cni.viewcount
FROM
".TABLE_PREFIX."cms_nodecategory cnc
JOIN
".TABLE_PREFIX."cms_node cn
ON
cnc.nodeid = cn.nodeid
JOIN
".TABLE_PREFIX."cms_article ca
ON
cn.contentid = ca.contentid
JOIN
".TABLE_PREFIX."cms_nodeinfo cni
ON
cn.nodeid = cni.nodeid
WHERE
cn.setpublish = 1
AND
cn.publishdate>'".$starttime."'
ORDER BY
cni.viewcount desc LIMIT 5
");
$output_bits = '';
while($article = vB::$db->fetch_array($mostpopularweek_get))
{
$output_bits .='<div class = "cms_widget_post_bit"><h4 class = "cms_widget_post_header">
<a href="content.php?r='.$article[nodeid].'">'.$article[title].'</a></h4></div>';
}
$output = $output_bits;
ob_end_clean();
, but it won't work, don't know if it's because I'm in 4.0.8 and that code also only allows you to show the most popular articles of the week, I need to show the Most Popular Articles of all time from the CMS.
Does anyone have some code for me, not a programmer at all, so I need something I can just cut and paste.
Please help.:confused:
Lynne
11-29-2010, 02:05 PM
If that one is for a week, and you want for all time, you need to remove the part that queries based on the time:
AND
cn.publishdate>'".$starttime."'
subojac
11-29-2010, 06:41 PM
If that one is for a week, and you want for all time, you need to remove the part that queries based on the time:
AND
cn.publishdate>'".$starttime."'
Thanks, but no luck.
Okay, so I've removed the
AND
cn.publishdate>'".$starttime."'
but the widget still comes out blank:confused:, my code now reads like this:
ob_start();
// Current Week Most Viewed
$starttime = time() - (3600*24*7);
$mostpopularweek_get = vB::$db->query_read("
SELECT DISTINCT
ca.contentid,
cn.publishdate,
cn.nodeid,
cni.title,
cni.viewcount
FROM
".TABLE_PREFIX."cms_nodecategory cnc
JOIN
".TABLE_PREFIX."cms_node cn
ON
cnc.nodeid = cn.nodeid
JOIN
".TABLE_PREFIX."cms_article ca
ON
cn.contentid = ca.contentid
JOIN
".TABLE_PREFIX."cms_nodeinfo cni
ON
cn.nodeid = cni.nodeid
WHERE
cn.setpublish = 1
ORDER BY
cni.viewcount desc LIMIT 5
");
I've put the widget on left of http://rekjoubek.com/content/section/11-design.html
to test it.
Could someone please tell me why it still shows nothing. Any help is extremely welcome.
Lynne
11-29-2010, 11:34 PM
Is that all that you put into the widget? If so, you are right - it's not going to work. All you've done is a select statement. You've done nothing with the results at all. You should go download some other widgets from here that query the database and see how they then take the results and spit them out into the widget. (And you should not need to do any ob_start or ob_end type statements.)
edit: Oh, I see you posted all of it in the first post. Still, no ob_stuff needed. Also, the format for class is class="something" No spaces around the equal sign.
subojac
11-30-2010, 08:17 AM
Is that all that you put into the widget? If so, you are right - it's not going to work. All you've done is a select statement. You've done nothing with the results at all. You should go download some other widgets from here that query the database and see how they then take the results and spit them out into the widget. (And you should not need to do any ob_start or ob_end type statements.)
edit: Oh, I see you posted all of it in the first post. Still, no ob_stuff needed. Also, the format for class is class="something" No spaces around the equal sign.
Okay, so added
$output = '';
while($article = vB::$db->fetch_array($mostpopularweek_get))
{
$output .='<div class = "cms_widget_post_bit"><h4 class="cms_widget_post_header"><a href="content.php?r='.$article[nodeid].'">'.$article[title].'</a> </h4></div>';
}
So the code now reads:
$starttime = time() - (3600*24*7);
$mostpopularweek_get = vB::$db->query_read("
SELECT DISTINCT
ca.contentid,
cn.publishdate,
cn.nodeid,
cni.title,
cni.viewcount
FROM
".TABLE_PREFIX."cms_nodecategory cnc
JOIN
".TABLE_PREFIX."cms_node cn
ON
cnc.nodeid = cn.nodeid
JOIN
".TABLE_PREFIX."cms_article ca
ON
cn.contentid = ca.contentid
JOIN
".TABLE_PREFIX."cms_nodeinfo cni
ON
cn.nodeid = cni.nodeid
WHERE
cn.setpublish = 1
ORDER BY
cni.viewcount desc LIMIT 5
");
$output = '';
while($article = vB::$db->fetch_array($mostpopularweek_get))
{
$output .='<div class = "cms_widget_post_bit"><h4 class="cms_widget_post_header"><a rel="nofollow" href="content.php?r='.$article[nodeid].'">'.$article[title].'</a> </h4></div>';
}
But I'm still getting nothing in the widget.
Where do I add class="something" and will that make it work. I have no coding experiance, so I'm totally in the dark.
--------------- Added 1291114050 at 1291114050 ---------------
Okay, rewrote, finally fixed it.
For anyone that wants to show the articles with the highest views of all time in a widget, here's the code.
ob_start();
// Current Week Most Viewed
$mostpopularweekget = vB::$db->query_read("
select ".TABLE_PREFIX."cms_node.nodeid as nodeid, ".TABLE_PREFIX."cms_nodeinfo.title as title FROM ".TABLE_PREFIX."cms_node, ".TABLE_PREFIX."cms_nodeinfo where ".TABLE_PREFIX."cms_node.nodeid = ".TABLE_PREFIX."cms_nodeinfo.nodeid AND ".TABLE_PREFIX."cms_node.setpublish = 1 AND ".TABLE_PREFIX."cms_node.publishdate >'".$starttime."' ORDER BY ".TABLE_PREFIX."cms_nodeinfo.viewcount desc LIMIT 10;
");
$outputbits = '';
while($article = vB::$db->fetch_array($mostpopularweekget))
{
$outputbits .='<div class = "cms_widget_post_bit"><h4 class = "cms_widget_post_header">
<a rel="nofollow" href="content.php?r='.$article[nodeid].'">'.$article[title].'</a> </h4> </div>';
}
$output = $outputbits;
ob_end_clean();
Works like a dream, the limit for the amount of articles you want to show, and add a startime at the top if you want it daily, weekly or monthly.
It's working great for me too!
Do you guys know a way to show the articles only of a few sections?
Many thanks!
Lynne
10-04-2011, 03:49 PM
It's working great for me too!
Do you guys know a way to show the articles only of a few sections?
Many thanks!
You would need to add to the WHERE clause in the query something like AND cms_node.nodeid = x where x is that section. Or AND cms_node.nodeid IN (x,y,z)
Thanks Lynne. But I know nothing about php so I can't do it. Could you help me?
mircea1st
11-30-2011, 10:07 AM
This works perfect , Thanks subojac !!
Can you please tell me i i can add a separator line for titles and a bullet ?
Cheers !
vBulletin® v3.8.12 by vBS, Copyright ©2000-2025, vBulletin Solutions Inc.