Использование PHP в качестве движка шаблонов - PullRequest
5 голосов
/ 12 февраля 2011

Я не собираюсь спорить о выборе движка шаблонов только против PHP. Я предпочитаю не использовать шаблонизатор, как Smarty, потому что я хотел бы научиться правильно проектировать шаблон с использованием PHP и HTML. Может ли кто-нибудь предоставить ссылки или примеры того, как создать шаблон страницы?

Ответы [ 6 ]

17 голосов
/ 12 февраля 2011

Просто используйте альтернативный синтаксис PHP для конструкций языка управления if / for / foreach, разработанных специально для этой цели:

    <h1>Users</h1>
<?php if(count($users) > 0): ?>
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>First Name</th>
                <th>Last Name</th>
            </tr>
        </thead>
        <tbody>
<?php foreach($users as $user): ?>
            <tr>
                <td><?php echo htmlentities($user->Id); ?></td>
                <td><?php echo htmlentities($user->FirstName); ?></td>
                <td><?php echo htmlentities($user->LastName); ?></td>
            </tr>
<?php endforeach; ?>
        </tbody>
    </table>
<?php else: ?>
    <p>No users in the database.</p>
<?php endif; ?>

Я также предлагаю создать помощники вида для выводов HTML, которые очень похожи, и использовать их вместо повторяющегося кода HTML.

9 голосов
/ 12 февраля 2011

Это действительно не так уж и сложно.

Non-PHP goes out here
<?php # PHP goes in here ?>
More non-PHP goes out here
<?php # More PHP goes in here ?>
7 голосов
/ 12 февраля 2011
 function returnView($filename,$variables){
    ob_start();
        $htmlfile = file_get_contents($filename);  
        foreach($variables as $key=>$value){
          $htmlfile = str_replace("#".$key."#", $value, $htmlfile);
        }              
        echo $htmlfile;
    return ob_get_clean(); 
 } 

//htmlfile
<html>
<title>#title#</title>
</html>


//usage

echo returnView('file.html',array('title'=>'hello world!');

im my Framework У меня есть функция, которая загружает представление, а затем выводит его в макет:

 public function returnView(){
    ob_start();
    $this->loader();
    $this->template->show($this->controller,$this->action);
    return ob_get_clean(); 
 }

Макет выглядит следующим образом:

<html> 
    <head>
        <title><?php echo $this->layout('title'); ?></title>
    </head>
    <body>
        <?php echo $this->layout('content'); ?>
    </body>
</html>
1 голос
/ 12 февраля 2011

Что вы можете рассмотреть, если вам следует выбрать подход в стиле MVC, если вы включаете ваши шаблоны в объект (один из методов его класса), тогда $this внутри файла шаблона будет указывать на объект, который вывызвал его из.

Это может быть очень полезно, если вы хотите обеспечить инкапсуляцию для ваших шаблонов, например, если вы не хотите полагаться на глобальные переменные для передачи динамических данных (например, из базы данных).

0 голосов
/ 20 апреля 2017

Используя пример Ричарда, но более просто:

    <h1>Users</h1>
<? if(count($users) > 0): ?>
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>First Name</th>
                <th>Last Name</th>
            </tr>
        </thead>
        <tbody>
<? foreach($users as $user): ?>
            <tr>
                <td><?= htmlentities($user->Id) ?></td>
                <td><?= htmlentities($user->FirstName) ?></td>
                <td><?= htmlentities($user->LastName) ?></td>
            </tr>
<? endforeach ?>
        </tbody>
    </table>
<? else: ?>
    <p>No users in the database.</p>
<? endif ?>
0 голосов
/ 12 февраля 2011

Я использовал различные шаблонные движки, а также разработал свой собственный, со временем становясь все более сложным.Я думаю, что лучше сделать это как можно проще, используя нативный php, вместо того, чтобы создавать сложные функции.(эта статья имеет несколько положительных моментов: Хорошая скучная архитектура ).Что я обнаружил, так это гораздо лучшую читаемость и поддержку при возвращении к проекту через месяцы или годы.

Например:

<?
$name="john";
$email="john@xyz.com";

require "templates/unsubscribe.php";

- templates / unsubscribe.php -

<?
$o=<<<EOHTML

Hi $name, sorry to see you go.<BR>
<input type=input name=email value=$email> 
<input type=submit value='Unsubscribe'>
EOHTML;
echo $o;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...