View Single Post
  #4  
Old 06-12-2004, 01:16 AM
Velocd's Avatar
Velocd Velocd is offline
 
Join Date: Mar 2002
Location: CA University
Posts: 1,696
Благодарил(а): 0 раз(а)
Поблагодарили: 0 раз(а) в 0 сообщениях
Default

A quick reminder first.

globalize() automatically casts the variables you pass it with the type from the keyword.

e.g.

PHP Code:
'pagenumber' => INT 
So there is no reason afterwords to use intval().

The following chunk of code is from my vBulletin Member Album hack. It has a page browse system, and also sorting options, like DESC or ASC, by username, etc.

You should be able to use this script as a guideline for making yours work:

PHP Code:
$perpage $vboptions['album_perpage'];
$pertr   $vboptions['album_pertr'];

globalize($_GET, array(
    
'sort' => STR,
    
'order' => STR,
    
'ltr' => STR,
    
'page' => INT
));



// Verify arguments
///////////////////////



$type $_REQUEST['type'] ? $_REQUEST['type'] : 1;
        
if (
$sort)
{
    
$valid_sort = array(
        
'posts',
        
'joindate',
        
'dateline',
        
'username'
    
);
            
    if (!
in_array($sort$valid_sort))
        
$sort 'posts';
}
else
{
    
$sort 'posts';
}
        
if (
$order)
{
    
$valid_order = array(
        
'desc',
        
'asc'
    
);
            
    if (!
in_array($order$valid_order))
        
$order 'desc';
}
else
{
    
$order 'desc';
}



// Build letter list
////////////////////////



$currentletter '#';
$linkletter urlencode('#');
    
eval(
'$letterbits = "' fetch_template('album_letter') . '";');

for (
$i=65$i 91$i++)
{
    
$currentletter chr($i);
    
$linkletter = &$currentletter;
    
$show['selectedletter'] = iif($ltr == $currentlettertruefalse);
    
    eval(
'$letterbits .= "' fetch_template('album_letter') . '";');
}

if (
$ltr != '')
{
    if (
$ltr == '#')
    {
        
$condition " AND username NOT REGEXP(\"^[a-zA-Z]\")";
    }
    else
    {
        
$ltr chr(intval(ord($ltr)));
        
$condition ' AND username LIKE("' addslashes_like($ltr) . '%")';
    }
    
    
$leftjoin " LEFT JOIN ".TABLE_PREFIX."user USING (userid)";
}



// Query: count rows
////////////////////////



$result $DB_site->query_first("
    SELECT COUNT(*) AS count 
    FROM "
.TABLE_PREFIX."".($type == 'usertextfield' 'customprofilepic')."$leftjoin 
    WHERE "
.($type == "signature!=''" 'visible=1')."$condition
"
);



// Build page scope
///////////////////////



$pagenumber $page $page 1;

$rows $result['count'];

$pages ceil($rows $perpage);

if (
$pagenumber 1)
{
    
$pagenumber 1;
}
else if (
$pagenumber $rows)
{
    
$pagenumber $rows;
}

$minlimit = ($pagenumber 1) * $perpage+1;
$maxlimit = ($pagenumber) * $perpage;

if (
$maxlimit $rows)
{
    
$maxlimit $rows;
    
    
$minlimit $minlimit $rows $rows-$perpage $minlimit;
}

$minlimit $minlimit <= $minlimit;

$pagenav construct_page_nav(
    
$rows
    
"album.php?$session[sessionurl]type=$_REQUEST[type]"
    
"&amp;pp=$perpage&ltr=$ltr&sort=$sort&order=$order"
);



// Request: profile picture
///////////////////////////////
    


