From 99487b27af6688bfa9ba3bab4714b75cf3d200c9 Mon Sep 17 00:00:00 2001 From: Chuck Scott Date: Fri, 16 Dec 2016 15:56:13 -0500 Subject: [PATCH] Added pagenation to front-end members list models/front/members/list.php - added code to support the data abstract pagenation feature views/front/members/list.html - added next and previous buttons and display progress of pagenation "nn to nn of nnnn" models/admin/management/import/members.php - also pulled a couple lines of unused code unrelated to pagenation lib/GlmDataAbstract/DataAbstract.php - fixed one problem with pagenationm feature that would miss one per page if using PseudoRandom ordering --- lib/GlmDataAbstract/DataAbstract.php | 4 +- models/admin/management/import/members.php | 4 -- models/front/members/list.php | 80 +++++++++++++++++++++- views/front/members/list.html | 20 ++++++ 4 files changed, 100 insertions(+), 8 deletions(-) diff --git a/lib/GlmDataAbstract/DataAbstract.php b/lib/GlmDataAbstract/DataAbstract.php index cc4ca085..224fc77e 100755 --- a/lib/GlmDataAbstract/DataAbstract.php +++ b/lib/GlmDataAbstract/DataAbstract.php @@ -4158,8 +4158,8 @@ abstract class GlmDataAbstract // If we have a start value if ($start !== false) { - // Enforce valid start - $start = abs(intval($start-0)); + // Enforce valid start - Also need to set start to 1 less than provided in request + $start = abs(intval($start-1)); // Enforce length - Required with a $start value $length = abs(intval($length-0)); diff --git a/models/admin/management/import/members.php b/models/admin/management/import/members.php index f7bc443d..f573ec21 100644 --- a/models/admin/management/import/members.php +++ b/models/admin/management/import/members.php @@ -3,10 +3,6 @@ * Import Members */ -// Clear image data options from WordPress in case they were left set. This prevents re-importing images without -delete_option( 'glm-member-db-import-imageurl' ); -delete_option( 'glm-member-db-import-image' ); - /* * Check all input */ diff --git a/models/front/members/list.php b/models/front/members/list.php index 3ca934aa..a962a58f 100644 --- a/models/front/members/list.php +++ b/models/front/members/list.php @@ -162,6 +162,15 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo $catSearchSelected = false; $regionSearchSelected = false; + // Paging Parmeters + $paging = true; // This might be better set in a management field + $numbDisplayed = false; + $lastDisplayed = false; + $prevStart = false; + $nextStart = false; + $start = 1; + $limit = 20; // Set to the number of listings per page + // Check for URL parameter override of shortcode parameters if (isset($_REQUEST['categorySearch'])) { $actionData['request']['category-search'] = $_REQUEST['categorySearch']; @@ -172,6 +181,10 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo if (isset($_REQUEST['alpha'])) { $actionData['request']['alpha'] = $_REQUEST['alpha']; } + // If user clicked a page request then we need to check the savedAlpha value + if (isset($_REQUEST['savedAlpha']) && isset($_REQUEST['pageSelect'])) { + $actionData['request']['alpha'] = $_REQUEST['savedAlpha']; + } if (isset($_REQUEST['amenitySearch'])) { $actionData['request']['amenity-search'] = $_REQUEST['amenitySearch']; } @@ -591,6 +604,31 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo $blankStart = true; } + // Check if we're doing paging + if (isset($_REQUEST['pageSelect'])) { + + // If request is for Next + if ($_REQUEST['pageSelect'] == 'Next') { + $newStart = $_REQUEST['nextStart'] - 0; + + // Otherwise it must be Previous + } else { + $newStart = $_REQUEST['prevStart'] - 0; + } + + if ($newStart > 0) { + $start = $newStart; + } + } + + // If we're not paging, then force $start and $limit to false to data abstract returns everything. + $resultParam = 'listResult'; + if (!$paging) { + $start = false; + $limit = false; + $resultParam = 'list'; + } + /* * Get a current list of members - unless this is a blank start */ @@ -599,18 +637,21 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo // Get stats for the current selection $membersFound = $this->getStats(str_replace('T.', '', $where)); + // Get stats for number of members found matching current selection criteria (includes alpha selection) + $filteredMembersFound = $this->getStats(str_replace('T.', '', $where.$alphaWhere)); + // Get member list sorted as specified switch ($this->config['settings']['list_order_list']) { // Pseudo-Random list order case $this->config['sort_order_numb']['Pseudo-Random']: - $list = $this->getList($where.$alphaWhere, 'pseudo-random'); + ${$resultParam} = $this->getList($where.$alphaWhere, 'pseudo-random', true, 'id', $start, $limit); break; // Default is alpha-numeric list order default: case $this->config['sort_order_numb']['Alpha-Numeric']: - $list = $this->getList($where.$alphaWhere, 'member_name'); + ${$resultParam} = $this->getList($where.$alphaWhere, 'member_name', true, 'id', $start, $limit); break; } @@ -621,6 +662,30 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo } + if ($paging) { + + // Get paging results - With paging getList() returns an array with additional paging data + $numbDisplayed = $listResult['returned']; + $lastDisplayed = $listResult['last']; + if ($start == 1) { + $prevStart = false; + } else { + $prevStart = $start - $limit; + if ($start < 1) { + $start = 1; + } + } + + if ($start + $limit <= $filteredMembersFound) { + $nextStart = $start + $limit; + } + + // since we're doing paging, we have to break out just the member data + $list = $listResult['list']; + unset($listResult); + + } + // If we have list entries - even if it's an empty list $success = true; $haveMembers = false; @@ -663,6 +728,17 @@ class GlmMembersFront_members_list extends GlmDataMemberInfo 'alphaSelected' => $alphaSelected, 'blankStart' => $blankStart, 'view' => $view, + + // Paging parameters + 'filteredMembersFound' => $filteredMembersFound, + 'numbDisplayed' => $numbDisplayed, + 'lastDisplayed' => $lastDisplayed, + 'paging' => $paging, + 'prevStart' => $prevStart, + 'nextStart' => $nextStart, + 'start' => $start, + 'limit' => $limit, + ); // Return status, suggested view, and data to controller - also return any modified settings diff --git a/views/front/members/list.html b/views/front/members/list.html index c880a2a5..9b0e31cc 100644 --- a/views/front/members/list.html +++ b/views/front/members/list.html @@ -4,6 +4,7 @@ "> {include file='front/members/header.html'} {apply_filters('glm-member-db-front-members-list-pageTop', '')} +
{if $settings.list_show_map}
Map
@@ -115,6 +116,16 @@ {/foreach}
{/if} + + {if $paging} +
+ Previous page + Next page +
+ showing {$start} through {$lastDisplayed} of {$filteredMembersFound} + {/if} + + {if $view == grid}