PHP-шаблон с Flow3

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

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

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

2 ответа

Решение

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

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

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

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

Теперь взгляните на пустой контроллер в том же каталоге: \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.

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

Другие вопросы по тегам