Содержание


Links Helper


Links Helper, навигация, ZF2, Zend Framework 2, ссылки



Помощник  links helper используется для рендеринга (отображения) HTML элементов LINK. Ссылки (Links) используются для описания взаимосвязей на активной странице сайта. Если хотите узнать больше информации про связи в документе, ссылки, их типы то это можно сделать на сайте W3C.

Существует два типа связей: forward (вперед) and reverse (назад), которые указываются ключевыми словами «rel» и «rev». Больше методов в помощнике принимают параметр $rel, который должен быть «rel» или «rev».  Так же в большинстве методов присутствует параметр $type, который используется для определения типа связи(alternate, start, next, prev, chapter).

Отношения могут быть добавлены к объектам страницы вручную или найдены путем обхода контейнера зарегистрированного в помощнике. Метод findRelation($page, $rel, $type) сначала пробует найти принятые  $rel и $type вызывая $page->findRel($type) и page->findRel($type). Если $page имеет связь, которая может быть конвертирована в объект страницы, то эта связь будет использована. Если же $page не имеет соответствующего известного  $type, то помощник вызовет метод searchRel{…}.Если такой метод  существует, он будет использован для определения отношений для $page путем перебора контейнера. 

Поиск связей

Не все отношения могут быть определены путем перебора контейнера. Есть отношения (связи) которые могут быть найдены через поиск:

1) searchRelStart() – отношения вперед, «пуск».( forward «start»). Первая страница в контейнере.

2) searchRelNext() - – отношения вперед, «следующая».( forward «next»). Находит следующую страницу в контейнере. После активной.

3) searchRelPrev() -  отношения вперед, «предыдущая».( forward «prev»). Находит предыдущую страницу в контейнере. Перед активной.

4) searchRelChapter() - отношения вперед, «главы».( forward «chapter»). Находит все страницы уровня «0»(ноль) кроме «пуск» или активную, если она имеет уровень «0».

5) searchRelSection() - отношения вперед, «раздел».( forward « section»). Находит все страницы, которые являются дочерними к активной странице, если активная страница имеет уровень «0» (a «chapter»).

6) searchRelSubsection() - отношения вперед, «подраздел».( forward «subsection»). Находит все страницы, которые являются дочерними к активной странице, если активная страница имеет уровень «1» (a «section»).

7) searchRevSection() - отношения назад, «раздел ».( forward «section»). Находит родительские страницы активной страницы, если у нее уровень «1» (a «section»).

8) searchRevSubsection() - отношения назад, «подраздел ».( forward « subsection»).  Находит родительские страницы активной страницы, если у нее уровень «2» (a «subsection»).

 

Важно: При поиске отношений в экземпляре страницы ($page->getRel($type) или $page->getRev($type)), помощник принимает значения типов String, Array, Zend\Config, Zend\Navigation\Page.
Если String (строка) -  будет конвертирована в Zend\Navigation\Page\Uri.
Если Array или Config -  будет конвертирована в одну или несколько экземпляров страниц. Если первый ключ array/config является цифра/число – считается, что будет содержать несколько страниц и каждая страница будет передана в фабрику страниц.
Если же первый ключ не цифра/число -  то array/config будет передан в фабрику целиком сразу, а вернется только одна страница.

Помощник также поддерживает магические методы для поиска отношений. Например, что б найти альтернативные отношения «вперед» вызовите $helper->findRelAlternate($page), а что б найти обратные связи вызовите $helper->findRevSection($page).Эти вызовы соответствуют $helper->findRelation($page, ‘rel’, ‘alternate’); and $helper->findRelation($page, ‘rev’, ‘section’); соответственно.

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

Zend\View\Helper\Navigation\Links::RENDER_ALTERNATE

Zend\View\Helper\Navigation\Links::RENDER_STYLESHEET

Zend\ViewHelper\Navigation\Links::RENDER_START

Zend\View\Helper\Navigation\Links::RENDER_NEXT

Zend\View\Helper\Navigation\Links:::RENDER_PREV

Zend\View\Helper\Navigation\Links::RENDER_CONTENTS

Zend\View\Helper\Navigation\Links::RENDER_INDEX

Zend\View\Helper\Navigation\Links::RENDER_GLOSSARY

Zend\View\Helper\Navigation\Links:::RENDER_COPYRIGHT

Zend\View\Helper\Navigation\Links::RENDER_CHAPTER

Zend\View\Helper\Navigation\Links::RENDER_SECTION

Zend\View\Helper\Navigation\Links::RENDER_SUBSECTION

Zend\View\Helper\Navigation\Links::RENDER_APPENDIX

Zend\View\Helper\Navigation\Links::RENDER_HELP

