diff --git a/eZ/Bundle/EzPublishCoreBundle/Resources/config/templating.yml b/eZ/Bundle/EzPublishCoreBundle/Resources/config/templating.yml index eb9bc89c50..94ba07387c 100644 --- a/eZ/Bundle/EzPublishCoreBundle/Resources/config/templating.yml +++ b/eZ/Bundle/EzPublishCoreBundle/Resources/config/templating.yml @@ -152,6 +152,7 @@ services: eZ\Publish\Core\MVC\Symfony\Templating\Twig\Extension\QueryRenderingExtension: arguments: - '@fragment.handler' + - '@request_stack' tags: - { name: twig.extension } diff --git a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/QueryRenderingExtensionTest.php b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/QueryRenderingExtensionTest.php index c3db8bc5fc..ca1f77e36c 100644 --- a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/QueryRenderingExtensionTest.php +++ b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/QueryRenderingExtensionTest.php @@ -9,6 +9,8 @@ namespace eZ\Publish\Core\MVC\Symfony\Templating\Tests\Twig\Extension; use eZ\Publish\Core\MVC\Symfony\Templating\Twig\Extension\QueryRenderingExtension; +use Symfony\Component\HttpFoundation\Request; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Fragment\FragmentHandler; final class QueryRenderingExtensionTest extends FileSystemTwigIntegrationTestCase @@ -22,8 +24,18 @@ protected function getExtensions(): array return var_export($args, true); }); + $currentRequest = $this->createMock(Request::class); + $currentRequest + ->method('get') + ->willReturn(1); + + $requestStack = $this->createMock(RequestStack::class); + $requestStack + ->method('getCurrentRequest') + ->willReturn($currentRequest); + return [ - new QueryRenderingExtension($fragmentHandler), + new QueryRenderingExtension($fragmentHandler, $requestStack), ]; } diff --git a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query.test b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query.test index c351361ec4..2cae2ee1bd 100644 --- a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query.test +++ b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query.test @@ -27,6 +27,7 @@ array ( ), 'query' => array ( + 'page' => 1, ), )), 1 => 'inline', diff --git a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query_esi.test b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query_esi.test index bd58936295..7f06b3a194 100644 --- a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query_esi.test +++ b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query_esi.test @@ -27,6 +27,7 @@ array ( ), 'query' => array ( + 'page' => 1, ), )), 1 => 'esi', diff --git a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query_with_pagination.test b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query_with_pagination.test new file mode 100644 index 0000000000..63f6fc1fca --- /dev/null +++ b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_content_query_with_pagination.test @@ -0,0 +1,48 @@ +--TEST-- +"ez_render_content_query_b" function +--TEMPLATE-- +{{ ez_render_content_query({ + 'query': { + 'query_type': 'LatestBlogPost', + }, + 'pagination': { + 'enabled': true, + 'limit': 5, + 'page_param' : 'current_page' + }, + 'template': 'latest_blog_post.html.twig', +}) }} +--DATA-- +return array() +--EXPECT-- +array ( + 0 => + Symfony\Component\HttpKernel\Controller\ControllerReference::__set_state(array( + 'controller' => 'ez_query_render::renderQuery', + 'attributes' => + array ( + 'options' => + array ( + 'query' => + array ( + 'query_type' => 'LatestBlogPost', + ), + 'pagination' => + array ( + 'enabled' => true, + 'limit' => 5, + 'page_param' => 'current_page', + ), + 'template' => 'latest_blog_post.html.twig', + ), + ), + 'query' => + array ( + 'current_page' => 1, + ), + )), + 1 => 'inline', + 2 => + array ( + ), +) diff --git a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query.test b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query.test index 8b0fc22650..b3c94edd3d 100644 --- a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query.test +++ b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query.test @@ -27,6 +27,7 @@ array ( ), 'query' => array ( + 'page' => 1, ), )), 1 => 'inline', diff --git a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query_esi.test b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query_esi.test index 5c17042360..1b9b957a88 100644 --- a/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query_esi.test +++ b/eZ/Publish/Core/MVC/Symfony/Templating/Tests/Twig/Extension/_fixtures/query_rendering_functions/ez_render_location_query_esi.test @@ -27,6 +27,7 @@ array ( ), 'query' => array ( + 'page' => 1, ), )), 1 => 'esi', diff --git a/eZ/Publish/Core/MVC/Symfony/Templating/Twig/Extension/QueryRenderingExtension.php b/eZ/Publish/Core/MVC/Symfony/Templating/Twig/Extension/QueryRenderingExtension.php index ad91f078cc..9644e1200a 100644 --- a/eZ/Publish/Core/MVC/Symfony/Templating/Twig/Extension/QueryRenderingExtension.php +++ b/eZ/Publish/Core/MVC/Symfony/Templating/Twig/Extension/QueryRenderingExtension.php @@ -9,6 +9,7 @@ namespace eZ\Publish\Core\MVC\Symfony\Templating\Twig\Extension; use eZ\Publish\Core\Base\Exceptions\InvalidArgumentException; +use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Controller\ControllerReference; use Symfony\Component\HttpKernel\Fragment\FragmentHandler; use Twig\Extension\AbstractExtension; @@ -21,9 +22,13 @@ class QueryRenderingExtension extends AbstractExtension /** @var \Symfony\Component\HttpKernel\Fragment\FragmentHandler */ private $fragmentHandler; - public function __construct(FragmentHandler $fragmentHandler) + /** @var \Symfony\Component\HttpFoundation\RequestStack */ + private $requestStack; + + public function __construct(FragmentHandler $fragmentHandler, RequestStack $requestStack) { $this->fragmentHandler = $fragmentHandler; + $this->requestStack = $requestStack; } public function getFunctions(): array @@ -57,9 +62,15 @@ function (string $type, string $renderer, array $options): ?string { private function createControllerReference(array $options): ControllerReference { - return new ControllerReference('ez_query_render::renderQuery', [ - 'options' => $options, - ]); + $pageParam = $options['pagination']['page_param'] ?? 'page'; + + return new ControllerReference( + 'ez_query_render::renderQuery', + [ + 'options' => $options, + ], + [$pageParam => $this->requestStack->getCurrentRequest()->get($pageParam)], + ); } /**