Доброго времени суток, уважаемые читатели блога!
Давайте продолжим разбирать наш плагин таблицы «по косточкам». И в этой части мы рассмотрим наш класс таблицы «Plance_Table_Lessons2».
Открыв наш класс, первым методом мы можем обнаружить «prepare_items()». Он отвечает за подготовку данных для отображения. Его вызов обязателен. Но а сам метод, имеет следующий код:
public function prepare_items() { //Sets $per_page = $this -> get_items_per_page('plance_per_page', 10); /* Получаем данные для формирования таблицы */ $data = $this -> table_data(); /* Устанавливаем данные для пагинации */ $this -> set_pagination_args( array( 'total_items' => count($data), 'per_page' => $per_page )); /* Делим массив на части для пагинации */ $data = array_slice( $data, (($this -> get_pagenum() - 1) * $per_page), $per_page ); $this -> _column_headers = $this -> get_column_info(); /* Устанавливаем данные таблицы */ $this -> items = $data; }
строкой ниже мы получаем количество записей для нашей пагинации. Форму настройки мы настраивали в предыдущей статье. Смотрите метод «showScreenOptions».
$per_page = $this -> get_items_per_page('plance_per_page', 10);
данные о настройках пагинации, для каждого пользователя индивидуальны. И хранятся в таблице «wp_usermeta», саму запись можно найти по ключу «plance_per_page».
В данном уроке, мы немного сократили наш код. И заменили:
$this -> _column_headers = array( $this -> get_columns(), $this -> get_hidden_columns(), $this -> get_sortable_columns() );
на:
$this -> _column_headers = $this -> get_column_info();
что выглядит более элегантнее 🙂
Правим метод «get_columns()», отвечающий за название наших колонок. И добавляем первым индексом массива чекбокс, для групповых действий над записями:
public function get_columns() { return array( 'cb' => '<input type="checkbox" />', .... ); }
Теперь, нам нужно создать дополнительную колонку для чекбоксов наших записей. Это мы реализуем в отдельном методе:
function column_cb($item) { return '<input type="checkbox" name="id[]" value="'.$item['ex_id'].'" />'; }
описывать метод думаю смысла нет, т. к. он достаточно прост.
Так же, нам нужно добавить ссылки на страницы редактирования и удаления записей. Для этого, мы так же создадим отдельный метод, с названием колонки:
function column_ex_title($item) { return $item['ex_title'].' '.$this -> row_actions(array( 'edit' => '<a href="?page='.$_REQUEST['page'].'&action=edit&book='.$item['ex_id'].'">редактировать</a>', 'delete' => '<a href="?page='.$_REQUEST['page'].'&action=delete&book='.$item['ex_id'].'">удалить</a>', )); }
в данном случае, к названию нашей записи, посредством метода «row_actions()» мы присоединяем к ней две ссылки. Где ключ — уникальный идентификатор ссылки, а ее значение — ссылка или какой-либо текст. Количество ссылок может быть произвольным. Как формировать адреса ссылок — дело сугубо личное.
И самый последний метод который мы рассмотрим в этой статье. Это метод формирующий выпадающий список для групповых действий:
function get_bulk_actions() { return array( 'delete' => __('delete', 'plance'), 'lock' => __('lock', 'plance'), 'unlock' => __('unlock', 'plance'), ); }
Как видите, все просто. Достаточно попрактиковаться день-два и все будет понятно.
Но а в следующих статьях данного цикла, мы рассмотрим взаимодействие таблицы с данными из базы данных.
Здравствуйте уважаемый автор. В процессе изучения Вашего плагина "Lessons "Tabele Create" Part 2" , скаченного по адресу: http://plance.top/wp-content/uploads/2016/02/plance-lessons-table-create-part2.zip
я обнаружил, что в выпадающем меню "настройки экрана" - не работает функция выбора колонок таблицы для их отображения/скрытия. Не могли-ли Вы подсказать как это поправить.
С уважением, Олег.
Я знаю об этом. Проблема в значении переменной:
А точнее из-за подчеркивания. Насколько я помню, она имеет вид "Plance_Table_Lessons2", а должна иметь - "plance-table-lessons2".
Я смотрю Ваш код и вижу, что переменная $_REQUEST['page'] используется дважды в функции function column_ex_title($item) и больше нигде. Видимо что-то в другом месте...
Без проверки утверждать не могу, но вот часть кода влияющая на это:
А точнее "__CLASS__", эта системная константа содержит название класса.
А сама эта конструкция формирует пункт меню.
Посмотрел константу "__CLASS__" В ней хранится Plance_INIT_Lessons2
И что делать?
Измените к примеру на это - "plance-table-lessons2"
Все заработало. Спасибо за помощь.
Здравствуйте, Павел. В Вашем лекционном материале есть функция prepare_items(). Там, ранее было:
$this -> _column_headers = array(
$this -> get_columns(),
$this -> get_hidden_columns(),
$this -> get_sortable_columns()
);
затем, стало:
$this -> _column_headers = $this -> get_column_info();
Вопрос. Как, в дальнейшем использовать функцию get_sortable_columns()
для включения сортировки по столбцам.
Спасибо.
Здравствуйте, Олег!
На данном этапе, на функцию "get_sortable_columns()" не обращайте внимание. Просто знайте что она отвечает за поля которые участвуют в сортировке. Она будет "реально" задействована когда данные будут браться из БД (в одном из следующих уроков). Ниже, пример кода который взаимодействует с глобальной переменной $_GET,значение которой и есть поля и направление сортировки:
Доброго времени суток!
Подскажите а как вывести данные на главную страницу например?
Здравствуйте, Владимир. Вывести можно используя методы объекта WPDB - get_results, get_var, get_row, get_col, пр.
Смотрите статью - https://plance.top/wordpress/vzaimodeystvie-plagina-s-bazoy-dannyih-wordpress-chast-2.html