Zend Framework 1.11 Классы макетов и т. Д. - PullRequest
0 голосов
/ 20 октября 2011

только что начал использовать Zend Framework, и мне интересно, что делать со странными классами, которые у меня есть. Мне очень интересно узнать, как лучше всего настроить все.

Я только что включил макет, и у меня есть HTML-заголовок, тело, нижний колонтитул и т. Д.

В моем предыдущем приложении я создал скрипт-пакет, в котором вы передаете список CSS-файлов и JS-скриптов в определенном порядке. Если он находится в режиме разработки, он просто перебирает имена файлов и выводит их как:

foreach ($CSS_Scripts as $file) {
    echo '<link src="' . $file . '" ref="stylesheet" />';
}

foreach ($JS_Scripts as $file) {
    echo '<script type="text/javascript" src="' . $file . '"></script>';
}

Если это режим разработки, он может распечатать 10 отдельных файлов CSS и JS. Если он запущен в производство, он объединит их, поэтому будет только 1 файл CSS и 1 файл JS.

С этим существом внутри шаблонов ... Я не совсем уверен, куда должна идти логика. Это логика, которая должна существовать на каждой странице, так что она находится внутри layout.phtml, но где я должен разместить свои классы и как я должен их запускать? Поместить ли я их в projectname/library и запустить логику связывания внутри Bootstrap.php, затем назначить их представлению и вызвать представление внутри layout.phtml?

Также ... скажем, я хочу, чтобы форма входа в систему была доступна вверху каждой страницы при выходе из системы внутри layout.phtml Я предполагаю. Я создал форму Application_Form_Login, но чтобы разрешить вход в систему, мне нужно выполнить действие в Controller? Должен ли я играть в действие «Вход в систему» ​​также в Bootstrap, чтобы можно было войти в систему с каждой страницы, и я не дублирую loginAction на каждой странице?

Но опять же, есть также Zend_Auth, который обеспечит большую гибкость, верно? Может быть, это инициируется внутри Bootstrap, а затем на протяжении layout.phtml и в любом представлении, для которого я могу просто выполнить условия, если вы вошли в систему?

И для целевых страниц, где у вас есть SEO-теги в URL ... Я предполагаю, что это случай создания отдельного контроллера / просмотра по ключевому слову, как (только примеры) ... переполнение стека / computer-questions / цифровые часы / а затем содержимое внутри этих Views

Спасибо ... Я совсем запутался, потому что это другой способ мышления, когда все разделено: D Я привык иметь полный контроль везде и делать то, что хочу и где хочу, но это приводит к спагетти-коду - .-

1 Ответ

2 голосов
/ 20 октября 2011

Вот несколько ответов на несколько ваших вопросов ...

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

Ваш процесс объединения должен выполняться в файле layout.phtml. Если вы правильно используете некоторые из помощников-заполнителей Zend Framework, вы легко сможете достичь желаемого.

Вот пример, этот код будет в вашем файле layout.phtml:

<?php
$this->headScript()
     ->prependFile($this->baseUrl('js/importantCode.js'), 'text/javascript');

echo $this->headScript();

Используя помощник headScript, мы добавляем файл 'js / ImportantCode.js' в список сценариев, которые будут включены в макет. Делая это в макете, вы гарантируете, что файл ImportantCode.js всегда включен в ваши страницы. Теперь предположим, что у вас есть специальная страница, которая использует дополнительный JavaScript, который вы не используете повсеместно, в вашем скрипте вида вы можете просто сделать это:

<?php
$this->headScript()->appendFile($this->baseUrl('js/calendar.js'))
                   ->appendFile($this->baseUrl('js/tooltips.js'));
?>

Это добавит еще два файла javascript к вашим тегам, но только для этого конкретного представления. Если вы обнаружите, что повторяете эту логику для большого количества страниц, вы можете использовать плагин или помощник для представления, чтобы упростить добавление этих файлов в ваши представления, но они имеют ключевое значение - вам не нужен загрузчик для этого. Аналогичные помощники существуют для включения CSS или встроенных стилей.

Распространенным местом для размещения некоторых ваших собственных классов является папка library/My. Затем вы можете следовать структуре Zend для классов и каталогов и называть ваши классы как My_Custom_Class (library / My / Custom / Class.php), и вы можете загружать их по мере необходимости.

Из любого вашего кода Zend Application вы можете просто сказать $obj = new My_Custom_Class(), и Zend автоматически загрузит этот класс из библиотеки / My / Custom / Class.php, чтобы вам не приходилось включать его или требовать его везде. Создавая его только при необходимости, он избавляет от необходимости включать его все время, когда он не нужен.

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

Что касается ваших URL-адресов SEO, то в вашей ситуации могут быть полезны пользовательские маршруты, или вы можете просто структурировать свои URL-адреса, чтобы большая часть SEO была просто параметрами URL-адреса. Возьмите URL http://yoursite.com/product/view/category/Digital-Clocks/cid/1234. Продукт - это контроллер, view - это действие, категория параметров - Digital-Clocks, а cid (идентификатор категории) - 1234. Вы можете получить более короткие и удобные URL-адреса с помощью пользовательских маршрутов.

Надеюсь, это поможет некоторым.

...