Last View

Предназначение

  1. Дает возможность сохранять параметры от текущего запуска/использования того или иного функционала.
    • Сохранение параметров расширенного поиска в административном интерфейсе (товары, заказы, фильтры и т.д.)
    • Просмотр страницы списка объектов (товары, заказы, фильтры и т.д.) с использованием параметров с последнего просмотра.
  2. Дает возможность быстрой навигации по детальным страницам объектов (предыдущий, следующий).
    • Блок ссылок “следующий/предыдущий” на детальных страницах объектов (товары, заказы, категории и т.д.)

Принцип работы

Настройка

Для работы функционала необходимо описать схему:

'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, хотя на данном этапе особой необходимости в этом нет.

    • Для 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, так же устанавливает активность для ранее сохраненных параметров.
    • Для front-end:
      • Не выполняет ни каких действий.

    Метод вызывается в функциях, которые осуществляют непосредственно выборку данных, например fn_get_products. Используется, например, для сохранения/удаления/восстановления параметров расширенного поиска по товарам.

  • 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 будет рассмотрено на примере товаров.

  1. Сохранение параметров.

    Данный функционал используется для сохранения поисковых запросов в административном интерфейсе. Позволяет пользователю сохранить разные варианты фильтров по товарам для быстрого доступа. Сохранение доступно в диалоге расширенного поиска. Отображение/управление ранее сохраненными фильтрами доступно в списке товаров, справа над фильтром.

    Также данный функционал используется в хлебных крошках. Например когда пользователь перешел на страницу товара, после фильтрации товаров, в этом случае в хлебных крошках, будет добавлена ссылка на список товаров с action = ‘last_view’

  2. Быстрая навигация.

    Функционал используется как в публичном, так и в административном интерфейсе. Представляет из себя группу ссылок на следующий и предыдущий товары, отображаются на детальной странице товара в публичке и на странице обновления товара в админке.