Added pagenation to front-end members list
authorChuck Scott <cscott@gaslightmedia.com>
Fri, 16 Dec 2016 20:56:13 +0000 (15:56 -0500)
committerChuck Scott <cscott@gaslightmedia.com>
Fri, 16 Dec 2016 20:56:13 +0000 (15:56 -0500)
  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
models/admin/management/import/members.php
models/front/members/list.php
views/front/members/list.html

index cc4ca08..224fc77 100755 (executable)
@@ -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));
index f7bc443..f573ec2 100644 (file)
@@ -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
  */
index 3ca934a..a962a58 100644 (file)
@@ -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
index c880a2a..9b0e31c 100644 (file)
@@ -4,6 +4,7 @@
 ">
 {include file='front/members/header.html'}
         {apply_filters('glm-member-db-front-members-list-pageTop', '')}
+        
 <div class="glm-member-list-inner-wrapper">
     {if $settings.list_show_map}
             <div id="glm-member-list-map-toggle" class="button glm-button">Map</div>
       {/foreach}
        </div>
     {/if}
+
+    {if $paging}
+        <br>
+        <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&pageSelect=Previous&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}" class="glm-alpha-link" {if !$prevStart} style="pointer-events: none; opacity: 0.5;"{/if}>Previous page</a>
+        <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&pageSelect=Next&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}" class="glm-alpha-link" {if !$nextStart} style="pointer-events: none; opacity: 0.5;"{/if}>Next page</a>
+        <br>
+        showing {$start} through {$lastDisplayed} of {$filteredMembersFound}
+    {/if}    
+        
+
     {if $view == grid}
         <ul class="small-block-grid-1 medium-block-grid-2 large-block-grid-3">
         {foreach $members as $member}
          </div>
 
  {/if} {*end grid view check*}
+    {if $paging}
+        <br>
+        <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&pageSelect=Previous&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}" class="glm-alpha-link" {if !$prevStart} style="pointer-events: none; opacity: 0.5;"{/if}>Previous page</a>
+        <a href="{$thisUrl}?glm_action=list&textSearch={$textSearch}&categorySearch={$catSearchSelected}&regionSearch={$regionSearchSelected}&pageSelect=Next&prevStart={$prevStart}&nextStart={$nextStart}&limit={$limit}&alpha={$alphaSelected}" class="glm-alpha-link" {if !$nextStart} style="pointer-events: none; opacity: 0.5;"{/if}>Next page</a>
+        <br>
+        showing {$start} through {$lastDisplayed} of {$filteredMembersFound}
+    {/if}    
         {apply_filters('glm-member-db-front-members-list-pageBottom', '')}
  {else}
         <div>(no {$terms.term_member_plur} listed)</div>