Разработка сайтов на WordPress и фреймворке Yii2

Здесь Вы можете заказать полный пакет услуг по разработке сайта. Начиная от написания ТЗ до программирования на PHP, JavaScript и верстке.

Как создать таблицу в панели администратора WordPress. Часть 2.2.

Как создать таблицу в админке WordPress. Часть 2.2.

Доброго времени суток, уважаемые читатели блога!
Давайте продолжим разбирать наш плагин таблицы «по косточкам». И в этой части мы рассмотрим наш класс таблицы «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'),
	);
}

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

9 комментариев к статье "Как создать таблицу в панели администратора WordPress. Часть 2.2."

  1. Олег

    Здравствуйте уважаемый автор. В процессе изучения Вашего плагина "Lessons "Tabele Create" Part 2" , скаченного по адресу: http://plance.top/wp-content/uploads/2016/02/plance-lessons-table-create-part2.zip
    я обнаружил, что в выпадающем меню "настройки экрана" - не работает функция выбора колонок таблицы для их отображения/скрытия. Не могли-ли Вы подсказать как это поправить.
    С уважением, Олег.

    ответить
    1. Pavel

      Я знаю об этом. Проблема в значении переменной:

      $_REQUEST['page']

      А точнее из-за подчеркивания. Насколько я помню, она имеет вид "Plance_Table_Lessons2", а должна иметь - "plance-table-lessons2".

      ответить
      1. Олег

        Я смотрю Ваш код и вижу, что переменная $_REQUEST['page'] используется дважды в функции function column_ex_title($item) и больше нигде. Видимо что-то в другом месте...

        ответить
        1. Pavel

          Без проверки утверждать не могу, но вот часть кода влияющая на это:

          $hook = add_menu_page(
          'Table',
          'Table',
          'manage_options',
          __CLASS__,
          array($this, 'createTable')
          );

          А точнее "__CLASS__", эта системная константа содержит название класса.
          А сама эта конструкция формирует пункт меню.

          ответить
  2. Олег

    Посмотрел константу "__CLASS__" В ней хранится Plance_INIT_Lessons2
    И что делать?

    ответить
    1. Pavel

      Измените к примеру на это - "plance-table-lessons2"

      ответить
  3. Олег

    Все заработало. Спасибо за помощь.

    ответить
  4. Олег

    Здравствуйте, Павел. В Вашем лекционном материале есть функция 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()
    для включения сортировки по столбцам.
    Спасибо.

    ответить
    1. Pavel

      Здравствуйте, Олег!
      На данном этапе, на функцию "get_sortable_columns()" не обращайте внимание. Просто знайте что она отвечает за поля которые участвуют в сортировке. Она будет "реально" задействована когда данные будут браться из БД (в одном из следующих уроков). Ниже, пример кода который взаимодействует с глобальной переменной $_GET,значение которой и есть поля и направление сортировки:

      $per_page = $this -> get_pagination_arg('per_page');
      $order_ar = $this -> get_sortable_columns();
      $orderby = 'date_create';
      $order = 'DESC';

      if(isset($_GET['orderby']) && isset($order_ar[$_GET['orderby']]))
      {
      $orderby = $_GET['orderby'];
      }

      if(isset($_GET['order']))
      {
      $order = $_GET['order'] == 'asc' ? 'asc' : 'desc';
      }

      $sql = "SELECT *
      FROM `{$wpdb -> prefix}plance_xyz`
      {$this -> _getSqlWhere()}
      ORDER BY `{$orderby}` {$order}
      LIMIT ".(($this -> get_pagenum() - 1) * $per_page).", {$per_page}
      ";

      return $wpdb -> get_results($sql, ARRAY_A);

      ответить

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *