Add custom hook detection and update hook handling in carousel module

This commit is contained in:
2026-02-25 10:45:56 +01:00
parent e888c81aef
commit 4d8fcc1a31
2 changed files with 16 additions and 6 deletions

View File

@@ -146,6 +146,11 @@ class Pp_Carousel extends Module
$categories = $this->flattenCategories(Category::getCategories($defaultLang, true, false));
$hookOptions = $this->getAvailableHooks();
$predefinedHookIds = array_column($hookOptions, 'id');
// Detect if saved hook_name is a custom hook
$savedHookName = isset($carousel['hook_name']) ? $carousel['hook_name'] : 'displayHome';
$isCustomHook = !empty($savedHookName) && !in_array($savedHookName, $predefinedHookIds);
$sourceOptions = [
['id' => 'new', 'name' => $this->l('Nowości')],
@@ -275,8 +280,8 @@ class Pp_Carousel extends Module
// Fill form values
$helper->fields_value['id_carousel'] = $idCarousel;
$helper->fields_value['hook_name'] = isset($carousel['hook_name']) ? $carousel['hook_name'] : 'displayHome';
$helper->fields_value['custom_hook'] = '';
$helper->fields_value['hook_name'] = $isCustomHook ? 'displayHome' : $savedHookName;
$helper->fields_value['custom_hook'] = $isCustomHook ? $savedHookName : '';
$helper->fields_value['source_type'] = isset($carousel['source_type']) ? $carousel['source_type'] : 'new';
$helper->fields_value['id_category'] = isset($carousel['id_category']) ? (int) $carousel['id_category'] : 0;
$helper->fields_value['product_ids'] = isset($carousel['product_ids']) ? $carousel['product_ids'] : '';
@@ -501,10 +506,9 @@ class Pp_Carousel extends Module
private function ensureHookRegistered($hookName)
{
$idHook = Hook::getIdByName($hookName);
$idHook = (int) Hook::getIdByName($hookName);
if (!$idHook) {
$db = Db::getInstance();
$db->insert('hook', [
Db::getInstance()->insert('hook', [
'name' => pSQL($hookName),
'title' => pSQL($hookName),
]);
@@ -512,6 +516,11 @@ class Pp_Carousel extends Module
if (!$this->isRegisteredInHook($hookName)) {
$this->registerHook($hookName);
}
// Clear PrestaShop hook cache
if (Cache::isStored('hook_module_list')) {
Cache::clean('hook_module_list');
}
}
public function isRegisteredInHook($hookName)
@@ -588,7 +597,7 @@ class Pp_Carousel extends Module
*/
public function __call($method, $args)
{
if (strpos($method, 'hookDisplay') === 0) {
if (strpos($method, 'hook') === 0) {
$hookName = lcfirst(substr($method, 4));
return $this->renderCarouselsForHook($hookName);
}