NAME
Catalyst::View::Semantic - Template::Semantic view for Catalyst
SYNOPSIS
setup end action in Root
sub
auto : Private {
my
(
$self
,
$c
) =
@_
;
$c
->stash(
js
=> [],
css
=> [],
jscode
=>
''
);
}
sub
end : ActionClass(
'RenderView'
) {
my
(
$self
,
$c
) =
@_
;
return
if
$c
->response->status > 200 ||
$c
->response->body;
$c
->stash->{title} //=
'Default page title'
;
unshift
$c
->stash->{css},
'bootstrap.min'
;
# add default css
unshift
$c
->stash->{js},
'vendor/prototype'
;
# add default js
$c
->forward(
'View::Semantic'
, []);
}
create layout as root/template/layout.html
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<
link
href=
""
rel=
"stylesheet"
/>
<script src=
""
> </script>
<script type=
"application/x-javascript"
>
//<![CDATA[
Event.observe(document,
'dom:loaded'
, function() {
/
*code
*/
});
//]]>
</script>
</head>
<body> </body>
</html>
in MyApp::Controller::Foo
sub
bar :Local {
my
(
$self
,
$c
) =
@_
;
$c
->stash(
view
=> {
a
=> [
map
{
'.'
=>
$_
->name,
'@href'
=>
$_
->url
}
$c
->model(
'MyDB::Item'
)->all ] });
}
create template for action as root/template/foo/bar.html
<div>list: <a href=
"#"
>item</a></div>
that's it.
DESCRIPTION
This is Catalyst view class for Template::Semantic with sane (hopefully) defaults and some useful methods like html layout and pager. Feel free to extend your view. Check the Template::Semantic::Cookbook and source of this module.
ATTRIBUTES
The following is a list of configuration attributes you can set in your global Catalyst configuration or locally as in:
package
MyApp::View::Semantic;
use
Moose;
__PACKAGE__->config(
template_extension
=>
'xml'
,
# override default extension
wrapper
=>
sub
{
html
=> {
'body > div#main'
=>
shift
} } #
override
default
wrapper
);
path
Used at the prefix path for where yout templates are stored. Defaults to $c->path_to('root','template')
.
template_extension
Optionally set the filename extension of your templates. Default: 'html'
process_key
Name of key in stash which contains processing instructions for default template(from action path) or template specified in $c->stash->{template}
. Default: 'view'
template_key
Name of key in stash which contains name of template on which apply processing instructions. Default: 'template'
content_type
Set $c->response->content_type to this value unless specified. Default: 'text/html'
wrapper
Default wrapper callback - sets layout template name and Template::Semamtic instruction to insert wrapped content. Default sub { layout => { body => shift } }
css_key
A key in stash which contains title to include in default layout. Default: 'title'
css_key
A key in stash which contains array of css file names (without extension) to include in default layout. Default: 'css'
js_key
A key in stash which contains array of js file names (without extension) to include in default layout. Default: 'js'
jscode_key
A key in stash which contains string of js code to include in default layout. Default: 'jscode'
css_uri
Prefix location of css files. Default: '/static/css'
js_uri
Prefix location of js files. Default: '/static/js'
pager_template
Name of default pager template
METHODS
process($c, $code, $template)
Renders the template specified in <$template
> or in $c->stash->{$self->template_key}
or $c->namespace/$c->action
(the private name of the matched action). $code or stash contents under $c->stash{$self->process_key}
are passed to the underlying view object. If wrapper
is defined, than result is wrapped using default layout.
Output is stored in $c->response->body
and value of $c->response->content_type
to text/html
or whatever you configured as the "content_type" attribute unless this header has previously been set.
render($template, $code)
Returns Templace::Semantic::Document as result of processing $template
with $code
instructions.
layout($template, $code, $meta)
Renders html document. Check "SYNOPSIS" for default layout which should be in $template
file. $meta
should be a hash with corresponding keys ("title_key", "css_key", "js_key", "jscode_key")
pager($c, $pager, $template)
Renders pager snippet from $template
or $self->pager_template
using $pager
( Data::Page object ) You should have root/template/pager.html (or other path which corresponds to your configuration)
<div> <a class=
"prev"
href=
"#"
>prev</a> <span> <a href=
"#"
class=
""
>middle</a> </span> <a class=
"next"
href=
"#"
>
next
</a> </div>
engine
Access underlying Template::Semantic object
SUPPORT
GitHub
Search MetaCPAN
AUTHOR
Yegor Korablev <egor@cpan.org>
LICENSE
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.
SEE ALSO
Template::Semantic, HTML::Zoom, Text::Xslate, Template, Catalyst::View, Catalyst::View::HTML::Zoom