Как реализовать Шаблонное Наследование (как Django?) в PHP5

Вы можете продолжить методично, используя сигма-нотацию, чтобы получить порядок сложности роста:

enter image description here

11
задан hakre 2 June 2012 в 11:44
поделиться

4 ответа

Сам язык PHP был разработан именно для этих задач, [к сожалению] он со временем стали способны на все больше, и люди, которые начинали с этот простой синтаксис начал реализовывать все более и более сложные задачи с этим странно развитым языком.

Я думаю, что вы имеете в виду наследование шаблонов, лучше всего выразить как динамическое включение файлов в PHP так же просто, как

<? require $content ?>
2
ответ дан 3 December 2019 в 02:20
поделиться

Если вы знакомы с принципом работы наследования классов, ваш ответ - ДА, PHP поддерживает это. Django может быть излишним, но я постараюсь очень быстро рассказать вам, как это сделать.

Примечание: я не собираюсь использовать здесь контроллер. Очевидно, что если страница является блогом, вы собираетесь создать объект blogPage, а не просто обычную страницу. ТАКЖЕ, я написал это для вас с нуля, поэтому никаких гарантий, что он работает ... но, надеюсь, это даст вам некоторые идеи.

<?php
class Page
{

    protected $content_main; // Your main page content.
    protected $content_leftbar; // Your left sidebar content.
    protected $content_title; // Your content title.
    protected $template; // Template data.

    Function getTemplate() {
        // Logic for determining the template to be used in here.
        // Let's say it returns the location of a cached version of the template.
            return $template_file_path;
    }

    Function populateContentBlocks() {
        // This populates the $content_BLOCK variables with data using some default
        // logic you have for determining where to grab that data from.
    }

    Function loadPage() {

        // Populates variables.
        $this->populateContentBlocks();

            // Fetches template
        include( $this->getTemplate() );
    }


} // END class


Class blogPage extends Page {
    Function getTemplate() {
        // Logic for determining the template to be used in here.
        // Let's say it returns the location of a cached version of the template.
        // OVERRIDE THE DEFAULT TEMPLATE LOGIC OF THE PAGE WITH WHAT IS RELEVENT TO
                // BLOGPAGE.
    }
}
?>

Пример файла шаблона:

<html>
  <head>
    <title><?php echo $this->content_title; ?></title>
  </head> 

  <body>
      <div class="sidebar"><?php echo $this->content_sidebar; ?></div>
      <div class="mainContent"><?php echo $this->content_main; ?></div>
  </body>
</html>
1
ответ дан 3 December 2019 в 02:20
поделиться

Symfony поддерживает наследование шаблонов , он настолько похож на django, что синтаксис выглядит совместимым с django или другими красивыми движками jinja python .

Элегантность, как использование PHP в качестве языка шаблонов:

<h1><?php echo $page->title; ?></h1>
<?php foreach($page->comments as $comment): ?>
    <?php echo $comment->body; ?>
<?php endforeach; ?>
<?php echo $page->comments->count(); ?>

Или, что еще более элегантно, jinja:

<h1>{{ page.title }}</h1>
{% for comment in page.comments %}
   {{ comment.body }}
{% endfor %}
{{ page.comments.count %}
3
ответ дан 3 December 2019 в 02:20
поделиться

Извините, что откопал старый поток, но я только что выпустил библиотеку, которая выполняет наследование шаблонов в собственном PHP . Очень вдохновлен Django. Пожалуйста, проверьте это и дайте мне знать, что вы думаете:

«Наследование шаблонов PHP»

http://arshaw.com/phpti/

17
ответ дан 3 December 2019 в 02:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: