Changeset 106 in bookmarks


Ignore:
Timestamp:
10/19/15 21:16:31 (9 years ago)
Author:
peter
Message:

#6: Added basic pagination to the bookmarks HTML list view.

Location:
trunk
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • trunk/cpanfile

    r105 r106  
    88requires 'Encode'; 
    99requires 'Router::Resource'; 
     10requires 'Data::Pageset'; 
    1011 
    1112# web application 
  • trunk/lib/Bookmarks.pm

    r92 r106  
    9999} 
    100100 
     101sub get_count { 
     102    my $self = shift; 
     103    my $search = shift; 
     104 
     105    my ($sql, @bind) = sql_interp( 
     106        'select count(*) from resources join bookmarks on resources.uri = bookmarks.uri', 
     107        $self->_sql_where_clause($search), 
     108    ); 
     109    my $sth = $self->dbh->prepare($sql); 
     110    $sth->execute(@bind); 
     111    my ($count) = $sth->fetchrow_array; 
     112    return $count; 
     113} 
     114 
    101115sub search { 
    102116    my $self = shift; 
    103117    my $params = shift || {}; 
    104118    my $search = Bookmarks::Search->new($params); 
     119 
     120    my ($limit, $offset); 
     121    if ($search->page) { 
     122        my $count = $self->get_count($search); 
     123        use Data::Pageset; 
     124        my $pages = Data::Pageset->new({ 
     125            total_entries    => $count, 
     126            current_page     => $search->page, 
     127            entries_per_page => 15, 
     128            mode             => 'slide', 
     129        }); 
     130        $search->pages($pages); 
     131        $limit = $pages->entries_per_page; 
     132        $offset = $pages->skipped; 
     133    } else { 
     134        $limit = $search->limit; 
     135        $offset = $search->offset; 
     136    } 
    105137 
    106138    # build the query 
     
    110142    push @sql, $self->_sql_where_clause($search); 
    111143    push @sql, 'order by ctime desc'; 
    112     push @sql, ('limit', \$search->limit) if $search->limit; 
     144    push @sql, ('limit', \$limit) if $limit; 
    113145    # an offset is only allowed if we have a limit clause 
    114     push @sql, ('offset', \$search->offset) if $search->limit && $search->offset; 
     146    push @sql, ('offset', \$offset) if $limit && $offset; 
    115147 
    116148    my ($sql, @bind) = sql_interp(@sql); 
  • trunk/lib/Bookmarks/Controller.pm

    r100 r106  
    8383    my $limit = $self->request->param('limit'); 
    8484    my $offset = $self->request->param('offset'); 
     85    my $page = $self->request->param('page'); 
    8586 
    8687    my $list = Bookmarks::List->new({ 
     
    9192            limit  => $limit, 
    9293            offset => $offset, 
     94            page   => $page, 
    9395        }), 
    9496    }); 
  • trunk/lib/Bookmarks/List.pm

    r95 r106  
    197197            cotags       => \@cotags, 
    198198            resources    => $self->results, 
     199            pages        => $self->search->pages, 
    199200        }, 
    200201        \my $output, 
  • trunk/lib/Bookmarks/Search.pm

    r88 r106  
    1010has limit  => (is => 'ro'); 
    1111has offset => (is => 'ro'); 
     12has page   => (is => 'ro'); 
    1213 
    1314has results => (is => 'rw', default => sub { [] }); 
     15has pages => ( 
     16    is => 'rw', 
     17    isa => 'Data::Pageset', 
     18); 
    1419 
    1520# module return 
  • trunk/lib/Bookmarks/list.tt

    r95 r106  
    8484    font-size: .875em; 
    8585} 
     86.pagination { 
     87    margin: .5em; 
     88} 
    8689    </style> 
    8790  </head> 
     
    9699      <input type="submit" value="Go"/> 
    97100    </form> 
     101    <div class="pagination"> 
     102      [% IF pages %] 
     103        <a href="?page=[% pages.first_page %]">«</a> 
     104        [% IF pages.previous_set %] 
     105          <a href="?page=[% pages.previous_set %]">‹</a> 
     106        [% END %] 
     107        [% FOREACH page IN pages.pages_in_set %] 
     108          [% IF page == pages.current_page %] 
     109            <strong>[% page %]</strong> 
     110          [% ELSE %] 
     111            <a href="?page=[% page %]">[% page %]</a> 
     112          [% END %] 
     113        [% END %] 
     114        [% IF pages.next_set %] 
     115          <a href="?page=[% pages.next_set %]">›</a> 
     116        [% END %] 
     117        <a href="?page=[% pages.last_page %]">»</a> 
     118      [% END %] 
     119    </div> 
    98120    <ul class="main"> 
    99121      [%  FOREACH resource IN resources %] 
Note: See TracChangeset for help on using the changeset viewer.