PHP-шаблон с Flow3

Создание шаблонов с помощью Flow3 выполняется с использованием гибкого языка шаблонов.

Есть ли интегрированное/простое решение для использования шаблонов PHP вместо этого? (без необходимости самому писать средство визуализации шаблонов)

(во избежание недоразумений: под шаблоном PHP я имею в виду HTML-код, смешанный с PHP)


person Matthieu Napoli    schedule 15.03.2012    source источник


Ответы (2)


Весь смысл жидкости в том, чтобы этого не делать. Для этого вы можете написать собственные viewhelpers.

Быстрым обходным путем было бы написать php-viewhelper, который использует eval(). Но это было бы очень плохо с точки зрения безопасности.

person pgampe    schedule 16.03.2012
comment
Конечно, смысл жидкости не в том, чтобы делать это, но я не хочу использовать жидкость... Например, Zend Framework позволяет создавать представления, используя PHP в качестве механизма шаблонов: framework.zend.com/manual/en/zend.view.scripts.html. - person Matthieu Napoli; 16.03.2012
comment
Вам необходимо создать новый класс представления, поскольку FLOW3 не поставляется с классом представления PHP: api.typo3.org/flow3/master/TYPO3/FLOW3/MVC/View/ - person pgampe; 16.03.2012
comment
Хорошо, жаль, что ничего не делается для этого, спасибо за ссылку, это полезно - person Matthieu Napoli; 16.03.2012

Ваш контроллер имеет защищенное свойство, которое по умолчанию имеет значение Fluid, изменить его на что-то другое очень просто:

    protected $viewFormatToObjectNameMap = array('json' => '\TYPO3\FLOW3\MVC\View\JsonView');

Теперь взгляните на EmptyController в том же каталоге: \TYPO3\FLOW3\MVC\View\

Вы можете использовать это как начало. Что вам в основном нужно сделать, так это удовлетворить метод assign, способ, которым вы можете передавать переменные в свою тему.

Затем придумайте несколько стандартизаций (например, файлы шаблонов должны находиться в папке \Resources\Private\Templates\ControllerName\ActionName.phtml, обратите внимание на расширение файла) и укажите, какая переменная будет доступна там (например, $view ).

Теперь очень простой подход:

    protected $view = array();

    public function assign($key, $value) {
        $this->view[$key] = $value;
    }

    public function render() {
        $this->controllerContext->getResponse()->setHeader('Content-Type', 'text/html');

        $view = $this->view;
        ob_start();         

        include_once($this->getTemplatePathAndFilename());
        $output = ob_get_contents();
        ob_end_clean();
        return $output;
   }
}

Для функции $this->getTemplatePathAndFilename() вы можете использовать код из метода TYPO3\Fluid\View\TemplateView->getTemplatePathAndFilename() и настроить его под свои нужды.

В ваших файлах шаблонов теперь вы можете использовать переменную $view.

Я у своих родителей на Пасху, и им не хватает среды выполнения, поэтому это не тестировалось, и вы, вероятно, столкнетесь с проблемами, но это должно помочь вам начать!

person shredding    schedule 07.04.2012