Создание представлений в PHP-Лучшая практика
Я работаю над веб-сайтом с 2 другими разработчиками. Я отвечаю только за создание представлений.
данные доступны в объекте, и у меня есть геттеры для чтения данных, а затем создания страниц XHTML.
какова наилучшая практика для этого, без использования какого-либо механизма шаблонов?
Спасибо большое.
3 ответов
если вы не хотите использовать механизм шаблонов, вы можете использовать основные возможности шаблонов PHP.
на самом деле, вы должны просто написать HTML, и всякий раз, когда вам нужно вывести значение переменной, откройте часть PHP с <?php
и рядом с ?>
. Я предположу для примеров, что $data
ваш объект данных.
например:
<div id="fos"><?php echo $data->getWhatever(); ?></div>
обратите внимание, что все структуры управления PHP (например,if
, foreach
, while
, так далее.) также есть синтаксис, который можно использовать для шаблонов. Вы можете посмотреть их на своих страницах руководства PHP.
например:
<div id="fos2">
<?php if ($data->getAnother() > 0) : ?>
<span>X</span>
<?php else : ?>
<span>Y</span>
<?php endif; ?>
</div>
если вы знаете, что использование коротких тегов будет включено на сервере, для простоты вы также можете использовать их (не рекомендуется в XML и XHTML). С короткими тегами вы можете просто открыть свою часть PHP с помощью <?
и рядом с ?>
. Кроме того,<?=$var?>
это стенография для Эха чего-то.
первый пример с короткими теги:
<div id="fos"><?=$data->getWhatever()?></div>
вы должны знать, где вы использовать разрывы строк и пробелы. Браузер получит тот же текст, который вы пишете (кроме частей PHP). Что я имею в виду:
написание этого кода:
<?php
echo '<img src="x.jpg" alt="" />';
echo '<img src="y.jpg" alt="" />';
?>
не эквивалентно этому:
<img src="x.jpg" alt="" />
<img src="y.jpg" alt="" />
потому что во втором у вас есть реальный \n
между img
элементы, которые будут переведены браузером как пробел и отображается как фактическое пространство между изображениями, если они встроенные.
использовать отдельный файл для чтения данных:
<?php
if ($foo == False)
{
$bar = 1;
}
else
{
$bar = 0;
}
?>
затем ссылаться на результирующее состояние в HTML-файле:
require 'logic.php';
<html>
<!--...-->
<input type="text" value="<?php echo $bar; ?>" > //Logic is separated from markup
<!--...-->
</html>
Я не знаю, что я действительно ваш вопрос. так что если мой ответ не exaclty, Для я бы де удалены
этот класс создаст простой вид
class View
{
public function render($filename, $render_without_header_and_footer = false)
{
// page without header and footer, for whatever reason
if ($render_without_header_and_footer == true) {
require VIEWS_PATH . $filename . '.php';
} else {
require VIEWS_PATH . '_templates/header.php';
require VIEWS_PATH . $filename . '.php';
require VIEWS_PATH . '_templates/footer.php';
}
}
private function checkForActiveController($filename, $navigation_controller)
{
$split_filename = explode("/", $filename);
$active_controller = $split_filename[0];
if ($active_controller == $navigation_controller) {
return true;
}
// default return
return false;
}
private function checkForActiveAction($filename, $navigation_action)
{
$split_filename = explode("/", $filename);
$active_action = $split_filename[1];
if ($active_action == $navigation_action) {
return true;
}
// default return of not true
return false;
}
private function checkForActiveControllerAndAction($filename, $navigation_controller_and_action)
{
$split_filename = explode("/", $filename);
$active_controller = $split_filename[0];
$active_action = $split_filename[1];
$split_filename = explode("/", $navigation_controller_and_action);
$navigation_controller = $split_filename[0];
$navigation_action = $split_filename[1];
if ($active_controller == $navigation_controller AND $active_action == $navigation_action) {
return true;
}
// default return of not true
return false;
}
}
soo теперь вы можете создавать свои шаблоны и вызывать их из любого места, как
$this->view->my_data = "data";
$this->view->render('index/index');
//
и на вашем индекса/индекса.php вы можете назвать данные $this - >my_data;