Менеджер раскладки PHP - PullRequest
       17

Менеджер раскладки PHP

1 голос
/ 19 ноября 2011

Я не уверен, что мне разрешено задавать здесь более практичный вопрос, так как этот вопрос не столько поддерживает, сколько просто дает хороший совет.

У меня есть фронт-контроллер с простым менеджером макетов (отсутствие лучшего термина), который эффективно загружает HTML-макет по умолчанию (или пользовательский, если он указан), и, основываясь на запросе страницы пользователя, вставит другой файл (называемый файлами просмотра) в области содержимого скелетов.

Скелет может выглядеть примерно так:

<div id="header">
    <h1>head goes here</h1>
<div id="content">
    <?php $this->insertContent(); ?>
</div>
<div id="footer">
    <p>footer goes here</p>
</div>

Хотя это довольно просто, это облегчает создание будущих обновлений, потому что, если клиент теперь захочет, чтобы я добавил скроллер jquery, я мог бы добавить его к единому макету, как в случае необходимости редактировать несколько документов для достижения одной и той же цели. .

Однако мой друг говорит, что он считает, что это нехорошее решение, и считает, что я не должен разделять свои файлы «view» и макеты, а скорее придерживаться фронт-контроллера, а мои html-страницы должны использовать php include (include header и нижний колонтитул) и сохранить мои HTML-страницы в виде 1 файла, потому что:

  1. Менеджер макетов сделает мое приложение менее гибким, поскольку я привязываю себя к одному макету (если только я не создаю новый макет и в моем файле контроллера страницы не укажите, что он должен использовать другой макет).
  2. Другим разработчикам будет нелегко понять логику, и я создаю больше работы, чем необходимо
  3. Разработчики простого HTML не смогли бы провести надлежащее тестирование, поскольку они могут реально работать только с фрагментами, как приложение ко всем документам HTML и увидеть большую картинку.
  4. Это более запутанно, потому что для внесения изменений в страницу мне нужно внести изменения либо в файл вида, либо в файл скелета, и вам нужно знать, когда редактировать файл скелета.

Я скоро начну разрабатывать проект, который будет иметь несколько этапов разработки, и для меня очень важно принять решение об этом, поскольку я хочу, чтобы приложение было максимально гибким и создавало как можно меньше работы, но также сделайте так, чтобы я мог легко вносить изменения, улучшения или изменения в сайт. Я бы очень ценил несколько советов, так как этот аргумент сейчас основан на индивидуальных мнениях двух людей. Любые вопросы, которые необходимо учитывать, и, возможно, информацию о том, как более масштабные основные структуры и работа CMS также помогут мне принять более правильное решение.

Ответы [ 4 ]

3 голосов
/ 19 ноября 2011

То, что вы делаете, это так называемое Двухступенчатое представление Шаблон .

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

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

Термин Макет является более широким, но довольно понятным для разработчиков, но не настолько точным.

1 голос
/ 19 ноября 2011

Zend_Layout - единственное, что вам когда-либо понадобится для управления макетом, очень полезно.

Хотя вы можете реализовать свой собственный очень легко. Как то так:

<?php

class Layout
{

    private $_data = array();

    public function __set($name, $value)
    {
        $this->_data[$name] = $value;
    }

    public function __get($name)
    {
        return array_key_exists($name, $this->_data) ? $this->_data[$name] : NULL;
    }

    public function __isset($name)
    {
        return isset($this->_data[$name]);
    }

    public function __unset($name)
    {
        unset($this->_data[$name]);
    }

}

// Usage

$layout = new Layout();

$layout->title = 'Welcome to my application mate!';

$layout->content = load_content_from_template('template_file.php');

$layout->scripts = array(
    'jquery',
    'jquery.plugin'
);

$layout->scripts[] = 'common';

?>

// Inside the layout file, assuming that $layout variable is available in this scope.

<html>
<head>
    <title><php echo $layout->title ?></title>
</head>
<body>

    <div id="content">
        <php echo $layout->content ?>
    </div>

    <?php
        foreach ($layout->scripts AS $script)
            echo '<script type="text/javascript" src="/path/to/scripts/directory/' . $script . '.js"></script>';
    ?>

</body>
</html>
0 голосов
/ 04 марта 2014

Попробуйте использовать https://github.com/mahadazad/php-layout-manager, это просто и может быть интегрировано с codeigniter aswell.

0 голосов
/ 19 ноября 2011

взгляните на Smarty.

http://www.smarty.net/

WordPress использует вариант Smarty, как и моя собственная CMS.Я уверен, что другие крупные CMS используют Smarty или альтернативу, которая делает то же самое

...