РНР выход блока определения и лучшие практики


Я катался несколько идей или подходов в моей голове, и никто, кажется, еще какой-либо полезной или "правым", чем другой. Я уверен, что это очень объективная, но я ищу близко к окончательный ответ на объектно-ориентированном подходе к большой блок строк хранения и вывода в PHP. Приведенный в следующем примере, как я мог бы изменить свой подход в сторону, что может вызвать Зеев Сураски, чтобы похлопать меня по спине и говорят Мазл тов (рядом с использованием HTML5)?

<?php

class OutputConstructor extends ContentRetriever // Or whatever I decide to name it
{

    protected $htmlHeadBlock;

    public function __construct()
    {

        $this->setHtmlHeadBlock();

    }

    protected function setHtmlHeadBlock()
    {

        ob_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

        <title><?php echo $this->pageTitle; ?></title>

        <link rel="shortcut icon" href="images/favicon.ico" type="image/x-icon" />
        <link rel="icon" href="images/favicon.ico" type="image/x-icon" />

        <meta name="description" content="<?php echo $this->pageDescription; ?>" />
        <meta name="keywords" content="<?php echo $this->pageKeywords; ?>" />

        <link type="text/css" rel="stylesheet" href="css/style.css" />
        <script type="text/javascript" src="js/functions.js"></script>
    </head>
<?php
        $this->htmlHeadBlock = ob_get_clean();

    }

    public function getHtmlHeadBlock()
    {

        return $this->htmlHeadBlock;

    }

} // End of OutputConstructor

?>

Вообще тема я в этом примере класса заключается в том, что по строительству, HTML-код хранится в переменной через выходной буфер, а затем вернулся на открытый метод. При оценке настоящего Кодекса, считают, что HTML не будет статичной. Заголовок страницы, описание, Ключевые слова и такое будет подкровать с динамическое свойство ссылок. Мой общий вопрос: в объектно-ориентированное программирование, в идеале, где должен выход быть сохранены? В PHP DOMDocument класса, однако полезными, на самом деле не ответить на этот вопрос для меня. Также в этом случае, есть ли лучший компромисс между использованием буфера вывода и heredoc-синтаксиса? Спасибо заранее за ваши рекомендации!



1342
2
задан 27 апреля 2011 в 04:04 Источник Поделиться
Комментарии
2 ответа

Первая проблема, которую я вижу, и многих других заключается в том, что ваш хардкодом выходных данных, зачем вы жесткий код вывода данных на языке, который был построен для динамического создания контента.

Я хотел бы предложить вам реструктуризировать ваш класс, чтобы объединить несколько записей в одну, например, при создании веб-страницы HTML, я, как правило, состоит из 5 основных compoinants, для isntance:


  • Страницы

    • Глава

    • Тело

      • Заголовок

      • Главная

      • Футер



Учитывая это, я хотел бы сделать мой код так что он будет действовать таким же образом, создать 6 или так называемые классы: HTMLPage, HTMLHead, параметр htmlbody, HTMLBodyHeader, HTMLBodyMain, HTMLBodyFooter

Теперь каждый класс должна быть возложена на его родителей, например:

Голова и тело принадлежат на страницу, а заголовок,основной и Fotter принадлежу к телу, Это учитывать, Вы должны взглянуть на следующую структуру:

/*
* Create a Page
*/
$Page = new Page("DOCTYPE");

/*
*Create a Head
*/
$Head = new Head();
$Head->title = "My Practical Home Page";
$Head->addScript("http://google.com/example.js");
$Head->addStyle("http://google.com/example.css");
$Head->addMeta('blah','..blah..');

/*
* Create a Body Object
*/
$Body = new Body("charset");
$Body->layout = new HTMLLayout("some_file_to_specifiy_the_layout");
$Body->SetContent('LeftBlock.Top','Hello World');

/*
* Create Footer
*/
$Footer = new Footer('default_footer.php');

/*
* Add all the segments to the main page!
*/
$Page->head = $Head;
$Page->body = $Body;
$Page->body->header = $Header;
$Page->body->main = "....";
$Page->body->footer= $Footer;

/*
* Send the page to the browser!
*/
$Page->Display();

Я оставлю это до вас, чтобы выяснить классов

3
ответ дан 28 апреля 2011 в 09:04 Источник Поделиться

Ну, я думаю, что самый удобный способ-это использование шаблонов. Вашего HTML-блока с переменными фактически является шаблоном. Вы можете использовать шаблонизатор, как прутик или Смарти , чтобы построить свой шаблон из данных, предоставленных вами или вы можете использовать PHP расширенный синтаксис для этого такой:

<html>
<body>
<p<?php if ($highlight): ?> class="highlight"<?php endif;?>>This is a paragraph.</p>
</body>
</html>

0
ответ дан 27 апреля 2011 в 08:04 Источник Поделиться