что должно быть в config.php/init.php модуля ?
отвечу, что не должно быть
Не должно быть действий которые зависят от других файлов.
config.php должен быть полностью независимым в том числе и от себя самого и от своего собственного func.php
Вообще в init.php config.php незачем пихать вобще какие-то глобальные переменные/ смарти переменные/ вызовы функций
в большинстве случаев эти вызовы нужны только в локальных конкретных местах, а не для всего магаза
к примеру когда работает image.php или ajax get_block.php он может проинициализировать все активные модули, хотя это реально не нужно.
Отлично если от init.php модуль вообще отказался.
Что влечет несоблюдение этих правил ?
1 тормоза
2 fatal errors
3 логические баги. Когда время жизни переменной имеет огромное значение на несколько тысяч строк. В течении которых с переменной может случиться все что угодно. И ядро не может гарантировать модулю, что значение переменной не поменяется в каком-то темном закаулке. Модуль сам себя должен обеспечивать приемлемой устойчивостью к багам.
4 Проблемы из-за последовательности инициализации модулей
примеры
1) Так нельзя это Fatal error
/*
Load module functions
*/
if (!empty($include_func))
require_once $_module_dir . XC_DS . 'func.php';
if (func_xpc_check_iframe_methods()) {
$smarty->assign('xpc_iframe_methods', 'Y');
}
?>
"modules/XPayments_Connector/config.php" 61L, 3167C
2) Так нельзя это Fatal error и тормоза
.......
x_session_register('cart');
if (!defined('IS_ERROR_MESSAGE'))
include $xcart_dir.'/modules/Google_Checkout/gcheckout_button.php';
"modules/Google_Checkout/init.php" line 77 of 149 --51%-- col 1
3) Это fatal error
if (defined('AREA_TYPE') && in_array(constant('AREA_TYPE'), array('A', 'P'))) {
// Process changes on the module options page
if (isset($_GET['option']) && $_GET['option'] == 'Sitemap') {
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['sitemap'])) {
if (!isset($_POST['sitemap'])) {
$sitemap_error = func_get_langvar_by_name('lbl_permission_denied');
} else {
switch ($_POST['sitemap']['config']) {
case 'add':
$sitemap_error = sitemap_extra_addurl($_POST['sitemap']['add']);
break;
case 'delete':
$sitemap_error = sitemap_extra_delurls($_POST['sitemap']['delete']);
break;
case 'update':
$sitemap_error = sitemap_extra_updateurls($_POST['sitemap']['update']);
break;
case 'generate_cache':
$sitemap_error = sitemap_start_generate_cache($config['sitemap']['cache_limit_general'], $config['sitemap']['cache_limit_categories']);
default:
break;
"modules/Sitemap/init.php"
отвечу, что не должно быть
Не должно быть действий которые зависят от других файлов.
config.php должен быть полностью независимым в том числе и от себя самого и от своего собственного func.php
Вообще в init.php config.php незачем пихать вобще какие-то глобальные переменные/ смарти переменные/ вызовы функций
в большинстве случаев эти вызовы нужны только в локальных конкретных местах, а не для всего магаза
к примеру когда работает image.php или ajax get_block.php он может проинициализировать все активные модули, хотя это реально не нужно.
Отлично если от init.php модуль вообще отказался.
Что влечет несоблюдение этих правил ?
1 тормоза
2 fatal errors
3 логические баги. Когда время жизни переменной имеет огромное значение на несколько тысяч строк. В течении которых с переменной может случиться все что угодно. И ядро не может гарантировать модулю, что значение переменной не поменяется в каком-то темном закаулке. Модуль сам себя должен обеспечивать приемлемой устойчивостью к багам.
4 Проблемы из-за последовательности инициализации модулей
примеры
1) Так нельзя это Fatal error
/*
Load module functions
*/
if (!empty($include_func))
require_once $_module_dir . XC_DS . 'func.php';
if (func_xpc_check_iframe_methods()) {
$smarty->assign('xpc_iframe_methods', 'Y');
}
?>
"modules/XPayments_Connector/config.php" 61L, 3167C
2) Так нельзя это Fatal error и тормоза
.......
x_session_register('cart');
if (!defined('IS_ERROR_MESSAGE'))
include $xcart_dir.'/modules/Google_Checkout/gcheckout_button.php';
"modules/Google_Checkout/init.php" line 77 of 149 --51%-- col 1
3) Это fatal error
if (defined('AREA_TYPE') && in_array(constant('AREA_TYPE'), array('A', 'P'))) {
// Process changes on the module options page
if (isset($_GET['option']) && $_GET['option'] == 'Sitemap') {
if ($_SERVER['REQUEST_METHOD'] == 'POST' && isset($_POST['sitemap'])) {
if (!isset($_POST['sitemap'])) {
$sitemap_error = func_get_langvar_by_name('lbl_permission_denied');
} else {
switch ($_POST['sitemap']['config']) {
case 'add':
$sitemap_error = sitemap_extra_addurl($_POST['sitemap']['add']);
break;
case 'delete':
$sitemap_error = sitemap_extra_delurls($_POST['sitemap']['delete']);
break;
case 'update':
$sitemap_error = sitemap_extra_updateurls($_POST['sitemap']['update']);
break;
case 'generate_cache':
$sitemap_error = sitemap_start_generate_cache($config['sitemap']['cache_limit_general'], $config['sitemap']['cache_limit_categories']);
default:
break;
"modules/Sitemap/init.php"