Плагин меню

Материал из Документация NGCMS

Перейти к: навигация, поиск

Сейчас рассмотрим на примере простого плагин. Он будет делать случайную выборку из конфига. Он будет состоять из:

  • -menu
    • menu.php
    • config.php
    • version
      • -tpl
        • menu.tpl
        • entries.tpl

Теперь поподробнее рассмотрим каждый файл по отдельности. Писать плагин лучше начинать с файла version, по тому что так удобнее.

version

;
; Version description file for plugin @@ Next Generation CMS
;
 
ID: menu
Name: Menu
Version: 0.02
Acts: index
File: menu.php
Config: config.php
Type: plugin
Description: Менюшка на сайте
Author: Anonimys
Author_URI: http://wiki.ngcms.ru/
Information: Позволяет создавать простое меню на сайте.

menu.php

if (!defined('NGCMS')) { die("Хотел взглянуть что тут? а тут защита от инлюда :)"); }
 
add_act('index', 'plugin_menu');
 
function plugin_menu(){
	global $config, $tpl, $template;
 
	$tpath = locatePluginTemplates(array('entries', 'menu'), 'menu', extra_get_param('menu', 'localsource')); // Откуда мы берём tpl?
 
	for($i=1;$i<=extra_get_param('menu','count');$i++){
		$tvars['vars'] = array(
			'link'			=>	extra_get_param('menu','link'.$i), // {link}
			'descr_url'		=>	extra_get_param('menu','descr_url'.$i) // {descr_url}
			);
		$tpl -> template('entries', $tpath['entries']); // Открываем entries.tpl
		$tpl -> vars('entries', $tvars); // Записываем в entries.tpl
		$result .= $tpl -> show('entries'); 
	}
 
	unset($tvars); // Убиваем $tvars, он нам нужен для другого
 
	$tvars['vars'] = array (
		'tpl_url'	=> tpl_url, // {tpl_url} 
		'menu'		=> $result // {menu}
		);
 
	$tpl -> template('menu', $tpath['menu']); // Открываем menu.tpl 
	$tpl -> vars('menu', $tvars);
	$template['vars']['plugin_menu'] = $tpl -> show('menu');
}

В шаблоне menu.tpl будет доступна переменная {entries}. Для редактирование переменной {entries} используется шаблон entries.tpl В entries.tpl доступны следующие переменные:

  • {link} - url заданный в конфиге
  • {descr_url} - описание, куда нас ведет линк

config.php

if (!defined('NGCMS')) { die("Plugin can be achieved only via main page."); }
plugins_load_config();
 
$cfg = array();
$cfgX = array();
array_push($cfgX, array('name' => 'count', 'title' => 'Пункты меню', 'descr' => 'Кол-во','type' => 'input', value => extra_get_param('menu','count')));
array_push($cfgX, array('name' => 'localsource', 'title' => "Выберите каталог из которого плагин будет брать шаблоны для отображения<br /><small><b>Шаблон сайта</b> - плагин будет пытаться взять шаблоны из общего шаблона сайта; в случае недоступности - шаблоны будут взяты из собственного каталога плагина<br /><b>Плагин</b> - шаблоны будут браться из собственного каталога плагина</small>", 'type' => 'select', 'values' => array ( '0' => 'Шаблон сайта', '1' => 'Плагин'), 'value' => extra_get_param('menu','localsource')));
array_push($cfg,  array('mode' => 'group', 'title' => '<b>Основные настройки</b>', 'entries' => $cfgX));
 
for($i=1;$i<=extra_get_param('menu','count');$i++){
$cfgX = array();
array_push($cfgX, array('name' => 'link'.$i, 'title' => 'Ссылка', 'descr' => 'Url','type' => 'input', value => extra_get_param('menu','link'.$i)));
array_push($cfgX, array('name' => 'descr_url'.$i, 'title' => 'Надпись', 'descr' => 'как вы это увидете', 'type' => 'input', value => extra_get_param('menu','descr_url'.$i)));
array_push($cfg,  array('mode' => 'group', 'title' => '<b>Ссылка №'.$i.'</b>', 'entries' => $cfgX));
}
 
if ($_REQUEST['action'] == 'commit') {
commit_plugin_config_changes('menu', $cfg);
print "Все сохранилась: <a href='admin.php?mod=extra-config&plugin=menu'>жми назад</a>\n";
} else {
generate_config_page('menu', $cfg);
}

В конфиге уже задается количество ссылок, и куда они куда они ведут