About Features Downloads Getting Started Documentation Events Support GitHub

Site Tools


development:plugins:view_helpers

View Helpers

Building a View Helper

View helpers are a convenient way of encapsulating logic that is useful during template rendering. All registered view helpers are accessible as methods of $this within templates. See the Laminas manual for more general information. The notes below account for some VuFind-specific details (since VuFind's theme system makes some details slightly different than in a “vanilla” Laminas application).

Creating a view helper is simple:

  • Pick a namespace for your view helpers. This should usually be inside a custom module.
  • In your chosen namespace, create a class that extends \Laminas\View\Helper\AbstractHelper. You can either implement all of your functionality in the class's __invoke() method (in which case you can use the helper with calls like $this->myHelper()) or else you can leave __invoke() out and add a number of public methods (in which case you can use the helper with calls like $this->myHelper()->myMethod()).
  • Create a custom theme if you have not done so already.
  • Configure the new helper in the 'helpers' section of the theme.config.php file for your current theme. This is a standard Laminas service manager configuration with invokables, factories, etc.

Commonly Used Helpers

Slots

Slots are designed to be the building blocks on interfaces. Their main feature is that they are not overridden once set, meaning you can set some customizations and be sure that they will be displayed in the interface. Slots can hold any kind of data and can also capture buffers to be displayed later. Here are a few examples.

$this->slot('demo')->set('one');
$this->slot('demo', 'two'); // set shortcut, not saved since 'one' is already set
 
echo $this->slot('demo')->get(); // 'one'
 
echo $this->slot('unset')->get('two'); // you can pass a default that returns if slot is empty
// --- custom file ---
<?php $this->slot('demo')->start(); // begin a buffer capture ?>
    <h2>Heading</h2>
    <p>Customization</p>
<?php $this->slot('demo')->end(); ?>
 
<?php include $this->parentTemplate('footer.phtml'); ?> // pull a template from a parent theme
 
// --- footer.phtml ---
<?php $this->slot('demo')->start(); ?>
    <p>Ignored default
<?php echo this->slot('demo')->end(); ?> // all slot actions return the slot's contents for easy display
Method Description (all return slot contents)
set($value) Save a value, if it's the first value written
get([$default]) Get the contents of a slot or a default if the slot is empty
append($value) Add a string to the end of a slot and after all previous appends
prepend($value) Add a string to the start of a slot and before all previous appends
clear() Empty a slot and return the previous contents
start() Start buffer capture to be saved in slot
end([$method]) Ends a buffer capture. Method can be 'SET' (default), 'APPEND', or 'PREPEND'

appendScript/appendStylesheet

When you want to add robust functionality to a page without loading lots of JS and CSS on every other page, headScript and headLink are the best way to go about it.

$this->headLink()->appendStylesheet('vendor/bootstrap-rtl.min.css');
$this->headScript()->appendFile("cart.js");
development/plugins/view_helpers.txt · Last modified: 2020/03/19 21:53 by crhallberg