Лучшая практика для размещения мета-тегов, ссылок и стилей в Zend Framework? - PullRequest
1 голос
/ 01 июля 2011

У меня есть метатеги диапазона проекта, которые необходимо установить.Я поместил их в защищенный метод _initMeta в Bootstrap классе.Есть ли лучшие варианты?Что если я хотел бы получить другой набор этих данных для других языков?

protected function _initMeta(){
    $this->bootstrap('view');
    $view = $this->getResource('view');
    $view->doctype('XHTML1_STRICT');

    $view->headTitle()->headTitle('Foo title');

    $view->headMeta()->appendName('keywords','foo');

    $view->headMeta()->appendHttpEquiv('Content-Type', 'text/html; charset=UTF-8')
            ->appendHttpEquiv('Content-Language', 'any');

    $view->headLink()->appendStylesheet('/foo.css')->headLink(array('rel' => 'favicon',
                              'href' => '/favicon.ico'),
                              'PREPEND');
}

Ответы [ 3 ]

2 голосов
/ 03 ноября 2012

Я использую конфигурацию для базовых (загрузочных) данных как:

application.ini

resources.view.meta.name.Viewport                       = "width=device-width, initial-scale=1.0"
resources.view.meta.name.MobileOptimized                    = "width"
resources.view.meta.name.HandheldFriendly                   = "true"
resources.view.meta.name.Keywords                       = "basic,keywords"
...
; format resources.view.headStyle.{MEDIA}.nfile = 
resources.view.headStyle.all.1.href                 = "/css/basic.css"
resources.view.headStyle.all.1.conditionalStylesheet            = 
resources.view.headStyle.all.1.extras.title             = "Basic style"
resources.view.headStyle.all.1.extras.charset               = "utf-8"

resources.view.headStyle.all.2.href                 = "/css/ie.css"
resources.view.headStyle.all.2.conditionalStylesheet            = "IE"
resources.view.headStyle.all.2.extras.title             = "Internet Explorer style"
resources.view.headStyle.all.2.extras.charset               = "utf-8"
; print media example
resources.view.headStyle.print.1.href                   = "/css/print.css"
...
; format resources.view.headLink.{REL} = 
resources.view.headLink.humans.href                     = "/humans.txt"
resources.view.headLink.humans.type                     = "text/plain"
; ___ will be replaced by space, __ by point (or set another nest separator)
resources.view.headLink.shortcut___icon.href                = "/favicon.png"
resources.view.headLink.shortcut___icon.type                = "image/png"
...

На данный момент, возможно, у вас есть некоторые специальные данные. Например в:

project1.ini

project.headLink.author.href                = "https://plus.google.com/XXXXX?rel=author"
project.headLink.image_src.href                     = "/author.jpg"
project.headLink.image_src.type                     = "image/jpg"

И, наконец, вы смешиваете все в своем

Bootstrap.php

(пример для * _initHeadLink () *):

// $options = your app options (basic)
// $projectOptions = your project options (special)
// $assets_url = your assets url

if ( is_array($headStyle = $options['headStyle']) ) {
    foreach ( $headStyle as $media => $value ) {
        foreach ( $value as $style ) {
            extract($style);
            $this->view->headLink()->appendStylesheet($assets_url . $href, $media, 
                            $conditionalStylesheet, $extras);
        }
    }
}

$headLinks      = array();

if ( isset($options['headLink']) ) 
    $headLinks      = $options['headLink'];

if ( isset($projectOptions['headLink']) ) 
    $headLinks      = array_merge($headLinks, (array) $projectOptions['headLink']);

// *array key, is the value for rel
foreach ( $headLinks as $rel => $value ) {
    $rel            = str_replace(array('___', '__'), array(' ', '.'), $rel);
    $this->view->headLink()->headLink(array_merge(array('rel' => $rel), (array) $value));
}

Затем вы можете переопределить эти данные из вашего контроллера: setName, set ...

Надеюсь, это поможет;)

2 голосов
/ 01 июля 2011

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

Сказав это, помимо начальной загрузки вы можете установить метаданные на:

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

В моей собственной работе у меня есть такая настройка:

  1. Плагин Front Controller, метод dispatchLoopStartup () : определяет язык для загрузки , отдавая приоритет GET-параметру "lang" в объекте запроса, затем язык браузера, затем сайт по умолчанию язык. Я также использую это, чтобы определить, является ли запрос нормальным запросом или запросом ajax; если это первый случай, я регистрирую помощника действий, см. следующий ...
  2. Action Helper, метод preDispatch (): загрузка метаданных в зависимости от языка и других вещей, загрузка Макет , виджеты и т. Д.
  3. Контроллер действий, метод someAction (): при необходимости измените некоторые из ранее установленных метаданных, например, headTitle () , которые могут зависеть от эффективно загруженного содержимого.

Это расположение имеет смысл для меня, может, оно поможет вашему подходу?

0 голосов
/ 02 июля 2011

Начальная загрузка - это путь к моим проектам.Я добавляю их в свой контроллер / действия

$keywords = 'php,zend,framework';
$this->view->headMeta($keywords,'keywords','name',array(),'SET');
... etc.

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

...