/Mojolicious-Plugin-TagHelpers-ContentBlock

Mojolicious Plugin for Content Blocks

Primary LanguagePerlArtistic License 2.0Artistic-2.0

NAME

Mojolicious::Plugin::TagHelpers::ContentBlock - Mojolicious Plugin for Content Blocks

SYNOPSIS

use Mojolicious::Lite;

plugin 'TagHelpers::ContentBlock';

# Add snippets to a named content block, e.g. from a plugin
app->content_block(
  admin => {
    inline => "<%= link_to 'Edit' => '/edit' %>"
  }
);

# ... or in a controller:
get '/' => sub {
  my $c = shift;
  $c->content_block(
    admin => {
      inline => "<%= link_to 'Logout' => '/logout' %>",
      position => 20
     }
  );
  $c->render(template => 'home');
};

app->start;

__DATA__
@@ home.html.ep
%# and call it in a template
%= content_block 'admin'

DESCRIPTION

Mojolicious::Plugin::TagHelpers::ContentBlock is a Mojolicious plugin to create pluggable content blocks for page views.

METHODS

Mojolicious::Plugin::TagHelpers::ContentBlock inherits all methods from Mojolicious::Plugin and implements the following new one.

register

# Mojolicious
$app->plugin('TagHelpers::ContentBlock');

# Mojolicious::Lite
plugin 'TagHelpers::ContentBlock';

Called when registering the plugin. Accepts an optional hash containing information on content blocks to be registered on startup.

# Mojolicious
$app->plugin(
  'TagHelpers::ContentBlock' => {
    admin => [
      {
        inline => '<%= link_to "Edit" => "/edit" %>',
        position => 10
      },
      {
        inline => '<%= link_to "Logout" => "/logout" %>',
        position => 15
      }
    ],
    footer => {
      inline => '<%= link_to "Privacy" => "/privacy" %>',
      position => 5
    }
  }
);

Content blocks are defined by their name followed by either a hash of content block information or an array of content block information hashes. See content_block for further information.

The content block hash can be set as part of the configuration file with the key TagHelpers-ContentBlock or on registration (that will be merged with the configuration).

HELPERS

content_block

# In a plugin
$app->content_block(
  admin => {
    inline => '<%= link_to 'Edit' => '/edit' %>'
  }
);

# From a controller
$c->content_block(
  admin => {
    inline => '<%= link_to 'Edit' => '/edit' %>',
    position => 40
  }
);

# From a template
% content_block 'admin', { position => 9 }, begin
  <%= link_to 'Edit' => '/edit' %>
% end

# Calling the content block
%= content_block 'admin'

Add content to a named content block (like with content_for) or call the contents from a template.

In difference to content_for, content of the content block can be defined in a global cache during startup or as part of the applications configuration.

Supported content block parameters, passed as a hash, are template or inline. Additionally a numeric position value can be passed, defining the order of elements in the content block. If position is omitted, the default position is 0. Position values may be positive or negative.

When calling the content blocks, an additional list parameter separator can define a string to be placed between all blocks.

# Calling the content block
%= content_block 'admin', separator => '<hr />'

content_block_ok

# In a template
% if (content_block_ok('admin')) {
  <ul>
  %= content_block 'admin'
  </ul>
% };

Check if a content_block contains elements.

DEPENDENCIES

Mojolicious.

AVAILABILITY

https://github.com/Akron/Mojolicious-Plugin-TagHelpers-ContentBlock

COPYRIGHT AND LICENSE

Copyright (C) 2015-2021, Nils Diewald.

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.