Публикация в группе: Плагин WP-Recall - Личный кабинет на WordPress

Категории группы: Обновления

Плагин WP-Recall развивается уже довольно долго, но так получилось, что вопрос добавления и развития функционала дочерних вкладок никогда не ставился на повестку дня, хотя необходимость создания таких вкладок  назрела уже давно и их реализация открывает большие перспективы по оптимизации вывода контента внутри вкладок личного кабинета. В этой версии были реализованы дочерние вкладки.

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

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

2016-09-02_15-34-15

А под этим меню будет выводится контент активной дочерней вкладки.

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

Итак, перейдем к самому интересному, а именно к коду и деталям регистрации основной вкладки и ее дочерних элементов.

Новый функционал продиктовал необходимость внесения корректив в процесс регистрации основной вкладки. Теперь необходимо формировать массив данных с новой структурой и передавать его в функцию rcl_tab(), рассмотрим полный набор параметров которые может примать указанная функция на данный момент:

array(
    'id'=>'id-tab', //строка, указание идентификатор основной вкладки
    'name'=>'Имя вкладки', //строка, наименование вкладки
    'supports'=>array(), //массив, указание поддерживаемых возможностей, например ajax и cache
    'public'=>1, //указание статуса приватности вкладки
    'icon'=>'fa-book', //класс иконки с сервиса http://fontawesome.io/icons/
    'output'=>'menu', //область вывода кнопки вкладки внутри личного кабинета
    'counters'=>10, //число, счетчик выводимый внутри кнопки на вызов вкладки
    'content'=>array() //массив с данными дочерних вкладок
)

Приведу пример регистрации основной вкладки личного кабинета по новым правилам с минимальным набором необходимых параметров:

add_action('init','register_my_tab');
function register_my_tab(){

    $tab_data =	array(
        'id'=>'id-tab',
        'name'=>'Имя вкладки',
        'content'=>array(
            array(
                'callback' => array(
                    'name'=>'my_custom_function'
                )
            )
        )
    );

    rcl_tab($tab_data);
}

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

Если необходимо передать свои аргументы, то добавляем их через указание массива аргументов:

        'content'=>array(
            array(
                'callback' => array(
                    'name'=>'my_custom_function',
                    'args'=>array($arg_1,$arg_2),
                )
            )
        )

Таким образом, будет зарегистрирована самая обычная приватная вкладка личного кабинета.

Расширим регистрацию вкладки с указанием расширенных параметров и двух дочерних вкладок:

add_action('init','register_my_tab');
function register_my_tab(){

    $tab_data =	array(
        'id'=>'id-tab',
        'name'=>'Имя вкладки',
        'supports'=>array('ajax','cache'),//поддержка кеширования и ajax-загрузки
        'public'=>1,//делаем вкладку публичной
        'icon'=>'fa-book',//указываем иконку
        'output'=>'menu',//указываем область вывода
        'content'=>array(
            array( //массив данных первой дочерней вкладки
                'id' => 'subtab-1', //идентификатор дочерней вкладки
                'name' => 'Имя подвкладки 1', //имя дочерней вкладки
                'icon' => 'fa-icon', //иконка кнопки вывода дочерней вкладки
                'callback' => array(
                    'name'=>'custom_function_1',//функция формирующая контент
                    'args'=>array($arg_1,$arg_2) //перечень аргументов передаваемых в функцию
                )
            ),
            array( //массив данных второй дочерней вкладки
                'id' => 'subtab-2',
                'name' => 'Имя подвкладки 2',
                'icon' => 'fa-icon',
                'callback' => array(
                    'name'=>'custom_function_2',
                    'args'=>array($arg_1)
                )
            ),
        )
    );

    rcl_tab($tab_data);
}

Как можно заметить в приведенном коде мы добавили для вкладки поддержку кеширования и ajax-загрузки, указали публичный доступ, иконку и область вывода. Кроме того, были сформированы два массива с данными дочерних вкладок, в них мы также указали необходимые данные для правильного формирования кнопок вывода этих вкладок и вывода контента. Каждая дочерняя вкладка подразумевает указание массива 'callback', в котором через параметр 'name' необходимо передавать наименование функции формирующей контент этой вкладки и, если есть необходимость, через параметр 'args' передаем массив аргументов которые указанная функция будет принимать. Если аргументы не будут указаны, то функция будет принимать идентификатор пользователя текущего личного кабинета.

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

Рассмотрим возможность добавления своих дочерних вкладок внутрь любой другой, уже существующей, вкладки личного кабинета:

add_action('rcl_setup_tabs','my_add_sub_tab',10);
function my_add_sub_tab(){
   
    $subtab = array(
        'id'=> 'subtab-2',
        'name'=> 'Моя вкладка',
        'icon' => 'fa-icon',
        'callback'=>array(
            'name'=>'my_custom_function',
            'args'=>array($arg_1,$arg_2)
        )
    );
   
    rcl_add_sub_tab('parent-tab-id',$subtab);
   
}

Как можно заметить, мы формируем массив новой дочерней вкладки при срабатывании события "rcl_setup_tabs" и передаем его внутрь функции вторым аргументом

rcl_add_sub_tab('parent-tab-id',$subtab);

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

Формируемый массив по своей структуре идентичен массиву данных дочерней вкладки при регистрации вкладки через функцию rcl_tab().

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

Теперь нет необходимости создавать новую вкладку личного кабинета, когда логичнее выводить данные в дочерней вкладке. Стало проще структурировать контент личного кабинета и выводить его.

Надеюсь новый функционал плагина найдет признание у разработчиков дополнений к плагину WP-Recall и будет ими широко использоваться.

ПС: Новый метод регистрации вкладки личного кабинета через функцию rcl_tab() полностью совместим со всеми ранее выпущенными дополнениями, где применяется старый способ регистрации вкладок. Авторам таких дополнений в дальнейшем рекомендуется перевести регистрацию вкладок к актуальному состоянию.

 

6

Автор публикации

не в сети 3 часа

Андрей CS

12K
рассматриваю задания
Комментарии: 2744Публикации: 481Регистрация: 30-11--0001Продаж/Покупок: 0/0