Hooks: различия между версиями
Kondin (обсуждение | вклад) |
Kondin (обсуждение | вклад) |
||
Строка 44: | Строка 44: | ||
} else { | } else { | ||
$option_title = $category_structure['catalog'][$categoryID]['name']; | $option_title = $category_structure['catalog'][$categoryID]['name']; | ||
+ | } | ||
+ | </nowiki> | ||
+ | </pre> | ||
+ | |||
+ | BeforeDuplicate - вызывается перед созданием дубля объявления.<br> | ||
+ | Пример использования: если lot_number является уникальным ключом, то при дублировании мы добавляем к нему числовой идентификатор, чтобы сохранить уникальность ключа для новой записи.<br> | ||
+ | <pre> | ||
+ | <nowiki> | ||
+ | /** | ||
+ | * Функция может менять значения в массиве перед созданием нового дубля | ||
+ | */ | ||
+ | function BeforeDuplicate( $form_data ) { | ||
+ | foreach ($form_data as $k => $item) { | ||
+ | if ($item['name'] == 'lot_number') { | ||
+ | $form_data[$k]['value'] .= '-' . time(); | ||
+ | } | ||
+ | } | ||
+ | return $form_data; | ||
} | } | ||
</nowiki> | </nowiki> | ||
</pre> | </pre> |
Версия 07:44, 6 июня 2017
Логика пользовательских обработчиков в следующем: в каталоге шаблона создается подкаталог hooks в, в который нужно поместить файл hooks.php
/template/frontend/ваш_шаблон/hooks/hooks.php
Внутри файла должно быть такое содержание:
<?php function BeforPrintOptionName_getCategorySelectBoxWithName ( $value ) { if ( $value == 'Найти квартиру' ) { $value = 'Аренда квартир'; } return $value; }
Функция BeforPrintOptionName_getCategorySelectBoxWithName будет выполняться перед выводом заголовка в select_box_structure, для того чтобы мы могли поменять название пункта с Найти квартиру на Аренда квартир.
Эти функции из файла hooks загружаются в процессе обработки модулем
/apps/system/lib/system/apps/apps_processor.php
Этой функцией:
function load_hooks () { if ( file_exists(SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/hooks'.'/hooks.php') ) { include_once (SITEBILL_DOCUMENT_ROOT.'/template/frontend/'.$this->getConfigValue('theme').'/hooks'.'/hooks.php'); } }
В дальнейшем при выполнении генерации списка для select_box выполняется код проверки наличия пользовательской функции BeforPrintOptionName_getCategorySelectBoxWithName и если она есть, то ей передается аргумент, а на выходе получаем значение измененного аргумента.
Пример выполнения:
if (function_exists('BeforPrintOptionName_getCategorySelectBoxWithName') ) { $option_title = BeforPrintOptionName_getCategorySelectBoxWithName($category_structure['catalog'][$categoryID]['name']); } else { $option_title = $category_structure['catalog'][$categoryID]['name']; }
BeforeDuplicate - вызывается перед созданием дубля объявления.
Пример использования: если lot_number является уникальным ключом, то при дублировании мы добавляем к нему числовой идентификатор, чтобы сохранить уникальность ключа для новой записи.
/** * Функция может менять значения в массиве перед созданием нового дубля */ function BeforeDuplicate( $form_data ) { foreach ($form_data as $k => $item) { if ($item['name'] == 'lot_number') { $form_data[$k]['value'] .= '-' . time(); } } return $form_data; }