if ($type == 1)
{
    
// Query: fetch profile pictures
    ////////////////////////////////////


    
$images $DB_site->query("
        SELECT user.userid, dateline, 
        comment, user.username, user.usertitle, 
        user.joindate, user.usergroupid
        FROM "
.TABLE_PREFIX."customprofilepic 
        LEFT JOIN "
.TABLE_PREFIX."user USING (userid) 
        WHERE visible=1
        
$condition 
        ORDER BY 
$sort $order
        LIMIT " 
. ($minlimit-1) . ", $perpage
    "
);
    
    
$type 'image';
        
    
$count 1;
    
$rows $DB_site->num_rows($images);
    
    if (!
$rows)
    {
        eval(
'$album_list = "' fetch_template('album_'.$type.'_list') . '";');
    }
    else
    {
        while (
$image $DB_site->fetch_array($images))
        {
            
$image['musername'] = fetch_musername($image);

            
$image['comment'] = fetch_censored_text($image['comment']);

            eval(
'$album_list .= "' fetch_template('album_image_list') . '";');

            if (
$count == $pertr && $count != $rows)
                
$count 0;

            
$count++;
        }

        while (
$count != && $count <= $pertr)
        {
            eval(
'$album_list .= "' fetch_template('album_image_list') . '";');

            
$count++;
        }
    }

Some of the code in there, like the letters portion and $type variable, don't apply in your case.

Use the $perpage and $pertr variables to control how many images are shown per page, and how many of that page are shown per row.

I use the following template with vB conditionals to show the images.

album_image_list

HTML Code:
<if condition="$rows">
<if condition="$count == 1">
<tr>
</if>

<if condition="$image">
<td width="25%" class="<if condition="$count%2 == 0">alt1<else />alt2</if>" valign="top">
<table cellspacing="0" cellpadding="0" width="100%">
<tr>
<td valign="top" style="width: 1px; padding-left: 20px"><a href="member.php?$session[sessionurl]u=$image[userid]"><img src="./image.php?u=$image[userid]&type=pthumb" border="0" /></a></td>
<td valign="top" style="padding-left: 20px"><a style="font-size:14pt" href="member.php?$session[sessionurl]u=$image[userid]">$image[musername]</a><br /><span class="smallfont">$image[usertitle]<br /><br /><i>$image[comment]</i></span></td>
</tr>
</table>

</td>
<else />
<td width="25%" class="alt1"></td>
</if>

<if condition="$count == $pertr">
</tr>
</if>
</if>
Hope this helps.
Reply With Quote
 
X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.01216 seconds
  • Memory Usage 1,867KB
  • Queries Executed 11 (?)
More Information
Template Usage:
  • (1)SHOWTHREAD_SHOWPOST
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (1)bbcode_html
  • (2)bbcode_php
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_box
  • (1)post_thanks_button
  • (1)post_thanks_javascript
  • (1)post_thanks_navbar_search
  • (1)post_thanks_postbit_info
  • (1)postbit
  • (1)postbit_onlinestatus
  • (1)postbit_wrapper
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • reputationlevel
  • showthread
Included Files:
  • ./showpost.php
  • ./global.php
  • ./includes/init.php
  • ./includes/class_core.php
  • ./includes/config.php
  • ./includes/functions.php
  • ./includes/class_hook.php
  • ./includes/modsystem_functions.php
  • ./includes/functions_bigthree.php
  • ./includes/class_postbit.php
  • ./includes/class_bbcode.php
  • ./includes/functions_reputation.php
  • ./includes/functions_post_thanks.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_postinfo_query
  • fetch_postinfo
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • showpost_start
  • bbcode_fetch_tags
  • bbcode_create
  • postbit_factory
  • showpost_post
  • postbit_display_start
  • post_thanks_function_post_thanks_off_start
  • post_thanks_function_post_thanks_off_end
  • post_thanks_function_fetch_thanks_start
  • post_thanks_function_fetch_thanks_end
  • post_thanks_function_thanked_already_start
  • post_thanks_function_thanked_already_end
  • fetch_musername
  • postbit_imicons
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • postbit_display_complete
  • post_thanks_function_can_thank_this_post_start
  • showpost_complete