Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2013-02-25 18:00:26

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Как написать плагин?

Вопрос на первый взгляд нелепый, но нехватает документации. В вики примеры есть, но что конкретно делает каждая инструкция неясно.
Поэтому здесь хочу задавать конкретные вопросы, что мне не ясно, чтобы написать свой плагин. Прошу тех, кто знает, помочь разобраться в этой всей структуре.
  Итак первые вопросы:
Что делает функция locatePluginTemplates? Что за аргументы, и что возвращает?
Методы:

$tpl -> template()
$tpl -> vars()
$output = $tpl -> show()

Что каждый из них делает? Вижу это в каждом плагине, но как ими пользоваться - не знаю.

Не в сети

#2 2013-02-25 23:17:11

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Как написать плагин?

Что делает функция locatePluginTemplates? Что за аргументы, и что возвращает?

принимает три главных параметра:

function locatePluginTemplates($tname, $plugin, $localsource = 0, $skin = '', $block = '')

$tname        - template names (in string array or single name) - имя шаблона, например lastcomments.tpl - шаблон последних комментариев
$plugin        - plugin name - имя плагина
$localSource        - определяет где искать этот шаблон, если 0, то в папке с шаблоном сайта, если 1, то в папке с плагином.

Пример вызова

$tpath = locatePluginTemplates(array('lasttweets', 'entries'), 'lasttweets', intval(pluginGetVariable('lasttweets', 'localsource')));

Этим мы говорим - верни-ка нам путь к шаблонам lasttweets.tpl и entries.tpl для плагина lasttweets.


Методы:
Код:
$tpl -> template()
$tpl -> vars()
$output = $tpl -> show()

Что каждый из них делает? Вижу это в каждом плагине, но как ими пользоваться - не знаю.

$tpl - экземпляр класса старого шаблонизатора

$tpl -> template('lasttweets', $tpath['lasttweets']);

загрузит файлик шаблона с диска в переменную

$tpl -> vars('lasttweets', array ('vars' => array (
			 'entries' => $tweets,
			 'title' => $channel_title, 
			 'link' =>  $channel_link
			)));

Служит для реализации подстановочных переменных. В шаблоне у тебя {link}, ты его в коде динамически сгенерировал, передал в шаблонизатор, он выполнил подстановку.

$tpl -> show('lasttweets')  - вернет текст, в котором выполнены все подстановки переменных и который уже можно в браузере показать пользователю

Не в сети

#3 2013-02-26 17:22:09

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Wolverine, огромное спасибо. Уже прояснилось намного smile
Ещё эти функции мутными остаются:
checkLinkAvailable()
generateLink()

Из названия предполагаю, что они генерируют ссылки, только как ими правильно пользоваться и ссылка уже в виде тэга или только адрес получается?
И ещё такой вопрос: как выделить для плагина свою страницу, чтобы он имел свой ЧПУ (как архивы), и как генерировать ссылки на эти его страницы?
Спасибо.

Не в сети

#4 2013-02-26 22:20:34

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Как написать плагин?

checkLinkAvailable() - проверяет определен ли такой обработчик для плагина

Пока единственно где видел его использование, это в плагине uprofile для совместимости со старой версией. Эта функция ничего не генерирует.

$alink = checkLinkAvailable('uprofile', 'show')?
						generateLink('uprofile', 'show', array('name' => $row['uname'], 'id' => $row['uid'])):
						generateLink('core', 'plugin', array('plugin' => 'uprofile', 'handler' => 'show'), array('name' => $row['uname'], 'id' => $row['uid']));

generateLink() - генерирует ссылку для любой строки из Управления форматом ссылок

Например для

d1fa5ee2b10622ffba9f22d0336d47bd.jpg

вызов будет

generateLink('news', 'by.year', array('year' => $params['year']))

Не в сети

#5 2013-03-03 18:28:31

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Wolverine пишет:
$alink = checkLinkAvailable('uprofile', 'show')?
						generateLink('uprofile', 'show', array('name' => $row['uname'], 'id' => $row['uid'])):
						generateLink('core', 'plugin', array('plugin' => 'uprofile', 'handler' => 'show'), array('name' => $row['uname'], 'id' => $row['uid']));

