Лучшая практика для размещения мета-тегов, ссылок и стилей в Zend Framework?
У меня есть метатеги диапазона проекта, которые необходимо установить. Я положил их в защищенный метод _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 ответа
Я использую config для базовых (загрузочных) данных, как:
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...
Я надеюсь, что это помогает;)
У вас есть несколько способов добиться этого. Прежде всего, убедитесь, что в момент определения метаданных вы уже знаете, какой язык будет загружен для текущего запроса. Иногда это может быть нелегко определить во время начальной загрузки.
Сказав это, помимо начальной загрузки, вы можете установить метаданные для:
- Класс плагина Front Controller (используя, например, методы dispatchLoopStartup() или predispatch()).
- Класс Action Helper (например, с использованием методов init() или preDispatch()).
В этих точках исполнения вы, вероятно, уже определили язык для использования и можете соответствующим образом установить метаданные. Вы всегда можете изменить метаданные впоследствии в ваших контроллерах действий для конкретных случаев в вашем приложении, так что вы никогда не застрянете, если ранее указали метаданные.
В моей собственной работе у меня есть эта настройка:
- Плагин Front Controller, метод dispatchLoopStartup(): определяет язык для загрузки, отдавая приоритет GET-параметру "lang" в объекте запроса, затем язык браузера, а затем язык сайта по умолчанию. Я также использую это, чтобы определить, является ли запрос нормальным запросом или запросом ajax; если это первый случай, я регистрирую помощника действий, смотрите дальше...
- Action Helper, метод preDispatch(): загрузка метаданных в зависимости от языка и других элементов, загрузка макетов и виджетов и т. Д.
- Контроллер действий, метод someAction(): при необходимости измените некоторые из ранее установленных метаданных, например headTitle (), которые могут зависеть от эффективно загруженного содержимого.
Это расположение имеет смысл для меня, может быть, это может помочь вашему подходу?
Начальная загрузка - это путь к моим проектам. Я добавляю их в свой контроллер / действия
$keywords = 'php,zend,framework';
$this->view->headMeta($keywords,'keywords','name',array(),'SET');
... etc.
На самом деле очень поздно почти в конце. На этом этапе я бы также знал о языке и других вещах.