silverstripe-framework/forms/gridfield/GridFieldPageCount.php
Damian Mooyman c9b6e9bac0
API Update template lookup to late resolution for performance reasons
API Update behaviour of form fields to use standard template lookup mechanism
API Support custom "type" parameter to template lookup
2016-09-06 12:54:03 +12:00

71 lines
1.9 KiB
PHP
Executable File

<?php
/**
* GridFieldPage displays a simple current page count summary.
* E.g. "View 1 - 15 of 32"
*
* Depends on {@link GridFieldPaginator} being added to the {@link GridField}.
*
* @package forms
* @subpackage fields-gridfield
*/
class GridFieldPageCount implements GridField_HTMLProvider {
/**
* @var string placement indicator for this control
*/
protected $targetFragment;
/**
* @param string $targetFragment The fragment indicating the placement of this page count
*/
public function __construct($targetFragment = 'before') {
$this->targetFragment = $targetFragment;
}
/**
* Flag indicating whether or not this control should throw an error if a
* {@link GridFieldPaginator} is not present on the same {@link GridField}
*
* @config
* @var boolean
*/
private static $require_paginator = true;
/**
* Retrieves an instance of a GridFieldPaginator attached to the same control
* @param GridField $gridField The parent gridfield
* @return GridFieldPaginator The attached GridFieldPaginator, if found.
* @throws LogicException
*/
protected function getPaginator($gridField) {
$paginator = $gridField->getConfig()->getComponentByType('GridFieldPaginator');
if(!$paginator && Config::inst()->get('GridFieldPageCount', 'require_paginator')) {
throw new LogicException(
get_class($this) . " relies on a GridFieldPaginator to be added " .
"to the same GridField, but none are present."
);
}
return $paginator;
}
/**
* @param GridField $gridField
* @return array
*/
public function getHTMLFragments($gridField) {
// Retrieve paging parameters from the directing paginator component
$paginator = $this->getPaginator($gridField);
if ($paginator && ($forTemplate = $paginator->getTemplateParameters($gridField))) {
$template = SSViewer::get_templates_by_class($this, '', __CLASS__);
return array(
$this->targetFragment => $forTemplate->renderWith($template)
);
}
return null;
}
}