vb.org Archive

vb.org Archive (https://vborg.vbsupport.ru/index.php)
-   vB3 Programming Discussions (https://vborg.vbsupport.ru/forumdisplay.php?f=15)
-   -   PHP multiselect and page navigation (https://vborg.vbsupport.ru/showthread.php?t=282410)

career 05-04-2012 09:43 AM

PHP multiselect and page navigation
 
Good day

Need a little help or advice.

How not to show long list of forum ids when changing pages?
Because now when choose several forums and press page 2, the link is
test.php?do=show&pp=20&page2&forum[]=91&forum[]=95&forum[]=99.
Is there a way I can hide from url such string '&forum[]=91&forum[]=95&forum[]=99' and keep work page navigation?

For one of my new pages I use Multiselect, i mean something like this in template
Code:

<label for="select_forum">Choose forum</label>
<select name="forum[]" id="select_forum" size="4" style="display:block" multiple="multiple">
<option value="0" $noforumselected>All forums</option>
<option value="91">Test forum1 with forumid 91</option>
<option value="95">Test forum2 with forumid 95</option>
<option value="99">Test forum2 with forumid 99</option>                                               
</select>

This code i put into form

Code:


<form action="test.php?do=show" method="post">
<input type="hidden" name="s" value="$session[sessionhash]" />
<input type="hidden" name="page" value="$pagenumber" />
<input type="hidden" name="pp" value="$perpage" />
<input type="hidden" name="securitytoken" value="$bbuserinfo[securitytoken]" />
<input type="hidden" name="do" value="viewthreads" />

<label for="select_forum">Choose forum</label>
<select name="forum[]" id="select_forum" size="4" style="display:block" multiple="multiple">
<option value="0" $noforumselected>All forums</option>
<option value="91">Test forum1 with forumid 91</option>
<option value="95">Test forum2 with forumid 95</option>
<option value="99">Test forum2 with forumid 99</option>                                               
</select>

</form>


In test.php i have required code for working page navigation

PHP Code:


.............
.............

// ###############################
if ($_REQUEST['do'] == 'show')
{
    
$vbulletin->input->clean_array_gpc('r', array(
        
'perpage'    => TYPE_UINT,
        
'pagenumber' => TYPE_UINT,
        
'daysprune'  => TYPE_INT,
        
'sortfield'  => TYPE_NOHTML,
        
'sortorder'  => TYPE_NOHTML,
        
'forum'    => TYPE_ARRAY
    ));


............
............

$sortfield  =& $vbulletin->GPC['sortfield'];
$perpage    =& $vbulletin->GPC['perpage'];
$pagenumber =& $vbulletin->GPC['pagenumber'];
$daysprune  =& $vbulletin->GPC['daysprune'];
$forum    =& $vbulletin->GPC['forum'];

............
............

$sorturl "test.php?" $vbulletin->session->vars['sessionurl'] . "do=show&amp;forum[]=" implode('&amp;forum[]='$vbulletin->GPC['forum']) . "&amp;pp=$perpage&amp;daysprune=$daysprune";

$pagenav construct_page_nav($pagenumber$perpage$totalthreads$sorturl "&amp;sort=$sortfieldiif(!empty($vbulletin->GPC['sortorder']), "&amp;order=" $vbulletin->GPC['sortorder'])); 


kh99 05-04-2012 09:58 AM

I don't know if I follow everything you're doing. I assume there's more than one place $sorturl is used, to sort in different ways? Anyway, maybe you could do something like change the form to:

Code:

<form name="sortform" method="post">

and then where the link is:

Code:

<a href="javascript:document.sortform.submit()">Sort</a>

career 05-04-2012 10:29 AM

Quote:

I assume there's more than one place $sorturl is used
Yes, it's also used for sorting on page, standart vb code from my template:

HTML Code:

<a href="$sorturl&amp;order=desc&amp;sort=voteavg" rel="nofollow">$vbphrase[rating]</a> $sortarrow[voteavg]</span>
....
<a href="$sorturl&amp;order=asc&amp;sort=title" rel="nofollow">$vbphrase[thread]</a> $sortarrow[title] /
....
<a href="$sorturl&amp;order=asc&amp;sort=postusername" rel="nofollow">
.....

Thanks for your advice, kh99. But I didn't plan to use javascript.

Just can't realize how to make construct_page_nav() work without long url and so many vars in it. Would be great to have a working url for 2nd page like test.php?do=show&page=2 or something but not containing too much variables like now.

--------------- Added [DATE]1336134729[/DATE] at [TIME]1336134729[/TIME] ---------------

btw, this code just modified mostly from moderation.php and template "moderation_threads".
VB 3.8
I've added multiselect for choosing multiple forums, that's it.

kh99 05-04-2012 10:43 AM

Quote:

Originally Posted by career (Post 2326120)
Thanks for your advice, kh99. But I didn't plan to use javascript.

Just can't realize how to make construct_page_nav() work without long url and so many vars in it. Would be great to have a working url for 2nd page like test.php?do=show&page=2 or something but not containing too much variables like now.

I see. But of course all the data needed to display the page has to be passed from one page to the next, and if it's not part of the url then the only other way is to post it as a form. I suppose if it's just the url length you're worried about you could somehow encode the info into one parameter, like maybe:

Code:

test.php?do=show&params=20,2,91,95,99

Then something like:
Code:

$vbulletin->input->clean_gpc('r', 'params', TYPE_STR);
$params = split(',', $vbulletin->GPC['params']);
$pp = $params[0];
$page = $params[1];
$forum = array_slice($params, 2);


career 05-04-2012 10:53 AM

Thanks! I'll try this way.

Another way I thought I could rewrite construct_page_nav() for myself needs.
I mean, by default it is construct_page_nav($pagenumber, $perpage, $results, $address, $address2 = '', $anchor = '')

but if I change it to construct_page_nav2($pagenumber, $perpage, $new_var_forums, $results, $address, $address2 = '', $anchor = '') would that help me to pass forum array from one page to the next?

Thanks kh99!

kh99 05-04-2012 11:16 AM

Yes, you could do that.

Also I should mention that you'd want to be careful to force those parameters to be integers (which I didn't do in my example code above).

career 05-05-2012 06:13 AM

Quote:

Also I should mention that you'd want to be careful to force those parameters to be integers
Thanks, once i'm done it i'll write back here


All times are GMT. The time now is 10:41 PM.

Powered by vBulletin® Version 3.8.12 by vBS
Copyright ©2000 - 2025, vBulletin Solutions Inc.

X vBulletin 3.8.12 by vBS Debug Information
  • Page Generation 0.02052 seconds
  • Memory Usage 1,754KB
  • Queries Executed 10 (?)
More Information
Template Usage:
  • (1)ad_footer_end
  • (1)ad_footer_start
  • (1)ad_header_end
  • (1)ad_header_logo
  • (1)ad_navbar_below
  • (6)bbcode_code_printable
  • (1)bbcode_html_printable
  • (1)bbcode_php_printable
  • (3)bbcode_quote_printable
  • (1)footer
  • (1)gobutton
  • (1)header
  • (1)headinclude
  • (6)option
  • (1)post_thanks_navbar_search
  • (1)printthread
  • (7)printthreadbit
  • (1)spacer_close
  • (1)spacer_open 

Phrase Groups Available:
  • global
  • postbit
  • showthread
Included Files:
  • ./printthread.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/class_bbcode_alt.php
  • ./includes/class_bbcode.php
  • ./includes/functions_bigthree.php 

Hooks Called:
  • init_startup
  • init_startup_session_setup_start
  • init_startup_session_setup_complete
  • cache_permissions
  • fetch_threadinfo_query
  • fetch_threadinfo
  • fetch_foruminfo
  • style_fetch
  • cache_templates
  • global_start
  • parse_templates
  • global_setup_complete
  • printthread_start
  • bbcode_fetch_tags
  • bbcode_create
  • bbcode_parse_start
  • bbcode_parse_complete_precache
  • bbcode_parse_complete
  • printthread_post
  • printthread_complete