Спасибо, кстати я заметил, что точно такой код используется в функции generatePluginLink - т.е. надо наверно её использовать вместо этой конструкции?
Ещё есть вопрос по функции register_plugin_page() - она в админке страницу для плагина делает или на сайте, или вообще что-то другое?
И в реализации последний параметр почему-то не используется. Зачем он тогда нужен?

Не в сети

#6 2013-03-03 19:35:03

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Как написать плагин?

register_plugin_page используется для регистрации страницы плагина на сайте.

Последний параметр не нужен - исторически сложилось.

Не в сети

#7 2013-03-04 19:54:56

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Спасибо. Требуется выполнить такую задачу: вывести на странице плагина на сайте список новостей в короткой форме, соответствующих некоторому критерию.
Я так понял, что надо использовать наилучше будет функцию news_showlist(). Её можно в плагине использовать? Нужны ли load_extras или что-то в этом роде? И она строку возвращает сформированную по шаблону news.short.tpl?
В каком формате надо задать первый параметр? Это должен быть массив, но какой... У меня условие SQL

WHERE $var IN `column_name`

Или я на ложном пути, так не пойдёт?

Не в сети

#8 2013-03-05 00:34:49

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Как написать плагин?

см. http://ngcms.ru/forum/viewtopic.php?id=1412

Интересующий тебя блок и использованием news_showlist

# personal plugin pages for display all user's bookmarks
function bookmarksPage(){
....
}

Не в сети

#9 2013-03-09 19:18:13

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Ещё раз благодарю за помощь, но ещё раз вынужден просить.
Написал я как-то первую версию своего плагина, добился лишь того, что на сайте не выбивает ошибок php, плагин нифига не хочет работать. причём даже не сама логика, а вообще не интегрируется что-ли.
Дело такое:
В шаблон news.full ставлю

[isplugin plugin_name]{plugin_name}[/isplugin]

Надо отметить, что условие срабатывает, но вместо {plugin_name} постоянно выдаётся пустая строка.
В самом коде плагина я написал самое элементарное:

class TKNewsFilter extends NewsFilter {
        function showNews($newsID, $SQLnews, &$tvars,$mode = array()) {
        global $tpl;

	$tvars['vars']['plugin_name'] = "Плагин";
}
}
register_filter('news','plugin_name', new TKNewsFilter);

Т.е. без всяких шаблонов и запросов, просто вывести статический текст на месте плагина. А выводит ровно NULL sad
Почему не работает, можете подсказать куда копать? Смотрел в других плагинах - код аналогичный и работают а мой нет...

Не в сети

#10 2013-03-10 18:51:36

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Как написать плагин?

Приложи архив, так сложно разобрать проблему.

Не в сети

#11 2013-03-10 19:33:57

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Вот пожалуйста,

Не в сети

#12 2013-03-10 22:56:15

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Как написать плагин?

Дело в парсере переменных вида plugin_

см. templates.class.php

// Special variable {plugin_<NAME>...} ({plugin_ads}, {plugin_ads_var1} for plugin ads) - will be showed only if plugin <NAME> is active

Когда ты вставляешь переменную plugin_tags_keywords, то проверяется включен ли плагин tags, а не как ты ожидаешь tags_keywords. Если не включен, то переменную не отображаем.

Варианты решения - называть плагин без подчеркивания или именовать переменные без специального слова plugin.

Не в сети

#13 2013-03-12 00:23:31

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Wolverine пишет:

Дело в парсере переменных вида plugin_

Спасибо. В шаблоне убрал plugin_ заработало! smile Никогда бы не подумал, что подчеркивание может быть причиной..
Так, вроде теперь все пашет как я хотел, но с УРЛами проблемы.
Вобщем у меня есть страница плагина. Теперь имеет вид:

/plugins/tags_keywords/?tag=something

и работает.
Я хочу сделать, чтобы было более короткое, типа:

/tags/?tag=something

и никак не работает.
Здесь на форуме нашел пример для gsmg чтобы в urlconf.php добавить строчки и можно настроить в админке свой адрес. Для него работает.
А я также сделал для своего плагина - и ошибка 404, я уже переносил в списке выше, как раньше решал такую проблему, но всё безрезультатно.

