Как использовать Zend Framework только для макетов? - PullRequest
4 голосов
/ 12 мая 2009

Меня недавно пригласили помочь с проектом, состоящим из отдельных файлов HTML, за исключением формы контакта PHP. Так что нет даже намека на объектно-ориентированное программирование, MVC или макеты (или даже PHP в этом отношении).

Проект довольно большой, но я хотел медленно интегрировать Zend Framework в этот проект, в основном, чтобы начать использовать макеты. Избыточных копий так много, что делать небольшие обновления, которые должны были быть сделаны в одном файле, - пустая трата времени.

В первые дни PHP вы могли разделять свои блоки контента, включая их в каждую страницу (например, верхний и нижний колонтитулы). Теперь, используя MVC-фреймворки, такие как Zend Framework, вы можете создавать файлы макетов, которые включают в себя содержимое отдельной страницы (представления) с помощью помощника вида. Мне это очень нравится, потому что это означает, что мне нужно только «включить» свой верхний или нижний колонтитул в одном месте.

Однако я не уверен, как это будет работать без отправки / начальной загрузки приложения (т. Е. С использованием компонентов Zend Framework MVC в качестве автономных компонентов). Как лучше всего переключить сайт на макеты? Как это будет работать? Это даже хорошая идея?

Ответы [ 6 ]

9 голосов
/ 11 октября 2009

Я недавно начал преобразование файловой структуры mish-mash *, чтобы использовать макет и представления ZF. Цель состоит в том, чтобы переместить все файлы, содержащие html, в рекомендуемую файловую структуру для макетов и представлений. Вот как подготовиться к этому:

  1. Извлечение всей разметки из каждого файла, сохранение переменных в нем, но без логики. Назовите этот файл /application/views/scripts/page/view.phtml (например, /application/views/scripts/index/login.phtml)
  2. Создайте каркас, который подходит для большинства страниц, как /application/layouts/scripts/layout.phtml и позвольте ему содержать что-то вроде этого:

    <?php echo $this->doctype('XHTML1_STRICT'); ?>
    <html>
    <head>
        <?php echo $this->headLink(); ?>
    </head>
    <body>
        <div id="wrapper">
        <?php echo $this->layout()->content; ?>
        </div>
    </body>
    </html>
    
  3. (Добавьте Zend к вашему включаемому пути и зарегистрируйте его автозагрузчик.) Создайте файл, который будет включен во все ваши файлы (если у вас нет единственной точки входа , в этом случае - поместите его туда!) Создайте ссылку на свой макет, эквивалентный этому:

    $view = new Zend_View();
    $view->setScriptPath('/application/views/scripts');
    
    $layout = new Zend_Layout();
    $layout->setLayoutPath('/application/layouts/scripts');
    $layout->setView($view);
    
    Zend_Registry::getInstance()->set('layout', $layout);
    
  4. Каждый файл php, который вы оставили (с логикой, а не html), должен иметь доступ к макету и изменять его:

    $layout = Zend_Registry::getInstance()->get('layout');
    
    $view = $layout->getView();
    $view->headLink()->appendStylesheet('/css/a_css_file.css');
    
    // most important step, done automatically when using MVC, but now you have to do it manually
    $layout->content = $view->render('index/login.phtml');
    
    echo $layout->render();
    
  5. Наиболее важным следующим шагом является добавление другого макета:

    // /application/layouts/scripts/blank.phtml
    <?php echo $this->doctype('XHTML1_STRICT'); ?>
    <html>
        <head></head>
        <body>
            <?php echo $this->layout()->content; ?>
        </body>
    </html>
    

    и в одном из ваших логически связанных файлов

    $layout = Zend_Registry::getInstance()->get('layout');
    $layout->setLayout('blank');
    

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

* Один файл: модель, контроллер, HTML, без логического порядка.

6 голосов
/ 15 мая 2009

Вы, конечно, можете использовать Zend_Layout отдельно, и это подробно описано в руководстве:

28.2.3. Использование Zend_Layout в качестве автономного компонента

Полагаю, вам нужно будет захватить выходные данные скрипта с помощью буферизации вывода и передать их в макет для отображения.

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

1 голос
/ 12 мая 2009

Лично я бы рекомендовал не использовать Zend Framework, если вы планируете использовать его только для управления шаблонами / макетом. Существуют гораздо лучшие решения для создания шаблонов с помощью PHP, при этом Smarty является очевидным выбором (ранее частью проекта PHP).

Smarty обеспечивает достаточно простую интеграцию с Zend Framework, если вам нужно сделать это позже, и есть несколько статей об этом на Zend DevZone .

0 голосов
/ 22 июля 2009

Zend_Layout на самом деле не включает в себя заголовок или нижний колонтитул, скорее его лучше всего использовать для вставки различных фрагментов контента в один большой шаблон. Он довольно сложный, а также в случаях общего использования, таких как вставка основной части контента, вы можете вставлять теги HEAD, такие как CSS, скрипты или теги заголовков, а также пользовательские заполнители, такие как навигация.

Из вашего описания я бы взял простое PHP-решение для заголовка и нижнего колонтитула. Это будет проще для реализации и удалит любое дублирование общих элементов шаблона.

Если вы действительно хотите использовать это для изучения Zend Framework, вы можете использовать Zend_Layout в автономном режиме, как рекомендует dcaunt. Нет смысла пытаться использовать систему самозагрузки MVC, так как вашему сайту это не нужно. Я бы просто сделал что-то вроде перезаписи URL, чтобы отправить все * .html запросы в один PHP-файл, который затем запускает Zend_Layout и загружает запрошенный файл в переменную содержимого $ layout-> через что-то вроде file_get_contents ()

Вы также можете использовать ZF для обработки формы, если хотите.

0 голосов
/ 15 мая 2009

Я не уверен, что это то, что вы ищете, но у BBC есть несколько видео, где они используют части Zend Framework без использования всего MVC. Я думаю, что они в частях 4 и 5, http://bbcwebdevelopers.blip.tv/

0 голосов
/ 12 мая 2009

Я не думаю, что вы можете сделать это по умолчанию, я думаю, что вам также нужно использовать Zend View. Но я уверен, что вы можете изменить Zend_Layout для работы с существующими настройками. Извините, я не могу быть более конкретным, как это сделать, потому что многое зависит от того, что в данный момент установлено.

В качестве отправной точки я рекомендую изучить интеграцию Smarty с Zend, чтобы увидеть, как вы можете ее изменить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...