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