Не в сети

#14 2013-03-12 10:45:01

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Как написать плагин?

есть файл tags.tpl  и надо вывести его в main.tpl в head.создал файл tags.php сделал по аналогично как здесьhttp://ngcms.ru/forum/viewtopic.php?pid=34131#p34131
но он выводит в админке в шаблоне редактирования шаблонов,как переделать ?

Не в сети

#15 2013-03-12 22:30:31

Wolverine
Модератор
Откуда Домодедово
Зарегистрирован: 2008-10-13
Сообщений: 3,538
Рейтинг :   160 
Сайт

Re: Как написать плагин?

JancoNG, опять же, без примера того, что не работает подсказать невозможно smile

Не в сети

#16 2013-03-12 23:24:18

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Ну а как я пример дам? Это весь сайт с установленным плагином и своими настройками. Мне нужно просто ЧПУ настроить для моего плагина.
Вот пример, как делать для gsmg. И для gsmg это тметод работает, а когда я таким же способом задаю URL для своего плагина, выдаётся ошибка 404, а не та страница.

Не в сети

#17 2013-03-13 08:00:05

Knopik
Разработчик
Откуда ufa
Зарегистрирован: 2009-10-14
Сообщений: 353
Рейтинг :   62 
Сайт

Re: Как написать плагин?

JancoNG, глянь install.php в плагине quotes, ~54 строки

Не в сети

#18 2013-03-13 08:27:48

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Как написать плагин?

<?php if(!defined('NGCMS')) die('No direct script access allowed');

function tblank(){
    global $mod, $skin_header;
    if($mod!='templates') return;

    $template = '';

    $is_jquery = false;
    $is_jquery = !!(strpos($skin_header, 'jquery'));
 if(!$is_jquery) $template .= '<script src="//ajax.googleapis.com/ajax/libs/jquery/1.2.3/jquery.min.js"></script>';


    $template .= file_get_contents(dirname(__FILE__).'/tpl/tags.tpl');
    $template .= '</head>';

    $skin_header = preg_replace('!</head>!i', $template, $skin_header);
}

add_act('admin_header', 'tblank');

подскажите ,что надо исправить чтобы выводилось В main.tpl в head

Изменено irbees2008 (2013-03-13 14:52:10)

Не в сети

#19 2013-03-13 18:39:30

JancoNG
Участник
Зарегистрирован: 2013-02-20
Сообщений: 24
Рейтинг :   

Re: Как написать плагин?

Knopik, спасибо, но там как понимаю только регистрируется добавочный элемент для настройки ЧПУ. До этого этапа у меня получается - адрес назначаю. Дело в том, что тот адрес который я указываю на странице ЧПУ не работает.
irbees2008 наверно это:

add_act('admin_header', 'tblank');

Не в сети

#20 2013-03-14 09:40:20

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Как написать плагин?

уже и так пробывал может кто обьяснит?

<?php 
# protect against hack attempts
if (!defined('NGCMS')) die ('HAL');


register_htmlvar('js', admin_url.'/plugins/tblank/tpl/js/engage.tblank-min.js');

register_htmlvar('css', admin_url.'/plugins/tblank/tpl/css/engage.tblank.css');

add_act('index', 'tblank');

Не в сети

#21 2013-03-15 02:09:25

kt2k
Участник
Зарегистрирован: 2008-10-13
Сообщений: 54
Рейтинг :   

Re: Как написать плагин?

irbees2008, ну оно же работает. не забывай что когда меняешь add_act('index', 'tblank'), то его надо прописывать в version и выключать/включать плагин

Не в сети

#22 2013-03-15 09:45:15

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Как написать плагин?

спасибо разобрался big_smile

Не в сети

#23 2013-03-16 14:22:03

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,873
Рейтинг :   121 
Сайт

Re: Как написать плагин?

проблемка, когда выводится через htmlvar то плагин не работает ,т.е. все подключено ,но не работает,а когда в main прописываешь то работает,пути одни и теже. Что за беда?

Не в сети

Подвал раздела

Работает на FluxBB