Як обробляються групові дії в класах спеціальних списків?


9

Я працюю над спеціальною таблицею даних для відображення на інформаційній панелі WordPress. Таблиця заповнюється з таблиці бази даних, яку я вбудував у плагін.

Я використовую наданий приклад таблиці таблиць користувальницького списку WordPress для більшості моїх питань кодування в цій області, але в цьому прикладі немає нічого для обробки масових дій. Ось посилання на документальний приклад: http://wordpress.org/extend/plugins/custom-list-table-example/

Для обробки об'ємних дій приклад передбачає лише таке:

    function process_bulk_action() {

    //Detect when a bulk action is being triggered...
    if( 'delete'===$this->current_action() ) {

        wp_die('Items deleted!');
    }

}

Я хочу знати, як витягнути елементи, вибрані для дії, щоб я міг їх видалити або відповідно редагувати записи в базі даних.

Відповіді:


11

Якщо припустити, що ви використовуєте стандартну функцію column_cb (), таблиця списку передасть ідентифікатори вибраних рядків у масиві в $ _GET, позначених як те, що вам призначено для "сингулярного" в конструкторі таблиці списку.

Ось типовий column_cb ():

function column_cb($item){
        return sprintf(
            '<input type="checkbox" name="%1$s[]" value="%2$s" />',
            /*$1%s*/ $this->_args['singular'],  //Let's simply repurpose the table's singular label ("video")
            /*$2%s*/ $item->id             //The value of the checkbox should be the record's id
        );
    }

Наприклад, скажімо, у мене є таблиця зі списком, яка відображає відео. Конструктор виглядатиме так:

function __construct(){
        global $status, $page;

        //Set parent defaults
        parent::__construct( array(
            'singular'  => 'video',     //singular name of the listed records
            'plural'    => 'videos',    //plural name of the listed records
            'ajax'      => false        //does this table support ajax?
        ) );

    }

Отже, якщо ви перевірте три рядки в таблиці списку, виберіть "Видалити" зі списку групових дій і натисніть кнопку застосувати, ви можете отримати доступ до вибраних рядків за допомогою $ _GET ['video'].

function process_bulk_action() {

        //Detect when a bulk action is being triggered...
        if( 'delete'===$this->current_action() ) {
            foreach($_GET['video'] as $video) {
                //$video will be a string containing the ID of the video
                //i.e. $video = "123";
                //so you can process the id however you need to.
                delete_this_video($video);
            }
        }

    }

Дякую! Будь-які ідеї про те, як реалізувати групування "редагування", яке працює так само, як і інші таблиці WordPress?
Chiubaka

Ви можете впоратися з цим подібним чином, за винятком того, що інтерфейс користувача буде значно більше. Напевно, я б не використовував метод за замовчуванням process_bulk_action () у такому випадку, тому що найбільш корисним інтерфейсом був би, ймовірно, той, який змінює рядки сітки на редаговані поля. У такому випадку ви все одно отримаєте вибрані елементи в масиві $ _GET, але вам доведеться перекрити спосіб виведення HTML у класі таблиці списку. Набагато складніший сценарій, але спосіб отримання доступу до ідентифікаторів той самий.
Нейт Дудек
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.