SimplePortal

Customization => Blocks and Modifications => Topic started by: Chen Zhen on April 01, 2012, 10:01:58 PM

Title: [Block] Display Frequent Posters for SMF 2.0x using horizontal js pages
Post by: Chen Zhen on April 01, 2012, 10:01:58 PM
Custom PHP block:
Display Frequent Posters for SMF 2.0x using horizontal javascript pages
Submitted upon request.

Adjustable variables/integers are at the top of the block code.

Code: [Select]
/* Display Frequent Posters for SMF 2.0x by Underdog @http://askusaquestion.net */
/* Format: Horizontal javascript pages */
/* v1.1 */

global $smcFunc, $scripturl, $boardurl;

/* Adjust these */
$number_users = 24;
$lang = ' Posts';
$show_posts = 'Show posts from this user';
$show_profile = 'Show the user profile of ';
$none = 'No users selected';
$show_name = true;
$avatar_width = 50;
$avatar_height = 50;
$row_height = 100; /* <-- adjust depending on amount of text shown under avatar */
$user_name_max = 35; /* <-- max chars for user name display */
$per_row = 4;
$rows = 1;
$prev = 'Prev';
$next = 'Next';

/* Do not edit below this line */

$query = '(users.posts > 0 AND is_activated = 1)';
$datum = array( 'id_member', 'posts', 'real_name', 'avatar', 'filename', 'id_attach');
$x = 0;
$count = 0;
$users = array();
$limit = !empty($number_users) ? (int)$number_users : 20;
$cell_width = 100 / (int)$per_row;

$pages = '<script type="text/javascript"><!--
        var pager = new frequentPager("new", '.(int)$rows.');
        pager.init();
        pager.showPageNav("pager", "l8stPagePosition");
        pager.showPage(1);
    //--></script>';

/* Some js to control the pages */
echo '<script type="text/javascript">
function frequentPager(tableName, itemsPerPage) {
    this.tableName = tableName;
    this.itemsPerPage = itemsPerPage;
    this.currentPage = 1;
    this.pages = 0;
    this.initiated = false;
   
    this.showRecords = function(from, to) {       
        var rows = document.getElementById(tableName).rows;
        // i starts from 1 to skip table header row';
echo "
        for (var i = 1; i < rows.length; i++) {
            if (i < from || i > to) 
                rows[i].style.display = 'none';
            else
                rows[i].style.display = '';
        }";
echo '
    }
   
    this.showPage = function(pageNumberFrequent) {
    if (! this.initiated) {
    alert("not initiated");
    return;
    }';
echo "
        var oldPageAnchor = document.getElementById('pg'+this.currentPage);
        oldPageAnchor.className = 'smalltext pg-normal';
       
        this.currentPage = pageNumberFrequent;
        var newPageAnchor = document.getElementById('pg'+this.currentPage);
        newPageAnchor.className = 'largetext pg-selected';
       
        var from = (pageNumberFrequent - 1) * itemsPerPage + 1;
        var to = from + itemsPerPage - 1;
        this.showRecords(from, to);
    }   
   
    this.prev = function() {
        if (this.currentPage > 1)
            this.showPage(this.currentPage - 1);
    }
   
    this.next = function() {
        if (this.currentPage < this.pages) {
            this.showPage(this.currentPage + 1);
        }
    }                       
   
    this.init = function() {
        var rows = document.getElementById(tableName).rows;
        var records = (rows.length - 1);
        this.pages = Math.ceil(records / itemsPerPage);
        this.initiated = true;
    }";
echo '
    this.showPageNav = function(pagerName, positionId) {
    if (! this.initiated) {
    alert("not initiated");
    return;
    }
    var element = document.getElementById(positionId);';
echo "
    var pagerHtml = '<span onclick=";
echo '"';
echo "' + pagerName + '.prev();";
echo '" class="smalltext pg-normal"> « ', $prev, ' </span> | ';
echo "';
        for (var page = 1; page <= this.pages; page++)
            pagerHtml += '<span id=";
echo '"';
echo "pg' + page + '";
echo '" class="smalltext pg-normal" onclick="';
echo "' + pagerName + '.showPage(' + page + ');";
echo '">';
echo "' + page + '</span> | ';
        pagerHtml += '<span onclick=";
echo '"';
echo "'+pagerName+'.next();";
echo '" class="smalltext pg-normal"> ', $next,' »</span>';
echo "';           
       
        element.innerHTML = pagerHtml;
    }
}
function regenerateFrequent()
{
window.location.reload()
}

