WithPageViewHelper.php 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. <?php
  2. namespace Opentalent\OtTemplating\ViewHelpers\Request;
  3. use Closure;
  4. use TYPO3Fluid\Fluid\Core\Rendering\RenderingContextInterface;
  5. use TYPO3Fluid\Fluid\Core\ViewHelper\AbstractViewHelper;
  6. /**
  7. * Returns the current url with a 'page=' argument set up or updated
  8. *
  9. * {namespace ot=Opentalent\OtTemplating\ViewHelpers}
  10. *
  11. * {ot:request.withPage(page: 1)}
  12. *
  13. * @package Opentalent\OtTemplating\ViewHelpers
  14. */
  15. class WithPageViewHelper extends AbstractViewHelper {
  16. /**
  17. * -- This method is expected by Fluid --
  18. * Declares the viewhelper's parameters
  19. */
  20. public function initializeArguments()
  21. {
  22. $this->registerArgument('page',
  23. 'int',
  24. "The page's number",
  25. true);
  26. }
  27. /**
  28. * -- This method is expected by Fluid --
  29. * Renders the content as html
  30. *
  31. * @param array $arguments
  32. * @param Closure $renderChildrenClosure
  33. * @param RenderingContextInterface $renderingContext
  34. * @return string
  35. */
  36. public static function renderStatic(
  37. array $arguments,
  38. Closure $renderChildrenClosure,
  39. RenderingContextInterface $renderingContext
  40. ) {
  41. $page = $arguments['page'];
  42. $request = $GLOBALS['TYPO3_REQUEST'];
  43. $uri = $request->getUri();
  44. $query = $uri->getQuery();
  45. if (preg_match("/.*page=\d+.*/", $query)) {
  46. $query = preg_replace(
  47. "/page=\d+/",
  48. "page=" . $page,
  49. $query
  50. );
  51. } elseif ($query != '') {
  52. $query .= "&page=" . $page;
  53. } else {
  54. $query .= "page=" . $page;
  55. }
  56. return (string)$uri->withQuery($query);
  57. }
  58. }