PaginateArrayViewHelper.php 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. <?php
  2. namespace Opentalent\OtTemplating\ViewHelpers\Utilities;
  3. use Closure;
  4. use Opentalent\OtCore\ViewHelpers\OtAbstractViewHelper;
  5. use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  6. /**
  7. * Transform an array into a paginated array
  8. *
  9. * {namespace ot=Opentalent\OtTemplating\ViewHelpers}
  10. *
  11. * {ot:utilities.paginateArray('[0, 1, ...]')}
  12. *
  13. * @package Opentalent\OtTemplating\ViewHelpers
  14. */
  15. class PaginateArrayViewHelper extends OtAbstractViewHelper {
  16. /**
  17. * -- This method is expected by Fluid --
  18. * Declares the viewhelper's parameters
  19. */
  20. public function initializeArguments()
  21. {
  22. $this->registerArgument('array',
  23. 'array',
  24. "The array",
  25. true);
  26. $this->registerArgument('itemsPerPage',
  27. 'integer',
  28. "Number of items per page",
  29. false,
  30. 10
  31. );
  32. }
  33. /**
  34. * -- This method is expected by Fluid --
  35. * Renders the content as html
  36. *
  37. * @param array $arguments
  38. * @param Closure $renderChildrenClosure
  39. * @param RenderingContextInterface $renderingContext
  40. * @return array
  41. */
  42. public static function renderStatic(
  43. array $arguments,
  44. Closure $renderChildrenClosure,
  45. RenderingContextInterface $renderingContext
  46. ) {
  47. $array = $arguments['array'];
  48. $itemsPerPage = $arguments['itemsPerPage'];
  49. $i = 0;
  50. $pageArray = [];
  51. $pages = [];
  52. foreach($array as $k => $v) {
  53. if ($i % $itemsPerPage == 0) {
  54. if ($pageArray) {
  55. $pages[] = $pageArray;
  56. }
  57. $pageArray = [];
  58. }
  59. $pageArray[$k] = $v;
  60. $i++;
  61. }
  62. return $pages;
  63. }
  64. }