Создание представлений в 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;