Вы не зашли.
Страницы 1
Вопрос на первый взгляд нелепый, но нехватает документации. В вики примеры есть, но что конкретно делает каждая инструкция неясно.
Поэтому здесь хочу задавать конкретные вопросы, что мне не ясно, чтобы написать свой плагин. Прошу тех, кто знает, помочь разобраться в этой всей структуре.
Итак первые вопросы:
Что делает функция locatePluginTemplates? Что за аргументы, и что возвращает?
Методы:
$tpl -> template()
$tpl -> vars()
$output = $tpl -> show()
Что каждый из них делает? Вижу это в каждом плагине, но как ими пользоваться - не знаю.
Не в сети
Что делает функция 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') - вернет текст, в котором выполнены все подстановки переменных и который уже можно в браузере показать пользователю
Не в сети
Wolverine, огромное спасибо. Уже прояснилось намного
Ещё эти функции мутными остаются:
checkLinkAvailable()
generateLink()
Из названия предполагаю, что они генерируют ссылки, только как ими правильно пользоваться и ссылка уже в виде тэга или только адрес получается?
И ещё такой вопрос: как выделить для плагина свою страницу, чтобы он имел свой ЧПУ (как архивы), и как генерировать ссылки на эти его страницы?
Спасибо.
Не в сети
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() - генерирует ссылку для любой строки из Управления форматом ссылок
Например для
вызов будет
generateLink('news', 'by.year', array('year' => $params['year']))
Не в сети
$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() - она в админке страницу для плагина делает или на сайте, или вообще что-то другое?
И в реализации последний параметр почему-то не используется. Зачем он тогда нужен?
Не в сети
Спасибо. Требуется выполнить такую задачу: вывести на странице плагина на сайте список новостей в короткой форме, соответствующих некоторому критерию.
Я так понял, что надо использовать наилучше будет функцию news_showlist(). Её можно в плагине использовать? Нужны ли load_extras или что-то в этом роде? И она строку возвращает сформированную по шаблону news.short.tpl?
В каком формате надо задать первый параметр? Это должен быть массив, но какой... У меня условие SQL
WHERE $var IN `column_name`
Или я на ложном пути, так не пойдёт?
Не в сети
см. http://ngcms.ru/forum/viewtopic.php?id=1412
Интересующий тебя блок и использованием news_showlist
# personal plugin pages for display all user's bookmarks
function bookmarksPage(){
....
}
Не в сети
Ещё раз благодарю за помощь, но ещё раз вынужден просить.
Написал я как-то первую версию своего плагина, добился лишь того, что на сайте не выбивает ошибок 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
Почему не работает, можете подсказать куда копать? Смотрел в других плагинах - код аналогичный и работают а мой нет...
Не в сети
Не в сети
Дело в парсере переменных вида 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.
Не в сети
Дело в парсере переменных вида plugin_
Спасибо. В шаблоне убрал plugin_ заработало! Никогда бы не подумал, что подчеркивание может быть причиной..
Так, вроде теперь все пашет как я хотел, но с УРЛами проблемы.
Вобщем у меня есть страница плагина. Теперь имеет вид:
/plugins/tags_keywords/?tag=something
и работает.
Я хочу сделать, чтобы было более короткое, типа:
/tags/?tag=something
и никак не работает.
Здесь на форуме нашел пример для gsmg чтобы в urlconf.php добавить строчки и можно настроить в админке свой адрес. Для него работает.
А я также сделал для своего плагина - и ошибка 404, я уже переносил в списке выше, как раньше решал такую проблему, но всё безрезультатно.
Не в сети
есть файл tags.tpl и надо вывести его в main.tpl в head.создал файл tags.php сделал по аналогично как здесьhttp://ngcms.ru/forum/viewtopic.php?pid=34131#p34131
но он выводит в админке в шаблоне редактирования шаблонов,как переделать ?
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
Ну а как я пример дам? Это весь сайт с установленным плагином и своими настройками. Мне нужно просто ЧПУ настроить для моего плагина.
Вот пример, как делать для gsmg. И для gsmg это тметод работает, а когда я таким же способом задаю URL для своего плагина, выдаётся ошибка 404, а не та страница.
Не в сети
Не в сети
<?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)
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
Knopik, спасибо, но там как понимаю только регистрируется добавочный элемент для настройки ЧПУ. До этого этапа у меня получается - адрес назначаю. Дело в том, что тот адрес который я указываю на странице ЧПУ не работает.
irbees2008 наверно это:
add_act('admin_header', 'tblank');
Не в сети
уже и так пробывал может кто обьяснит?
<?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');
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
спасибо разобрался
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
проблемка, когда выводится через htmlvar то плагин не работает ,т.е. все подключено ,но не работает,а когда в main прописываешь то работает,пути одни и теже. Что за беда?
жизнь бьёт ключом......,ну иногда и гайкой.....
Хаки и Скрипты| Бесплатные шаблоны NGCMS
На Районе - Шахтинск Украшение Windows
Не в сети
Страницы 1