You are here

public function TableSortExampleController::description in Examples for Developers 8

Same name and namespace in other branches
  1. 3.x modules/tablesort_example/src/Controller/TableSortExampleController.php \Drupal\tablesort_example\Controller\TableSortExampleController::description()

A simple controller method to explain what the tablesort example is about.

1 string reference to 'TableSortExampleController::description'
tablesort_example.routing.yml in tablesort_example/tablesort_example.routing.yml
tablesort_example/tablesort_example.routing.yml

File

tablesort_example/src/Controller/TableSortExampleController.php, line 45

Class

TableSortExampleController
Controller routines for tablesort example routes.

Namespace

Drupal\tablesort_example\Controller

Code

public function description() {

  // We are going to output the results in a table with a nice header.
  $header = [
    // The header gives the table the information it needs in order to make
    // the query calls for ordering. TableSort uses the field information
    // to know what database column to sort by.
    [
      'data' => $this
        ->t('Numbers'),
      'field' => 't.numbers',
    ],
    [
      'data' => $this
        ->t('Letters'),
      'field' => 't.alpha',
    ],
    [
      'data' => $this
        ->t('Mixture'),
      'field' => 't.random',
    ],
  ];

  // Using the TableSort Extender is what tells  the query object that we
  // are sorting.
  $query = $this->database
    ->select('tablesort_example', 't')
    ->extend('Drupal\\Core\\Database\\Query\\TableSortExtender');
  $query
    ->fields('t');

  // Don't forget to tell the query object how to find the header information.
  $result = $query
    ->orderByHeader($header)
    ->execute();
  $rows = [];
  foreach ($result as $row) {

    // Normally we would add some nice formatting to our rows
    // but for our purpose we are simply going to add our row
    // to the array.
    $rows[] = [
      'data' => (array) $row,
    ];
  }

  // Build the table for the nice output.
  $build = [
    '#markup' => '<p>' . t('The layout here is a themed as a table
           that is sortable by clicking the header name.') . '</p>',
  ];
  $build['tablesort_table'] = [
    '#theme' => 'table',
    '#header' => $header,
    '#rows' => $rows,
  ];
  return $build;
}