Hooks: различия между версиями

Материал из CMS Sitebill Wiki
Перейти к навигации Перейти к поиску
Строка 65: Строка 65:
 
</nowiki>
 
</nowiki>
 
</pre>
 
</pre>
 +
 +
'''custom_admin_search_fields''' - Добавляем новый параметр поиска в форму расширенного поиска в админке в объявлениях.<br>
 +
<pre>
 +
<nowiki>
 +
function custom_admin_search_fields ( $smarty ) {
 +
    return '<tr><td>Мое поле</td><td> <input type="text" name="moe_pole" id="moe_pole" value="'.$_REQUEST['moe_pole'].'" /></td></tr>';
 +
}
 +
</nowiki>
 +
</pre>
 +
Этот параметр затем можно добавлять в поиск с помощью template_search.php https://www.sitebill.ru/s/topic/241-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BF%D0%BE%D0%BB%D1%8F-%D0%B2-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-template_search-%D0%B8-%D0%B4%D1%80/

Версия 12:30, 18 июля 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;
}

custom_admin_search_fields - Добавляем новый параметр поиска в форму расширенного поиска в админке в объявлениях.


function custom_admin_search_fields ( $smarty ) {
    return '<tr><td>Мое поле</td><td> <input type="text" name="moe_pole" id="moe_pole" value="'.$_REQUEST['moe_pole'].'" /></td></tr>';
}

Этот параметр затем можно добавлять в поиск с помощью template_search.php https://www.sitebill.ru/s/topic/241-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C-%D0%BD%D0%BE%D0%B2%D1%8B%D0%B5-%D0%BF%D0%BE%D0%BB%D1%8F-%D0%B2-%D0%BF%D0%BE%D0%B8%D1%81%D0%BA-template_search-%D0%B8-%D0%B4%D1%80/