diff --git a/src/flextype/core/Entries/Macros/PhpMacros.php b/src/flextype/core/Entries/Macros/PhpMacros.php new file mode 100644 index 00000000..46610443 --- /dev/null +++ b/src/flextype/core/Entries/Macros/PhpMacros.php @@ -0,0 +1,27 @@ +addListener('onEntriesFetchSingleHasResult', static function (): void { + if (! registry()->get('flextype.settings.entries.macros.php.enabled')) { + return; + } + + if (entries()->registry()->has('methods.fetch.result.macros.php')) { + ob_start(); + eval(entries()->registry()->get('methods.fetch.result.macros.php')); + ob_get_clean(); + } +}); diff --git a/src/flextype/settings.yaml b/src/flextype/settings.yaml index 3c709bf1..663a2360 100644 --- a/src/flextype/settings.yaml +++ b/src/flextype/settings.yaml @@ -89,6 +89,9 @@ entries: path: "/src/flextype/core/Entries/Directives/TypesDirective.php" macros: debug: false + php: + enabled: true + path: "/src/flextype/core/Entries/Macros/PhpMacros.php" registry: enabled: true path: "/src/flextype/core/Entries/Macros/RegistryMacros.php" diff --git a/tests/fixtures/entries/blog-php-macros/entry.yaml b/tests/fixtures/entries/blog-php-macros/entry.yaml new file mode 100644 index 00000000..637486fe --- /dev/null +++ b/tests/fixtures/entries/blog-php-macros/entry.yaml @@ -0,0 +1,6 @@ +title: Blog +macros: + php: | + $entry = entries()->registry()->get('methods.fetch'); + $entry['result']['posts'] = entries()->fetch('blog', ['collection' => true, 'filter' => ['sort_by' => ['key' => 'date', 'direction' => 'ASC']]])->toArray(); + entries()->registry()->set('methods.fetch', $entry); \ No newline at end of file diff --git a/tests/fixtures/settings/settings.yaml b/tests/fixtures/settings/settings.yaml index 700cea80..d42f68f4 100644 --- a/tests/fixtures/settings/settings.yaml +++ b/tests/fixtures/settings/settings.yaml @@ -85,6 +85,9 @@ entries: path: "/src/flextype/core/Entries/Directives/TypesDirective.php" macros: debug: false + php: + enabled: true + path: "/src/flextype/core/Entries/Macros/PhpMacros.php" registry: enabled: true path: "/src/flextype/core/Entries/Macros/RegistryMacros.php" diff --git a/tests/src/flextype/core/Entries/Macros/PhpMacrosTest.php b/tests/src/flextype/core/Entries/Macros/PhpMacrosTest.php new file mode 100644 index 00000000..fe19188c --- /dev/null +++ b/tests/src/flextype/core/Entries/Macros/PhpMacrosTest.php @@ -0,0 +1,23 @@ +directory(PATH['project'] . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(PATH['project'] . '/entries')->delete(); +}); + +test('PhpMacros', function () { + entries()->create('blog', serializers()->yaml()->decode(filesystem()->file(ROOT_DIR . '/tests/fixtures/entries/blog-php-macros/entry.yaml')->get())); + $this->assertTrue(entries()->create('blog/post-1', ['title' => 'Post 1'])); + $this->assertTrue(entries()->create('blog/post-2', ['title' => 'Post 2'])); + $this->assertTrue(entries()->create('blog/post-3', ['title' => 'Post 3'])); + $this->assertTrue(entries()->create('categories', ['title' => 'Categories'])); + $this->assertTrue(entries()->create('categories/cat', ['title' => 'Cat'])); + $this->assertTrue(entries()->create('categories/dog', ['title' => 'Dog'])); + + expect(entries()->fetch('blog')->dot()->count())->toBe(44); +});