Вы не зашли.
вобщем, решил разобраться
http://wiki.ngcms.ru/index.php/Готовый_пример_плагина вот такой плагин запилил, вроде работает (гы ну конфиг открывается)
у меня есть веб форма (html с полями + .php) которая добавляет в MySQL таблицу записи. надо её в этот плагин запихнуть, чтобы замутить проверку пользователя, перед добавлением в базу.
я видел в мануале скрипты для вывода в статику и для создания собственной страницы плагина, но невъеду чегото где их писать и что они именно выводить будут - я не программист.
поясните как это лучше сделать, и где подробнее вся эта система разжёвана.
Не в сети
где подробнее вся эта система разжёвана.
Посмотреть как другие плагины сделаны...
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
непонимаю, ну начнём с малого, как сделать чтобы плагин выводил просто мою форму (input поля и кнопка submit)?
register_plugin_page($pname, $mode, $func_name, $show_template = 1)
как это использовать?
Не в сети
Создаешь папку test в /engine/plugins/ в этой папке создаешь:
-Файл version с содержимым:
ID: test
Name: test
Version: 0.1
Actions: ppages; test.php
Type: plugin
Title: test
Description: test
Author: test
Author_URI: http://rozard.ngdemo.ru
preinstall: no
-Файл test.php с содержимым (новый шаблонизатор):
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $twig, $template, $SYSTEM_FLAGS;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
$tVars = array(
'test' => 'Првоеряем тег в шаблоне', //Для провекри в шаблон test.tpl нужно добавить {{test}}
);
$template['vars']['mainblock'] = $xt->render($tVars);
}
Старый шаблонизатор:
function plugin_test()
{global $tpl, $template, $SYSTEM_FLAGS;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
$tVars['vars'] = array(
'test' => 'Првоеряем тег в шаблоне', //Для провекри в шаблон test.tpl нужно добавить {test}
);
$tpl -> template('test', $tpath['test']);
$tpl -> vars('test', $tVars);
$template['vars']['mainblock'] = $tpl -> show('test');
}
-Создаешь папку tpl и в ней создаешь файл: test.tpl и в него помещаешь свою форму.
Он должен быть доступен по адресу: http://ТВОЙ_САЙТ/plugin/test/
Набросал сходу и не тестил, но работать должно...
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
Trashcka, Спасибо!
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
спасибо за ответ
вот тут что то не так
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
возвращает ошибку
Fatal error: Call to a member function loadTemplate() on a non-object in....
открыл мануалы twiq, и у меня возник вопрос а что это за переменная $xt?
Не в сети
спасибо за ответ
вот тут что то не так
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
возвращает ошибку
Fatal error: Call to a member function loadTemplate() on a non-object in....открыл мануалы twiq, и у меня возник вопрос а что это за переменная $xt?
Версия ngcms какая?
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
fedor-jan, В этой версии нет твига. см. пост 4.
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
появились ещё вопросы.
допустим в test.tpl я создаю форму добавления новости <form><input1><input2>...</form> она добавляент простую текстовую информацию, в MySQL
скрипт добавления полей надо писать в test.php
как завязать исполнение формы на test.php (мне ведь ненужно чтобы он весь срабатывал)
в плагине uprofile это реализовано так
<form id="profileForm" method="post" action="{form_action}" enctype="multipart/form-data">
а переменная form_action - в php прописана так
'form_action'=>generateLink('core', 'plugin', array('plugin' => 'uprofile', 'handler' => 'apply')),
как это работает, подойдёт ли это для моих целей или можно сделать проще?
Изменено fedor-jan (2011-12-10 13:31:34)
Не в сети
Содержимое test.php:
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $tpl, $template, $SYSTEM_FLAGS;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
if($_REQUEST['submit']){
print 'Форма отправлена';
}
$tVars['vars'] = array(
'test' => 'Првоеряем тег в шаблоне', //Для провекри в шаблон test.tpl нужно добавить {test}
);
$tpl -> template('test', $tpath['test']);
$tpl -> vars('test', $tVars);
$template['vars']['mainblock'] = $tpl -> show('test');
}
Содержимое test.tpl:
<form method="post" action="">
<input type="submit" name="submit" value="Отправить" />
</form>
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
вобщем обновился я до последней версии, получилось у меня вот-так
<form method="post" action="">
<input type="text" name="a"></input>
<input type="text" name="b"></input>
<input type="submit" name="submit" value="Отправить" />
</form>
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $twig, $template, $SYSTEM_FLAGS;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
if($_REQUEST['submit']){
$a=$_POST['a'];
$b=$_POST['b'];
echo $a;
echo $b;
print 'Форма отправлена';
}
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
$tVars = array(
'test' => 'Првоеряем тег в шаблоне', //Для провекри в шаблон test.tpl нужно добавить {{test}}
);
$template['vars']['mainblock'] = $xt->render($tVars);
}
?>
всё работает, переменные выводятся.
в базе создана таблица ng_adds с полями "a" и "b"
ВОПРОС 1: как в неё через переменную $mysql фигачить записи?
ВОПРОС 2: если в tpl будет ещё одна форма, и добавлять она будет данные в другую таблицу. (формы будут в табах - одновременно на экране только одна будет отображаться)
как правильно развести с них данные в разные таблицы?
Не в сети
ОТВЕТ 1:
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $twig, $template, $SYSTEM_FLAGS, $mysql;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
if($_REQUEST['submit']){
$a=$_POST['a'];
$b=$_POST['b'];
echo $a;
echo $b;
print 'Форма отправлена';
$mysql->query('INSERT INTO '.prefix.'_adds
(a,
a)
VALUES
( '.db_squote($a).',
'.db_squote($a).',
)
');
}
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
$tVars = array(
'test' => 'Првоеряем тег в шаблоне', //Для провекри в шаблон test.tpl нужно добавить {{test}}
);
$template['vars']['mainblock'] = $xt->render($tVars);
}
ОТВЕТ 2:
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $twig, $template, $SYSTEM_FLAGS, $mysql;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
if($_REQUEST['submit']){
$a=$_POST['a'];
$b=$_POST['b'];
$c=$_POST['c'];
$d=$_POST['d'];
echo $a;
echo $b;
print 'Форма отправлена';
//форма первая
if( isset($a) && isset($b) )
$mysql->query('INSERT INTO '.prefix.'_adds
(a,
a)
VALUES
( '.db_squote($a).',
'.db_squote($a).',
)
');
//Форма вторая
if(isset($c) && isset($d))
$mysql->query('INSERT INTO '.prefix.'_adds2
(c,
d)
VALUES
( '.db_squote($c).',
'.db_squote($d).',
)
');
}
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
$tVars = array(
'test' => 'Првоеряем тег в шаблоне', //Для провекри в шаблон test.tpl нужно добавить {{test}}
);
$template['vars']['mainblock'] = $xt->render($tVars);
}
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
я продалжаю разбираться.
нужно настроить вывод.
я седлал
.php
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $twig, $template, $SYSTEM_FLAGS, $mysql;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
$query = 'SELECT a, b FROM '.prefix.'_adds';
foreach ($mysql->select($query) as $row) {
$tVars = array(
'a' => $row['a'],
'b' => $row['b']
);}
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
$template['vars']['mainblock'] = $xt->render($tVars);
}
?>
.tpl
{{a}}{{b}}
выводит только последние значения из таблицы.
a и b надо както array'ами задать?
настроить путь к создаваемой странице каким способом можно? (хочу чтоб красиво /test/ а не /plugin/test/)
Не в сети
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $twig, $template, $SYSTEM_FLAGS, $mysql;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
$tRecs = array();
$query = 'SELECT a, b FROM '.prefix.'_adds';
foreach ($mysql->select($query) as $row) {
$tRecs []= array(
'a' => $row['a'],
'b' => $row['b']
);
}
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
$template['vars']['mainblock'] = $xt->render($tVars);
}
?>
сделал так - неработает.
как правильно использовать trecs?
Изменено fedor-jan (2011-12-17 14:21:55)
Не в сети
<?php
if (!defined('NGCMS'))
exit('HAL');
register_plugin_page('test','','plugin_test');
function plugin_test()
{global $twig, $template, $SYSTEM_FLAGS, $mysql;
$SYSTEM_FLAGS['info']['title']['group'] = 'Проверка тестовой страницы';
$tpath = locatePluginTemplates(array('test'), 'test', 1);
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
$query = 'SELECT a, b FROM '.prefix.'_adds';
foreach ($mysql->select($query) as $row) {
$tRecs []= array(
'a' => $row['a'],
'b' => $row['b']
);
}
$tVars = array(
'entries' => $tRecs
);
$template['vars']['mainblock'] = $xt->render($tVars);
}
В шаблон:
{% for entry in entries %}
{{entry.b}}{{entry.a}}
{% endfor %}
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
ROZARD, а не подскажешь по твигу когда используется не один а несколько файлов в шаблоне?
например сейчас имеем entries.tpl который выводит однотипные данные и my_plugin.tpl который является контейнером, в my_plugin.tpl в определенном месте стоит {entries}
для него беру данные их массива и вывожу "по-старому"
$tpl -> template('entries', $tpath['entries']);
$tpl -> vars('entries', $tvars);
$v .= $tpl -> show('entries');
собсно собираю тоже "по-старому"
$tvars['vars'] = array ( 'entries' => $v);
$tpl -> template('my_plugin', $tpath['my_plugin']);
$tpl -> vars('my_plugin', $tvars);
$output .= $tpl -> show('my_plugin');
$template['vars']['mainblock'] = $output;
хотелось бы перевести это дело на твиг... реально файлов от шаблона больше, но думаю что имея пример с двумя, разбирусь...
Проекты любой сложности. Качественно. Дорого.
Не в сети
$xg = $twig->loadTemplate($tpath['entries'].'entries.tpl');
$tVars = array(
'' => '',
'' => '',
'' => '',
'' => '',
);
$v.= $xg->render($tVars);
$xt = $twig->loadTemplate($tpath['my_plugin'].'my_plugin.tpl');
$tVars = array(
'entries' => $v
);
$template['vars']['mainblock'] = $xt->render($tVars);
Но так лучше не делать
Изменено ROZARD (2012-01-14 00:00:19)
xmpp://ngcms@conf.ngcms.ru
Настройка клиента для подключения к конференции
Не в сети
спасибо, но...
0. выводится лишь один entries - на старом выводились все полученные в цикле
1. почему так не делать?
2. как тогда надо делать?
3. с кешированием тоже меняется синтаксис если юзать твиг?
4. а вообще он нужен или ну его, не заморачиваться и делать по-старому? задача стоит такова что один плагин будет выводить разные блоки информации, т.е. этих самый entries-ов будет от 1 до 4-ех, полагал что с твигом будет проще
Проекты любой сложности. Качественно. Дорого.
Не в сети
t3s, хороший пример можно найти в engine/actions/news.php
В SVN версии найди строку 824 и обрати внимание на:
$newsEntries = array();
foreach ($mysql->select($sqlResult) as $row) {
$newsEntry = array(...тут заполнение);
....
$newsEntries []= $newsEntry;
}
...
$tVars = array(
'entries' => $newsEntries,
...
'flags' => array(
'comments' => getPluginStatusInstalled('comments')?true:false,
'allow_modify' => ($userROW['status'] <= 2)?true:false,
),
);
Т.е. ты создаёшь массив записей и с ними уже работает TWIG.
А вот шаблон:
...
{% for entry in entries %}
<tr align="left" >
<td width="30" class="contentEntry1">{{ entry.newsid }}</td>
<td width="60" class="contentEntry1">{{ entry.itemdate }}</td>
<td width="48" class="contentEntry1" cellspacing=0 cellpadding=0 style="padding:0; margin:0;" nowrap>
...
{% else %}
<tr><td colspan="6"><p>- {{ lang.editnews['not_found'] }} -</p></td></tr>
{% endfor %}
...
Не в сети