Last View¶
Предназначение¶
- Дает возможность сохранять параметры от текущего запуска/использования того или иного функционала.
- Сохранение параметров расширенного поиска в административном интерфейсе (товары, заказы, фильтры и т.д.)
 - Просмотр страницы списка объектов (товары, заказы, фильтры и т.д.) с использованием параметров с последнего просмотра.
 
 - Дает возможность быстрой навигации по детальным страницам объектов (предыдущий, следующий).
- Блок ссылок “следующий/предыдущий” на детальных страницах объектов (товары, заказы, категории и т.д.)
 
 
Принцип работы¶
Настройка¶
Для работы функционала необходимо описать схему:
'products' => array(
    'list_mode' => 'search',
    'view_mode' => 'quick_view',
    'update_mode' => 'update',
    'default_navigation' => array (
        'mode' => 'view',
        'function' => 'fn_lv_get_product_default_navigation'
    ),
    'func' => 'fn_get_products',
    'item_id' => 'product_id',
    'auth' => true,
    'links_label' => 'label',
    'show_item_id' => true,
)
- products — объект, к которому применяется функционал. Используется для определения текущей схемы по идентификатору контроллера.
 - list_mode — используется для проверки необходимости сохранения текущего запроса. По умолчанию равен manage. Проверяется в методе 
LastView::instance()->prepare($_REQUEST);. Если текущийdispatch modeравен значению параметра list_mode, то параметры запроса к странице будут сохранены. - view_mode — используется во front-end для проверки необходимости инициализации параметров быстрой навигации.
 - update_mode — используется в back-end для проверки необходимости инициализации параметров быстрой навигации.
 - default_navigation — используется во front-end для инициализации быстрой навигации, если данные еще не были получены ранее.
 - func — имя функции, которая будет отвечать за инициализацию данных для быстрой навигации.
 - item_id — строковый индекс, по которому из массива параметров будет запрашиваться идентификатор объекта.
 - auth — если true, то в функцию инициализации быстрой навигации будет передан массив, описывающий текущего авторизованного пользователя.
 - links_label — альтернативный 
titleдля ссылок в быстрой навигации. - show_item_id — если true, то в альтернативном 
titleдля ссылок в быстрой навигации будет добавлены идентификатор объектов. 
Методы¶
LastView::instance()->prepare($params)Для back-end:
- При POST запросе и при наличии в массиве 
$paramsключа return_to_list инициализирует параметрredirect_urlравным ссылке на список объектов с указаниемaction = last_view, т.е. формирует ссылку на список с указанием, что необходимо восстановить параметры с предыдущего просмотра. - Если 
dispatch actionравенlast_viewи текущийdispatch modeравен значению list_mode или update_mode из схемы, то будет предпринята попытка восстановить ранее сохраненные параметры. - Если 
dispatch actionне равен save_view, delete_view, и текущийdispatch modeравен значению list_mode или update_mode из схемы, и отсутствуют ранее сохраненные данные, то будут сохранены текущие параметры запроса. 
Примечание
В двух последних пунктах так же проверяется наличие в схеме ключа
func, хотя на данном этапе особой необходимости в этом нет.- При POST запросе и при наличии в массиве 
 Для front-end:
- Если текущий 
dispatch modeравен значению list_mode из схемы, то будут сохранены текущие параметры запроса. 
- Если текущий 
 
Иными словами метод предназначен для модификации/сохранения запроса перед вызовом контроллеров.
Метод вызывается в функции
fn_dispatch.LastView::instance()->update('products', $params)- Для back-end:
- Если в массиве параметров установлено значение по ключу skip_view, то метод завершает свою работу и возвращает немодифицированный 
$params. Дальнейшие условия не будут отработаны. - Если 
dispatch actionравен save_view и в массиве параметров есть значение по ключу new_view, то текущие параметры будут сохранены под именем значения ключа new_view. После сохранения вызывается редирект, на текущую страницу, но безdispatch action. - Если 
dispatch actionравен delete_view и в массиве параметров указано значение по ключу view_id, то удаляются ранее сохраненные параметры с идентификатором view_id. - Если 
dispatch actionравен reset_view, то сбрасывается активность всех ранее сохраненных параметров по текущему объекту для текущего пользователя. - Если в массиве параметров установлено значение по ключу view_id, то будет предпринята попытка восстановить параметры из ранее сохраненных параметров по идентификатору view_id, так же устанавливает активность для ранее сохраненных параметров.
 
 - Если в массиве параметров установлено значение по ключу skip_view, то метод завершает свою работу и возвращает немодифицированный 
 
