You are hereБлоги / Ёж's blog / Seagull PHP Framework - создание действия

Seagull PHP Framework - создание действия


Ёж 04 May 2009

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

Прежде всего стоит отметить, что стандартным движком для генерирования HTML-страниц в Seagull является движок Flexy. Именно на этом движке строится модуль в данных статьях. Важные особенности этого движка:
1. все переменные и имена функций должны быть взяты в фигурные скобки
2. никогда не используйте пробелы между переменными, в случае использования их как аргументов, Flexy такое не приветствует

Итак, сперва сгенерирую какую-нибудь ссылку. Для этого в Seagull можно использовать функцию makeUrl().

{makeUrl()}

При использовании функции без параметров ссылка будет вести просто на ту страницу, на которой мы и находились до этого. Например, добавьте в файл helloWorld.html следующее:

<a href="{makeUrl()}">say good bye</a>

Но вообще, функция эта имеет три параметра:

{makeUrl(action,manager,module)}

action - имя некоего действия, manager - имя модуля, ну и, соответственно, module - третий параметр, имя модуля. Давайте вызовем эту функцию, используя один только первый параметр. Ещё одна важная особенность движка Flexy - если в параметрах используется не имя переменной, а литерал, то его нужно брать в знак хэша (#).

<a href="{makeUrl(#sayGoodBye#)}">say good bye</a>

Если Вы посмотрите исходный код страницы в браузере, то Вы увидите ссылку вот такого вида:

<a href="http://localhost/seagull/www/index.php/helloworld/action/sayGoodBye/">say good bye</a>

Вот - а теперь добавим немного кода в наш класс HelloWorldMgr, чтобы соответствующее действие выполнилось. Добавляем в наш класс вот такой конструктор:

function HelloWorldMgr()
    {
        parent::SGL_Manager();
        $this->_aActionsMapping =  array(
            'sayGoodBye'   => array('sayGoodBye'),
        );
    }

Это нужно для того, чтобы сказать Segull, какие конкретно методы будут призваны для того, чтобы выполнить действие, зависящее от значения параметра action. Пока у нас параметр только один - sayGoodBye, вот его мы и перечисляем.

Для валидации этой переменной добавляем в класс ещё одну функцию validate:

function validate($req, &$input)
    {
        $this->validated = true;
        $input->action   = $req->get('action');
    }

Объяснение вышерасположенного кода можно посмотреть тут.

Осталось немного. Добавляю функцию, которая выводит некоторый текст (в нашем случае это слово Goodbye) в новую переменную word:

function _cmd_sayGoodBye(&$input, &$output)
    {
        $output->word = 'Goodbye';
    }

Теперь осталось только немного подправить файл шаблона, во-первых, вывести ту самую переменную word в фигурных скобках, ну и сделать ссылку, при нажатии на которую будет появляться надпись Goodbye. Также я поменял вывод - теперь выводится не Hello World!, а просто World!

Итак, финальный вид того, как будет выглядеть теперь файл helloWorld.html:

{word}  {testVariable}

<p><a href="{makeUrl(#sayGoodBye#)}">say good bye</a></p>

Всё. Сохраняйте изменения, перезапускайте модуль. Появится надпись World!, а под ней ссылка say good bye, при нажатии на которую действительно перед World! добавляется Goodbye.

Goodbye World!

Продолжение следует...

С уважением, Ёж.

]]>]]>
ССылки

RSS-материал