Forums / National / Russian / Модули и плагины / Дополнительные настройки в админке. Как это делать?

Sergey
#22454 2010-01-30 01:09
# Gunslinger : Sergey
С точки зрения програмного кода плагин по вашему не является тем же подключаемым модулем?
Вы не поняли, модуль подключается, точнее включается средствами браузера, а плагин средствами PHP.
Однако, PHP имеет внутренний механизм организации нового потока, подменяющего ответ от браузера. Как бы вписывает строку урла в браузере и тут же сам ее принимает. Вот рассмотрим этот необычно-стандартный участок, не только обработки ошибок.
if ($pag['page_state'] == 1 && !$usr['isadmin'] && $usr['id'] != $pag['page_ownerid'])
{
	sed_log("Attempt to directly access an un-validated page", 'sec');
	header("Location: " . SED_ABSOLUTE_URL . sed_url('message', "msg=930", '', true));
	exit;
}

if (mb_substr($pag['page_text'], 0, 6)=='redir:')
	{
	$redir = str_replace('redir:', '', trim($pag['page_text']));
	$sql = sed_sql_query("UPDATE $db_pages SET page_filecount=page_filecount+1 WHERE page_id='".$pag['page_id']."'");
	header("Location: " . SED_ABSOLUTE_URL . $redir);
	exit;
	}

elseif (mb_substr($pag['page_text'], 0, 8)=='include:')
	{
	$pag['page_text'] = sed_readraw('datas/html/'.trim(mb_substr($pag['page_text'], 8, 255)));
	}
В группе операторов
if ($pag['page_state'] == 1 && !$usr['isadmin'] && $usr['id'] != $pag['page_ownerid'])
{
	sed_log("Attempt to directly access an un-validated page", 'sec');
	header("Location: " . SED_ABSOLUTE_URL . sed_url('message', "msg=930", '', true));
	exit;
}
модуль определяет, что если входная страница имеет статус не утвержденной страницы, и что эта страница не юзера и что зашел не админ (модератор), то такую страницу читать нельзя (не положено).
Выводится сообщение Attempt to directly access an un-validated page
и производится перенаправление к загрузке модуля в SED_ABSOLUTE_URL для этого сайта это http_://www.cotonti.com т.е. в самое начало. НО, текущий процесс работы модуля идет! Оператор exit; прекращает его жизнь.
Теперь посмотрим на другой участок
if (mb_substr($pag['page_text'], 0, 6)=='redir:')
	{
	$redir = str_replace('redir:', '', trim($pag['page_text']));
	$sql = sed_sql_query("UPDATE $db_pages SET page_filecount=page_filecount+1 WHERE page_id='".$pag['page_id']."'");
	header("Location: " . SED_ABSOLUTE_URL . $redir);
	exit;
	}
Он похож, но не совсем. Смотрим первых 6 знаков в тексте. Если эти знаки команды (наше правило движка) равны слову redir: то мы отсекаем из текста эти знаки а получившуюся часть складываем с SED_ABSOLUTE_URL что мы имеем, мы имеем переход на тот модуль в движке который нам нужен. Браузер через PHP выполняет команду-оператор header. Текущий процесс обработки мы опять прекращаем exit; Этот метод имеет существенный недостаток - происходит перезагрузка всей системы движка, а не подгрузка части программного кода, например из другого модуля (т.е. не как плагина к готовому целому). Происходит замена всего модуля на другой.
Не надо обижаться - это обычный, не быстрый этап освоения профессии программиста. Инструкции по программированию готовят для тех, кто прежде всего, уже это делал не раз. И, следовательно, пережевка, мешает заострить внимание.

Gunslinger! Тут, в моем примере, есть и третий участок. (модуль page.inc.php) попробуйте разобраться, для начала, и вы откроете совсем необычную возможность движка это ...
www.cotonti.mobi

Dit bericht is bewerkt door Sergey (2010-01-30 01:24, 15 jaren ago)