Compare commits
2 Commits
56f8a40e14
...
386570b2c6
Author | SHA1 | Date |
---|---|---|
barnold | 386570b2c6 | |
barnold | f4c2fa85a9 |
|
@ -18,6 +18,7 @@ sub startup ($self) {
|
|||
$r->post('/login')->to('auth#login');
|
||||
$r->get('/logout')->to('auth#logout');
|
||||
$r->get('/book/page/<page_number:num>')->to('book#index')->name('book_page');
|
||||
$r->get('/author/page/<page_number:num>')->to('book#author')->name('author_page');
|
||||
|
||||
# Put a route under athentication.
|
||||
my $auth = $r->under(
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package MyApp::Controller::Book;
|
||||
use Mojo::Base 'Mojolicious::Controller', -signatures;
|
||||
use MyModel::Book;
|
||||
use MyModel::Author;
|
||||
|
||||
sub index ($self) {
|
||||
my $page_number = $self->param('page_number') // 1;
|
||||
|
@ -13,4 +14,18 @@ sub index ($self) {
|
|||
);
|
||||
}
|
||||
|
||||
sub author ($self) {
|
||||
my $page_number = $self->param('page_number') // 1;
|
||||
my $author_model = MyModel::Author->new;
|
||||
my $author_page = $author_model->get_page(
|
||||
$page_number,
|
||||
$self->param('name_like'),
|
||||
);
|
||||
$self->render(
|
||||
author_page => $author_page,
|
||||
pager => $author_page->pager,
|
||||
query_params => $self->req->query_params,
|
||||
);
|
||||
}
|
||||
|
||||
1;
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
package MyModel::Author;
|
||||
use feature qw( signatures );
|
||||
use Moose;
|
||||
extends 'MyModel';
|
||||
no warnings qw( experimental::signatures );
|
||||
|
||||
sub get_page ($self, $page_number = 1, $name_like = undef) {
|
||||
my $search_condition = (defined $name_like)
|
||||
? { "me.name" => { ilike => "\%$name_like\%" } }
|
||||
: undef;
|
||||
my $rs = $self->schema->resultset('Author')->search_rs(
|
||||
$search_condition,
|
||||
{ prefetch => [ "books" ],
|
||||
order_by => [ "me.name " ],
|
||||
page => $page_number,
|
||||
rows => 10,
|
||||
},
|
||||
);
|
||||
return $rs;
|
||||
}
|
||||
|
||||
no Moose;
|
||||
__PACKAGE__->meta->make_immutable;
|
|
@ -0,0 +1,27 @@
|
|||
<p/>
|
||||
Page <%= $pager->current_page %> of <%= $pager->last_page %>
|
||||
|
||||
|
||||
<%= link_to url_for(page_number => 1)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>◄ First<% end %>
|
||||
|
||||
% if (my $prev = $pager->previous_page) {
|
||||
<%= link_to url_for(page_number => $prev)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>◄ Prev<% end %>
|
||||
% } else {
|
||||
◄ Prev
|
||||
% }
|
||||
|
||||
% if (my $next = $pager->next_page) {
|
||||
<%= link_to url_for(page_number => $next)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>Next ►<% end %>
|
||||
% } else {
|
||||
Next ►
|
||||
% }
|
||||
|
||||
<%= link_to url_for(page_number => $pager->last_page)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>Last ►<% end %>
|
|
@ -0,0 +1,29 @@
|
|||
% layout 'default';
|
||||
% title 'Authors';
|
||||
<h1>Author page</h1>
|
||||
|
||||
<%# On a new search, reset the page number to 1. %>
|
||||
%= form_for author_page => { page_number => 1 } => begin
|
||||
%= label_for name_like => 'Name like'
|
||||
%= text_field name_like => flash('name_like')
|
||||
%= submit_button "Search"
|
||||
%= end
|
||||
|
||||
<p/>
|
||||
<%= $pager->total_entries %> authors found.
|
||||
|
||||
<p/>
|
||||
<div>
|
||||
<table>
|
||||
<tr>
|
||||
<th>Name</th>
|
||||
</tr>
|
||||
% for my $author ($author_page->all) {
|
||||
<tr>
|
||||
<td><%= $author->name %></td>
|
||||
</tr>
|
||||
% }
|
||||
</table>
|
||||
</div>
|
||||
|
||||
%= include '_page-navigation'
|
|
@ -27,30 +27,4 @@
|
|||
</table>
|
||||
</div>
|
||||
|
||||
<p/>
|
||||
Page <%= $pager->current_page %> of <%= $pager->last_page %>
|
||||
|
||||
|
||||
<%= link_to url_for(page_number => 1)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>◄ First<% end %>
|
||||
|
||||
% if (my $prev = $pager->previous_page) {
|
||||
<%= link_to url_for(page_number => $prev)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>◄ Prev<% end %>
|
||||
% } else {
|
||||
◄ Prev
|
||||
% }
|
||||
|
||||
% if (my $next = $pager->next_page) {
|
||||
<%= link_to url_for(page_number => $next)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>Next ►<% end %>
|
||||
% } else {
|
||||
Next ►
|
||||
% }
|
||||
|
||||
<%= link_to url_for(page_number => $pager->last_page)
|
||||
->query($query_params)
|
||||
->to_abs => begin %>Last ►<% end %>
|
||||
%= include '_page-navigation'
|
||||
|
|
|
@ -6,6 +6,7 @@
|
|||
|
||||
<p><%= link_to("About" => 'about') %></p>
|
||||
<p><%= link_to("Books" => 'book_page' => { page_number => 1 }) %></p>
|
||||
<p><%= link_to("Authors" => 'author_page' => { page_number => 1 }) %></p>
|
||||
|
||||
<p>For this, you'll need to log in, then MyApp will redirect you:</p>
|
||||
<p><%= link_to("Account" => 'account') %></p>
|
||||
|
|
Loading…
Reference in New Issue