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

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

rss

Вы не зашли.

Объявление

#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
Сообщений: 1523
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 1487
Рейтинг :   73 
Профиль

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

ROZARD написал:

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

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

Неактивен

 

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

ROZARD
Модератор
Откуда: Россия, Астрахань
Зарегистрирован: 2008-10-13
Сообщений: 1523
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 2788
Рейтинг :   115 
Профиль

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
Сообщений: 1523
Рейтинг :   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
Сообщений: 3538
Рейтинг :   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
Сообщений: 1523
Рейтинг :   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
Сообщений: 2788
Рейтинг :   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 %}
...

Неактивен

 

Board footer

Powered by FluxBB

[ Generated in 0.016 seconds, 33 queries executed ]