Add author page.

This commit is contained in:
barnold 2022-09-18 14:09:17 +01:00
parent 56f8a40e14
commit f4c2fa85a9
4 changed files with 94 additions and 0 deletions

View File

@ -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(

View File

@ -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;

23
lib/MyModel/Author.pm Normal file
View File

@ -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;

View File

@ -0,0 +1,55 @@
% 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>
<p/>
Page <%= $pager->current_page %> of <%= $pager->last_page %>
&nbsp;&nbsp;&nbsp;
<%= 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 %>