четверг, 16 апреля 2015 г.

XC4: что должно быть в config.php/init.php модуля ?

что должно быть в 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"

Комментариев нет:

Отправить комментарий