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

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

Вы не зашли.

#1 2011-12-07 21:31:55

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

разбираюсь в плагинной системе, есть вопрос

вобщем, решил разобраться
http://wiki.ngcms.ru/index.php/Готовый_пример_плагина вот такой плагин запилил, вроде работает (гы ну конфиг открывается)
у меня есть веб форма (html с полями + .php) которая добавляет в MySQL таблицу записи. надо её в этот плагин запихнуть, чтобы замутить проверку пользователя, перед добавлением в базу.
я видел в мануале скрипты для вывода в статику и для создания собственной страницы плагина, но невъеду чегото где их писать и что они именно выводить будут - я не программист.

поясните как это лучше сделать, и где подробнее вся эта система разжёвана.

Не в сети

#2 2011-12-07 22:04:32

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

fedor-jan пишет:

где подробнее вся эта система разжёвана.

Посмотреть как другие плагины сделаны...

Не в сети

#3 2011-12-07 23:29:11

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

непонимаю, ну начнём с малого, как сделать чтобы плагин выводил просто мою форму (input поля и кнопка submit)?
register_plugin_page($pname, $mode, $func_name, $show_template = 1)
как это использовать?

Не в сети

#4 2011-12-07 23:57:26

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

Создаешь папку 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/

Набросал сходу и не тестил, но работать должно...

Не в сети

#5 2011-12-08 01:27:50

Trashcka
Участник
Откуда КиевГрад
Зарегистрирован: 2008-12-04
Сообщений: 1,487
Рейтинг :   73 

Re: разбираюсь в плагинной системе, есть вопрос

ROZARD пишет:

-Создаешь папку tpl и в ней создаешь файл: test.php

ROZARD ты запечатался ))) test.tpl

Не в сети

#6 2011-12-08 09:31:20

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

Trashcka, Спасибо!

Не в сети

#7 2011-12-09 23:01:43

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

спасибо за ответ
вот тут что то не так
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
возвращает ошибку
Fatal error: Call to a member function loadTemplate() on a non-object in....

открыл мануалы twiq, и у меня возник вопрос а что это за переменная $xt?

Не в сети

#8 2011-12-09 23:07:25

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

fedor-jan пишет:

спасибо за ответ
вот тут что то не так
$xt = $twig->loadTemplate($tpath['test'].'test.tpl');
возвращает ошибку
Fatal error: Call to a member function loadTemplate() on a non-object in....

открыл мануалы twiq, и у меня возник вопрос а что это за переменная $xt?

Версия ngcms какая?

Не в сети

#9 2011-12-09 23:11:23

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

0.9.2 Release [SVN646]

Не в сети

#10 2011-12-09 23:17:33

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

fedor-jan, В этой версии нет твига. см. пост 4.

Не в сети

#11 2011-12-09 23:30:09

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

да, прошу прощения за невнимательность, всё заработало.
пока побую дальше разобраться сам, спасибо

Изменено fedor-jan (2011-12-09 23:31:49)

Не в сети

#12 2011-12-10 13:31:12

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

появились ещё вопросы.
допустим в 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)

Не в сети

#13 2011-12-10 14:35:51

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

Содержимое 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>

Не в сети

#14 2011-12-11 11:55:40

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

вобщем обновился я до последней версии, получилось у меня вот-так

<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 будет ещё одна форма, и добавлять она будет данные в другую таблицу. (формы будут в табах - одновременно на экране только одна будет отображаться)
как правильно развести с них данные в разные таблицы?

Не в сети

#15 2011-12-11 12:25:11

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

ОТВЕТ 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);
}

Не в сети

#16 2011-12-11 14:50:06

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

спасибо, всё работает

Не в сети

#17 2011-12-15 23:04:17

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

я продалжаю разбираться.
нужно настроить вывод.
я седлал

.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/)

Не в сети

#18 2011-12-15 23:05:59

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: разбираюсь в плагинной системе, есть вопрос

$tRecs = array();
foreach ($mysql->select($query) as $row) {
    $tRecs []= array(
            'a'        =>    $row['a'],
            'b'        =>    $row['b']
                    );
}

и используешь $tRecs

Не в сети

#19 2011-12-17 14:20:27

fedor-jan
Участник
Откуда на раёне
Зарегистрирован: 2011-09-04
Сообщений: 79
Рейтинг :   

Re: разбираюсь в плагинной системе, есть вопрос

<?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)

Не в сети

#20 2011-12-17 14:55:22

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

<?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 %}

Не в сети

#21 2011-12-17 14:55:32

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

Re: разбираюсь в плагинной системе, есть вопрос

Ох. Вы делаете

$template['vars']['mainblock'] = $xt->render($tVars);

а надо

$template['vars']['mainblock'] = $xt->render($tRect);

Не в сети

#22 2012-01-13 22:56:40

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

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;

хотелось бы перевести это дело на твиг... реально файлов от шаблона больше, но думаю что имея пример с двумя, разбирусь...


Проекты любой сложности. Качественно. Дорого.

Не в сети

#23 2012-01-13 23:05:38

ROZARD
Модератор
Откуда Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1,523
Рейтинг :   82 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

$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);

Но так лучше не делать smile

Изменено ROZARD (2012-01-14 00:00:19)

Не в сети

#24 2012-01-13 23:56:13

t3s
Участник
Откуда планета The мля...
Зарегистрирован: 2009-04-09
Сообщений: 228
Рейтинг :   13 
Сайт

Re: разбираюсь в плагинной системе, есть вопрос

спасибо, но...
0. выводится лишь один entries - на старом выводились все полученные в цикле
1. почему так не делать?
2. как тогда надо делать?
3. с кешированием тоже меняется синтаксис если юзать твиг?
4. а вообще он нужен или ну его, не заморачиваться и делать по-старому? задача стоит такова что один плагин будет выводить разные блоки информации, т.е. этих самый entries-ов будет от 1 до 4-ех, полагал что с твигом будет проще


Проекты любой сложности. Качественно. Дорого.

Не в сети

#25 2012-01-13 23:57:10

vitaly
Администратор
Откуда Россия
Зарегистрирован: 2008-10-08
Сообщений: 2,823
Рейтинг :   118 

Re: разбираюсь в плагинной системе, есть вопрос

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 %}
...

Не в сети

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

Работает на FluxBB