Zend\View\Helper\Navigation\Links::RENDER_BOOKMARK

Zend\View\Helper\Navigation\Links::RENDER_CUSTOM

Zend\View\Helper\Navigation\Links::RENDER_ALL

Константы между RENDER_ALTERNATE и RENDER_BOOKMARK обозначают стандартные типы ссылок в HTML. RENDER_CUSTOM обозначает нестандартные отношения, которые указаны на страницах. RENDER_ALL означает стандартные и нестандартные отношения.


Методы помощника  links:

1) {get|set}RenderFlag() gets/sets (получить/установить)  флаг рендеринга. По-умолчанию стоит RENDER_ALL. В примерах ниже будет показано как использовать флаги.

2) findAllRelations() – находит все отношения всех типов для заданной страницы.

3) findRelation() - находит все отношения заданного типа для заданной страницы.

4) searchRel{Start|Next|Prev|Chapter|Section|Subsection}() – перебирает контейнер и находит отношения «вперед» для страницы «старт», для следующей страницы, предыдущей, главы, разделы, подразделы.

5) searchRev{Section|Subsection}() -  перебирает контейнер и находит отношения «назад» для разделов и подразделов.

6) renderLink() -  рендрит отдельный элемент «link».

Объявление отношений на страницах:

$container = new ZendNavigation(array(
    array(
        'label' => 'Relations using strings',
        'rel'   => array(
            'alternate' => 'http://www.example.org/'
        ),
        'rev'   => array(
            'alternate' => 'http://www.example.net/'
        )
    ),
    array(
        'label' => 'Relations using arrays',
        'rel'   => array(
            'alternate' => array(
                'label' => 'Example.org',
                'uri'   => 'http://www.example.org/'
            )
        )
    ),
    array(
        'label' => 'Relations using configs',
        'rel'   => array(
            'alternate' => new ZendConfig(array(
                'label' => 'Example.org',
                'uri'   => 'http://www.example.org/'
            ))
        )
    ),
    array(
        'label' => 'Relations using pages instance',
        'rel'   => array(
            'alternate' => ZendNavigationPage::factory(array(
                'label' => 'Example.org',
                'uri'   => 'http://www.example.org/'
            ))
        )
    )
));

Рендеринг ссылок по-умолчанию:

In a view script or layout:
<?php echo $this->view->navigation()->links(); ?>
 
Output:
<link rel="alternate" href="/products/server/faq/format/xml">
<link rel="start" href="/" title="Home">
<link rel="next" href="/products/server/editions" title="Editions">
<link rel="prev" href="/products/server" title="Foo Server">
<link rel="chapter" href="/products" title="Products">
<link rel="chapter" href="/company/about" title="Company">
<link rel="chapter" href="/community" title="Community">
<link rel="canonical" href="http://www.example.com/?page=server-faq">
<link rev="subsection" href="/products/server" title="Foo Server">

Указываем, какие отношения рендерить (выводить):

Render only start, next, and prev:
$helper->setRenderFlag(Zend\View\Helper\Navigation\Links::RENDER_START |
                       Zend\View\Helper\Navigation\Links::RENDER_NEXT |
                       Zend\View\Helper\Navigation\Links::RENDER_PREV);
 
Output:
<link rel="start" href="/" title="Home">
<link rel="next" href="/products/server/editions" title="Editions">
<link rel="prev" href="/products/server" title="Foo Server">
Render only native link types:
$helper->setRenderFlag(Zend\View\Helper\Navigation\Links::RENDER_ALL ^
                       Zend\View\Helper\Navigation\Links::RENDER_CUSTOM);
 
Output:
<link rel="alternate" href="/products/server/faq/format/xml">
<link rel="start" href="/" title="Home">
<link rel="next" href="/products/server/editions" title="Editions">
<link rel="prev" href="/products/server" title="Foo Server">
<link rel="chapter" href="/products" title="Products">
<link rel="chapter" href="/company/about" title="Company">
<link rel="chapter" href="/community" title="Community">
<link rev="subsection" href="/products/server" title="Foo Server">
Render all but chapter:
$helper->setRenderFlag(Zend\View\Helper\Navigation\Links::RENDER_ALL ^
                       Zend\View\Helper\Navigation\Links::RENDER_CHAPTER);
 
Output:
<link rel="alternate" href="/products/server/faq/format/xml">
<link rel="start" href="/" title="Home">
<link rel="next" href="/products/server/editions" title="Editions">
<link rel="prev" href="/products/server" title="Foo Server">
<link rel="canonical" href="http://www.example.com/?page=server-faq">
<link rev="subsection" href="/products/server" title="Foo Server">

Автор статьи: DuB