Русский English Deutsch Українська Қазақша

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

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

Вы не вошли.

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

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

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

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

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

Вне форума

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

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

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

fedor-jan пишет:

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

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

Вне форума

#3 2011-12-07 22: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 22: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 00:27:50

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

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

ROZARD пишет:

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

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

Вне форума

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

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

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

Trashcka, Спасибо!

Вне форума

#7 2011-12-09 22: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 22: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 22:11:23

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

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

0.9.2 Release [SVN646]

Вне форума

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

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

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

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

Вне форума

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

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

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

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

Отредактировано fedor-jan (2011-12-09 22:31:49)

Вне форума

#12 2011-12-10 12: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 12:31:34)

Вне форума

#13 2011-12-10 13: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 10: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 11: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 13:50:06

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

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

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

Вне форума

#17 2011-12-15 22: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 22:05:59

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

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

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

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

Вне форума

#19 2011-12-17 13: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 13:21:55)

Вне форума

#20 2011-12-17 13: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 13: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 21: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 22: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);

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

Отредактировано ROZARD (2012-01-13 23:00:19)

Вне форума

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

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

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

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


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

Вне форума

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

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

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

Вне форума

Сейчас в этой теме пользователей: 0, гостей: 1
[Bot] ClaudeBot

Подвал форума

Под управлением FluxBB 1.5.11
Модифицировал Visman

[ Сгенерировано за 0.092 сек, 7 запросов выполнено - Использовано памяти: 636.87 Кбайт (Пик: 689.87 Кбайт) ]