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’ 
- Быстрая навигация. - Функционал используется как в публичном, так и в административном интерфейсе. Представляет из себя группу ссылок на следующий и предыдущий товары, отображаются на детальной странице товара в публичке и на странице обновления товара в админке. 
 
                         
        