- Для front-end:
- Не выполняет ни каких действий.
 
 
Метод вызывается в функциях, которые осуществляют непосредственно выборку данных, например
fn_get_products. Используется, например, для сохранения/удаления/восстановления параметров расширенного поиска по товарам.- Для back-end:
 LastView::instance()->processResults('products', $products, $params);Подготавливает параметры быстрой навигации, для последующего сохранения. Метод вызывается после выборки данных, например в функции
fn_get_products. Подготовленные параметры помещаются в хранилище черезRegistry::set.LastView::instance()->init($params)- Вызывает метод 
_saveViewResultsдля сохранения параметров быстрой навигации. - Вызывает метод 
_isNeedViewToolsдля проверки необходимости инициализации быстрой навигации. Для проверки сравниваютсяdispatch modeс значениями list_mode или update_mode из схемы. - При необходимости инициализации быстрой навигации, вызывает метод 
_initViewTools. - При отсутствии параметров быстрой навигации, вызывает метод 
_initDefaultViewTools. 
Метод вызывается в функции
fn_dispatchпосле вызова всех контроллеров.- Вызывает метод 
 LastView::instance()->_saveViewResults($params)При наличии ключа save_view_results в массиве параметров, будет предпринята попытка сохранить параметры быстрой навигации. Ключ save_view_results при необходимости добавляется в методе
LastView::instance()->prepare($params).Текущие значение быстрой навигации запрашиваются методом
Registry::get, эти данные должны были быть подготовленны методомLastView::instance()->processResults('products', $products, $params);.Есть определенные разногласия между
_saveViewResultsиprocessResults:- метод 
processResultsсохраняет параметры, используя ключview_results.fn_get_' . $func, где $func — это текущий объект (контроллер); - метод 
_saveViewResultsиспользует ключ'view_results.' . $this->_schema['func']. Т.е. чтобы это работало необходимо в схеме указывать функциюfn_get_{object}. 
- метод 
 LastView::instance()->_initViewTools($params)Инициирует параметры быстрой навигации:
- Если ранее сохранных параметров нет, возвращает false.
 - По значению item_id из схемы определяет текущий идентификатор объекта.
 - Рассчитывает значения для ссылок “предыдущий”/”следующий”.
 - Если для текущего объекта, не удается получить данные для “предыдущий”/”следующий” (например объект является последним на текущей странице), то будет выполнена функция 
funcиз схемы, которая должна будет вернуть массив объектов для предыдущей/следующей страницы. 
LastView::instance()->_initDefaultViewTools($params)Метод вызывается, если параметры быстрой навигации не были инициированы — например, если пользователь перешел на детальную страницу объекта по прямой ссылке, миную страницу списка объектов.
Вызывает функцию, указанную в схеме
default_navigation. Эта функция по идентификатору объекта должна рассчитать текущее положение объекта в навигации и вернуть массив для инициализации быстрой навигации.
Применение¶
Применение Last View будет рассмотрено на примере товаров.
Сохранение параметров.
Данный функционал используется для сохранения поисковых запросов в административном интерфейсе. Позволяет пользователю сохранить разные варианты фильтров по товарам для быстрого доступа. Сохранение доступно в диалоге расширенного поиска. Отображение/управление ранее сохраненными фильтрами доступно в списке товаров, справа над фильтром.
Также данный функционал используется в хлебных крошках. Например когда пользователь перешел на страницу товара, после фильтрации товаров, в этом случае в хлебных крошках, будет добавлена ссылка на список товаров с action = ‘last_view’
Быстрая навигация.
Функционал используется как в публичном, так и в административном интерфейсе. Представляет из себя группу ссылок на следующий и предыдущий товары, отображаются на детальной странице товара в публичке и на странице обновления товара в админке.