From 3a0468879f106d6f6e25c7f38870bda4e5d29d3d Mon Sep 17 00:00:00 2001 From: Isabelle Date: Wed, 19 Nov 2025 13:43:08 +0100 Subject: [PATCH] FEAT: Add checks to prevent re-registering Smarty plugins --- .gitignore | 2 ++ is_themecore/src/Hook/Smarty.php | 50 +++++++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 8 deletions(-) create mode 100644 .gitignore diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..a906403 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ + +is_themecore/vendor/ diff --git a/is_themecore/src/Hook/Smarty.php b/is_themecore/src/Hook/Smarty.php index 70796a4..368380b 100644 --- a/is_themecore/src/Hook/Smarty.php +++ b/is_themecore/src/Hook/Smarty.php @@ -8,14 +8,48 @@ class Smarty extends AbstractHook 'actionDispatcherBefore', ]; - public function hookActionDispatcherBefore(): void +public function hookActionDispatcherBefore(): void { - $this->context->smarty->registerPlugin('function', 'generateImagesSources', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'generateImagesSources']); - $this->context->smarty->registerPlugin('function', 'generateImageSvgPlaceholder', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'generateImageSvgPlaceholder']); - $this->context->smarty->registerPlugin('function', 'appendParamToUrl', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'appendParamToUrl']); - $this->context->smarty->registerPlugin('block', 'images_block', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'imagesBlock']); - $this->context->smarty->registerPlugin('block', 'cms_images_block', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'cmsImagesBlock']); - $this->context->smarty->registerPlugin('block', 'display_mobile', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'displayMobileBlock']); - $this->context->smarty->registerPlugin('block', 'display_desktop', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'displayDesktopBlock']); + if (!isset($this->context->smarty->registered_plugins['function']['generateImagesSources'])) { + $this->context->smarty->registerPlugin('function', 'generateImagesSources', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'generateImagesSources']); + } else { + return; + } + + if (!isset($this->context->smarty->registered_plugins['function']['generateImageSvgPlaceholder'])) { + $this->context->smarty->registerPlugin('function', 'generateImageSvgPlaceholder', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'generateImageSvgPlaceholder']); + } else { + return; + } + + if (!isset($this->context->smarty->registered_plugins['function']['appendParamToUrl'])) { + $this->context->smarty->registerPlugin('function', 'appendParamToUrl', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'appendParamToUrl']); + } else { + return; + } + + if (!isset($this->context->smarty->registered_plugins['block']['images_block'])) { + $this->context->smarty->registerPlugin('block', 'images_block', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'imagesBlock']); + } else { + return; + } + + if (!isset($this->context->smarty->registered_plugins['block']['cms_images_block'])) { + $this->context->smarty->registerPlugin('block', 'cms_images_block', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'cmsImagesBlock']); + } else { + return; + } + + if (!isset($this->context->smarty->registered_plugins['block']['display_mobile'])) { + $this->context->smarty->registerPlugin('block', 'display_mobile', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'displayMobileBlock']); + } else { + return; + } + + if (!isset($this->context->smarty->registered_plugins['block']['display_desktop'])) { + $this->context->smarty->registerPlugin('block', 'display_desktop', ['Oksydan\Module\IsThemeCore\Core\Smarty\SmartyHelperFunctions', 'displayDesktopBlock']); + } else { + return; + } } }