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

Sergey
#22461 30.01.2010 03:54
Так уж принято кем-то и везде, что выражение в шаблоне (template) стоящие в фигурных скобках это тег. Тег (Tag), это то, что должен заменить парсер (часть шаблонизатора). Такое разделение шаблона и программных модулей сделано специально, чтобы программист выполнял свою часть, а скинмейкер свою: творил скины ( кожу - skin). Тег имеет имя, вместо которого парсер подставляет значение. В cotonti принято, что, что-то написанное большими буквами стоящим в фигурных скобках, а затем в шаблоне, то это тег, который формируется парсером, например, так:

$t->parse("MAIN.LIST_ROW");

где MAIN это префикс всех тегов в главной части шаблона, отвечающие выражению LIST_ROW и дальше, т.е
	"LIST_ROW_URL" => $pag['page_pageurl'],
	"LIST_ROW_ID" => $pag['page_id'],
	"LIST_ROW_CAT" => $pag['page_cat'],
	"LIST_ROW_KEY" => htmlspecialchars($pag['page_key']),
	"LIST_ROW_TITLE" => htmlspecialchars($pag['page_title']),
	"LIST_ROW_DESC" => $pag['page_desc'],
	"LIST_ROW_DESC_OR_TEXT" => sed_cutpost($pag['page_text'], 200, false),
	"LIST_ROW_AUTHOR" => htmlspecialchars($pag['page_author']),
	"LIST_ROW_OWNER" => sed_build_user($pag['page_ownerid'], htmlspecialchars($pag['user_name'])),
	"LIST_ROW_DATE" => @date($cfg['formatyearmonthday'], $pag['page_date'] + $usr['timezone'] * 3600),
	"LIST_ROW_FILEURL" => empty($pag['page_url']) ? '' : sed_url('page', 'id='.$pag['page_id'].'&a=dl'),
	"LIST_ROW_SIZE" => $pag['page_size'],
	"LIST_ROW_COUNT" => $pag['page_count'],
	"LIST_ROW_FILEICON" => $pag['page_fileicon'],
	"LIST_ROW_FILECOUNT" => $pag['page_filecount'],
	"LIST_ROW_JUMP" => sed_url('page', $page_urlp.'&a=dl'),
	"LIST_ROW_COMMENTS" => $pag['page_comments'],
	"LIST_ROW_RATINGS" => $list_ratings,
	"LIST_ROW_ADMIN" => $pag['admin'],
	"LIST_ROW_ODDEVEN" => sed_build_oddeven($jj),
    "LIST_ROW_NUM" => $jj
Однако, имеются переменные, которые вставляются как теги. Для этих тегов имеется правило:
PHP.имя_переменной.ассоциативный_код
вот пример из шаблона list.tpl
<tr>
	<td class="coltop">{LIST_TOP_TITLE} {LIST_TOP_COUNT}</td>
	<td class="coltop" style="width:96px;">{PHP.L.Comments}</td>
	<td class="coltop" style="width:96px;">{PHP.L.Ratings}</td>
	<td class="coltop" style="width:96px;">{LIST_TOP_DATE}</td>
	<td class="coltop" style="width:128px;">{LIST_TOP_AUTHOR}</td>
</tr>
теги LIST_TOP_DATE и LIST_TOP_AUTHOR, а PHP.L.Comments и PHP.L.Ratings это переменные PHP: $L['Comments'] и $L['Ratings'].
Все теги которые не были "запарсены" префиксно, парсятся в конце модуля оператором

$t->parse("MAIN");

а выводится во внешний поток (на экран юзера) оператором

$t->out("MAIN");

Надо помнить, что сколько раз вы включили $t->parse() столько раз, эта часть шаблона парсится. Так получаются таблицы. Вот этот участок в list.inc.php
	$t-> assign(array(
		"LIST_ROWCAT_URL" => sed_url('list', 'c='.$i),
		"LIST_ROWCAT_TITLE" => $x['title'],
		"LIST_ROWCAT_DESC" => $x['desc'],
		"LIST_ROWCAT_ICON" => $x['icon'],
		"LIST_ROWCAT_COUNT" => $sub_count,
		"LIST_ROWCAT_ODDEVEN" => sed_build_oddeven($kk),
        "LIST_ROWCAT_NUM" => $kk,
		));

		/* === Hook - Part2 : Include === */
		if (is_array($extp))
		{ foreach($extp as $k => $pl) { include($cfg['plugins_dir'].'/'.$pl['pl_code'].'/'.$pl['pl_file'].'.php'); } }
		/* ===== */


		$t->parse("MAIN.LIST_ROWCAT");
Имеется еще одно замечательное определение, точнее переопределение. До парсинга, у тега можно изменить значение двумя способами, вот пример, обращение как элементу класса через функцию $t-> assign() и как к элементу массива через имя тега:

$t->vars["ИМЯ_ТЕГА"]
if	(isset($mesg_elink) and !empty ($mesg_elink))   // сообщение на странице отображения элемента
	{
	if	(isset($t->vars["PAGE_MSG"]))
		{
		$t->vars["PAGE_MSG"] .= "<br />".$mesg_elink;
		}
		else
			{
			$t->assign(array("PAGE_MSG" => $mesg_elink));
			}
	}
В этот примере определяется, был ли каким-то плагином, сформирован тег PAGE_MSG Если он не сформирован, то тег генерируется, а если тег есть, то он дополняется новым сообщением. Не заменяется, как в первом случае, а дополняется или модифицируется.
Впрочем ссылка на шаблонизатор уже приведена.
www.cotonti.mobi