Я ищу легкую, основанную на PHP, структуру макета. Подобно тому, как Zend Framework использует макеты, я хотел бы создать шаблон макета и включить только контент для необходимых страниц.
<html> <head> <title><?= $pageTitle ?></title> </head> <body> <?= $content ?> </body> </html>
Кто-нибудь знает что-нибудь, что делает это? Я бы использовал Zend Framework, но это слишком много для того, чего я хочу достичь.
Я на самом деле собираюсь выпустить его на europaphp.org вместе с примерами и полной документацией. Это очень похоже на Zend Framework в стандартах и стандартах кодирования. Я напишу что-нибудь, когда это будет сделано; вероятно, в течение следующей недели.
Код можно получить по адресу: [ http://code.google.com/p/europa/source/browse/#svn/trunk/Sandbox – По умолчанию] [1].
Эта ссылка откроет последнюю версию svn для Sandbox, которую вы можете просто загрузить и начать использовать без какой-либо конфигурации.
В настоящее время это быстрее, чем большинство других фреймворков PHP.
[1]: http://code.google.com/p/europa/source/browse/#svn/trunk/Sandbox – По умолчанию
Я голосую за PHP. (PHP – это шаблонный движок.)
function template($file, $vars) { ob_start(); if(count($vars) > 0) { extract($vars); } include 'views/'.strtolower($file).'.php'; return ob_get_clean(); }
Который, кстати, позволяет вам сделать следующее.
echo template('layout', array( 'content' => template('page', $myData) ));
Следует ли вообще использовать другой механизм шаблонов / компоновки, когда самому PHP может хватить всего 6 строк?
Редактировать:
Возможно, мне было непонятно, как это работает.
template()
вызывается с именем шаблона (подкаталоги для работы организации тоже) с объектом массива в качестве второго параметра. Если заданные переменные не являются пустыми, например template('index',null)
, то массив рассматривается как ассоциативный массив: каждый ключ становится переменной, содержащей значение.
Итак, логика становится:
template('my_template', array( 'oranges' => 'apples' ));
И «views / my_template.php»:
<html> <head> <title>Are apples == <?= $oranges ?>?</title> </head> <body> <p style="color: <?= $oranges == 'oranges' ? 'orange" : 'darkgreen' ?>"> Are apples == oranges? </p> </body> </head>
Таким образом, каждый раз, когда используется переменная $oranges
PHP получает данные, которые были экспортированы из массива, $vars['oranges']
.
Таким образом, весь вывод затем берется ob_get_clean()
и возвращается как строка. Чтобы вывести эту строку только echo
или print
или назначить ее массиву, который будет передан как содержимое в макет. Если вы это понимаете, то очень легко взять то, что я написал, и сделать из него макет, или страницы с логикой, которые выводят JSON даже.
Я бы посоветовал вам поэкспериментировать с этим ответом, прежде чем отбрасывать его. У вас есть тенденция расти на вас.
Изменить 2:
В соответствии с запросом я покажу макет каталога, который будет использовать мой проект. Обратите внимание, что другие среды MVC используют другую структуру. Но мне нравится простота моей.
index.php application/ framework.php controllers/ welcome.php views/ template.php index.php
В целях безопасности у меня есть файл .htaccess
который маршрутизирует каждый запрос, кроме тех, что js/
в js/
или css/
, в скрипт index.php
, что делает мои каталоги скрытыми. Вы даже можете сделать CSS через шаблон, если хотите, что я сделал, для использования переменных и т. Д.
Таким образом, любой вызов, сделанный в template('template', array())
автоматически загрузит файл ./views/template.php
. Если я включил косую черту в имени, она станет частью пути, например: ./views/posts/view.php
.
Редактировать 3:
спасибо за ваше обновление. Таким образом, у вас должен быть код в файле index.php, который направляет запрошенный URL-адрес соответствующему контроллеру, правильно? Не могли бы вы показать некоторые из этого? Кроме того, это не похоже на то, что ваши взгляды зеркалируют ваш каталог контроллера. Можете ли вы объяснить немного больше, как URL-адреса отображают контроллеры и / или представления? Что у вас есть в framework.php? Что оно делает? Благодаря!
Код, который я показал, является крошечным отрывом из моей частной структуры для веб-разработки. Я уже говорил о потенциальном выпуске его с двойной лицензией или в качестве пожертвования для коммерческого использования, но ничто не может быть написано кем-либо еще в короткие (15-21 дней) времени. Если вы хотите, вы можете прочитать мой исходный код на GitHub … но просто помните, что это все еще альфа-материал.
Лицензия Creative Commons SA .
Если вы хотите сверхлегкий вес, вы можете использовать файл автопредложения , смешанный с некоторой буферизацией вывода, чтобы построить то, что вы хотите. Для начала вам нужно настроить файлы для добавления и добавления файлов – поместите следующие строки в ваш .htaccess файл (вы, вероятно, захотите сделать файлы с добавлением и добавлением нечитаемыми для посетителей):
php_value auto_prepend_file prepend.php php_value auto_append_file append.php
Затем в файле prepend.php вы захотите включить буферизацию вывода:
<?php ob_start();
В append.php вы захотите захватить содержимое выходного буфера, очистить буфер и выполнить любую другую обработку содержимого, которое вы хотите (в этом примере я задал заголовок страницы по умолчанию).
<?php if (!isset($page_title)) { $page_title = 'Default Page Title'; } $content = ob_get_contents(); ob_end_clean(); ?> <html> <head> <title><?php echo $page_title; ?></title> </head> <body> <?php echo $content ?> </body> </html>
После этого вы можете писать каждую страницу обычно. Вот пример index.php
<?php $page_title = "Index Page!"; ?> <h1>This is the <?php echo __FILE__; ?> page</h1>
… и пример other.php, который делает что-то наполовину интересное:
<?php $page_title = "Secondary Page!"; ?> <h1>This is the <?php echo __FILE__; ?> page</h1> <p>enjoy some PHP...</p> <ol> <?php for ($i = 1; $i <= 10; $i++) : ?> <li><?php echo "$i $i $i"; ?></li> <?php endfor ?> </ol>
И вы сделали. Вы можете расти на этом немного, например инициализировать соединение с БД в preend, но в какой-то момент вы, вероятно, захотите перейти к более абстрактной системе, которая вырывается из фиксированного сопоставления URL-адресов в пути и файлы.
BareBones : однофазная , без конфигурации, MVC-инфраструктура для PHP5
FryPHP примерно такой же легкий, как и он.
Лимонад также может быть полезен … не строго макет.
Я использую Smarty целую вечность. Он зрелый, активно поддерживается и широко поддерживается.
В любом случае, здесь вы найдете целый ряд движков шаблонов: http://en.wikipedia.org/wiki/Template_engine_(web)
Если вы нажмете на столбец языков, вы легко увидите, что доступно для PHP, и как двигатели сравниваются.
Просто для того, чтобы бросить в другую структуру: CodeIgniter очень ИМХО, использует подход MVC, поэтому вы будете выводить свои файлы в виде просмотров и говорить, чтобы иметь небольшой размер. Он также имеет парсер шаблонов на борту.
Ура,