function regenerateFrequentPosters()
{
if (document.layers)
{
appearFrequent()
setTimeout(";
echo '"window.onresize=regenerateFrequent",450)
}
}

function changeFrequentText(whichcontent)
{
if (document.all||document.getElementById)
{
cross_el=document.getElementById? document.getElementById("descriptions"):document.all.descriptions
cross_el.innerHTML=';
echo "'<div style=";
echo '"font-family:Arial Narrow Bold;font-size:small;">';
echo "'+whichcontent+'</div>'
}
else if (document.layers)
{
document.d1.document.d2.document.write('<div style=";
echo '"font-family:Arial Narrow Bold;font-size:small;">';
echo "'+whichcontent+'</div>')
document.d1.document.d2.document.close()
}

}

function appearFrequent()
{
document.d1.visibility='show'
}
</script>";
/* end of js controller */

$result = $smcFunc['db_query']('', "SELECT users.id_member, users.posts, users.real_name, users.avatar, users.is_activated, att.id_attach, att.filename FROM {db_prefix}members AS users
LEFT JOIN {db_prefix}attachments AS att ON (att.id_member = users.id_member)
WHERE {$query} ORDER BY users.posts DESC LIMIT {$limit}");
while ($val = $smcFunc['db_fetch_assoc']($result))
{                     
foreach ($datum as $data)
{
if (empty($val[$data]))
$val[$data] = false;

$users[$count][$data] = $val[$data];                                               
}
$count++;
}
$smcFunc['db_free_result']($result);
echo '
<script type="text/javascript">
<!--
window.onload=regenerateFrequentPosters
//-->
</script>';
if ($count == 0)
echo '
<div style="text-align:center">', $none, '</div>';
else
{
echo '
<table id ="new" style="width:100%;">
<tr>
<td>&nbsp;</td>
</tr>';
foreach ($users as $user)
{
if ((empty($user['posts'])) || !$user['posts'])
continue;
if ($x == 0)
echo '
<tr>';

$x++;
 
if (!$user['avatar'] && !$user['filename'])
$user['avatar'] = $boardurl . '/avatars/noavatar.gif';
elseif (!$user['avatar'])
$user['avatar'] = $scripturl . '?action=dlattach;attach='.$user['id_attach'].';type=avatar';
elseif (substr($user['avatar'], 0, 4) != 'http')
$user['avatar'] = $boardurl .'/avatars/' . $user['avatar'];

$name = strlen($user['real_name']) >= (int)$user_name_max ? $name = substr($user['real_name'],0,(int)$user_name_max).'...':$user['real_name'];
echo '
<td style="text-align:center;width:'.(int)$cell_width.'%;">
<div style="height:'.$row_height.'px;overflow:hidden;">
<a href="'.$scripturl.'?action=profile;u='.$user['id_member'].'" title="'.$show_profile,$user['real_name'].'">
<img src="'. $user['avatar'] . '" style="max-height:'.$avatar_height.'px;max-width:'.$avatar_width.'px;" alt="" />
</a>
<br />';
if ($show_name)
echo '
<a href="'.$scripturl.'?action=profile;u='.$user['id_member'].'" title="'.$user['real_name'].'">',$name,'</a>
<br />';

echo '
<a href="'.$scripturl.'?action=profile;area=showposts;u='.$user['id_member'].'" title="'.$show_posts.'">', $user['posts'], $lang, '</a>
</div>
</td>';
if ($x > ((int)$per_row -1))
{
$x=0;
echo '
</tr>';
}
}

echo '
</table>';

if (((int)$per_row * (int)$rows) != (int)$number_users)
echo '
<br />
<div id="l8stPagePosition" style="text-align:center;">&nbsp;</div>
<div style="text-align:center;">', $pages, '</div>';
}

Top, Bottom, Header or Footer display is suggested.
Title: Re: Block - Display Frequent Posters for SMF 2.0x using horizontal js pages
Post by: Kryzen on April 02, 2012, 12:40:00 PM
Nice and thanks :)
Title: Re: Block - Display Frequent Posters for SMF 2.0x using horizontal js pages
Post by: nontanun on April 04, 2012, 02:28:16 AM
Thanks :thumbsup:
Title: Re: Block - Display Frequent Posters for SMF 2.0x using horizontal js pages
Post by: pixeleyes on April 05, 2012, 09:40:46 AM
thanks Underdog

Can you add one more option for Monthly base top posters.

Title: Re: Block - Display Frequent Posters for SMF 2.0x using horizontal js pages
Post by: pixeleyes on June 11, 2012, 02:38:17 PM
Again I need your help!

Like above User block I want Staff block.
SimplePortal 2.3.8 © 2008-2024, SimplePortal