Доброго времени суток, уважаемые читатели блога!
Давайте продолжим разбирать наш плагин таблицы «по косточкам». И в этой части мы рассмотрим наш класс таблицы «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'), ); }
Как видите, все просто. Достаточно попрактиковаться день-два и все будет понятно.
Но а в следующих статьях данного цикла, мы рассмотрим взаимодействие таблицы с данными из базы данных.
UPD. 2021-06-04. Добавил на гитхаб пример реализации таблицы в админке WP. Выгрузить можно по этой ссылке.
Здравствуйте уважаемый автор. В процессе изучения Вашего плагина "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
Добрый день.
Не планируется ли продолжение статей или все заглохло?
Здравствуйте, планируется. Но когда когда будет продолжение - сориентировать не могу.
Добрый день.
Появилась мысль написать похожий комментарий, каки Иван. Эх 🙁 материал очень хороший и изложен понятным языком. В ру сегменте я даже близко похожего не нашел (имею ввиду гайд от А до Я). Жаль что продолжение пока не планируется.
А могли бы дать совет, возможно по нему закончить смогу. Мне осталось все это дело подружить с БД. В сети я находил различные варианты взаимодействия, через WP_List_Table{}, dbDelta() - ранее дел с произвольными не имел и немножо растерялся, что выбрать.
Я в двух словах опишу ситуацию, может вы подскажите какой подход лучше всего:
>> В таблице будут хранится данные сплит-тестирования (5 столбцов в поле + id). То есть я не пытаюсь сделать аналог постов, с таксономиями или другими прелестями. Изменение некоторых значений в строках будет производится через запросы (в админке возможности редактирования не будет- только просмотр).
Примерно так...методы отвечающие за CRUD сделаю, мне понять бы сам принцип:
Где объявить создание таблицы (понимаю, что в классе для взаимодействия с таблицей - я назвал SplitTestingCreateTable). На каком этапе - конструктор (и делать проверку версии, что бы каждый раз не пыталась создаваться таблица), в статическом методе.
Если приоткроете завесу этой, темной для меня темы, буду очень вам признателен 🙂
P.S. но в любом случае - спасибо, материал в предыдущих статьях - отличный!
Здравствуйте. Ваша почта в комментарии указана правильно? Постараюсь завтра выслать вам рабочий код.
Совершенно верно, на неё получил уведомление 🙂
Если вы вышлете исходник - это будет бомба =) впереди выходные, как раз можно будет спокойно разобраться, а не по 2-3 часа после работы!
Или вышлю или где-то в статье прикреплю. Вам отпишусь 🙂
Я тоже хочу рабочий код для манипулирования данными из базы данных =)
Код на гитхабе, ссылка в конце статьи.