template_preprocess_table(&$variables)
Prepares variables for table templates.
Default template: table.html.twig.
Parameters
array $variables: An associative array containing:
-
header: An array containing the table headers. Each element of the array can be either a localized string or an associative array with the following keys:
- data: The localized title of the table column, as a string or render array.
- field: The database field represented in the table column (required if user is to be able to sort on this column).
- sort: A default sort order for this column ("asc" or "desc"). Only one column should be given a default sort order because table sorting only applies to one column at a time.
- class: An array of values for the 'class' attribute. In particular, the least important columns that can be hidden on narrow and medium width screens should have a 'priority-low' class, referenced with the RESPONSIVE_PRIORITY_LOW constant. Columns that should be shown on medium+ wide screens should be marked up with a class of 'priority-medium', referenced by with the RESPONSIVE_PRIORITY_MEDIUM constant. Themes may hide columns with one of these two classes on narrow viewports to save horizontal space.
- Any HTML attributes, such as "colspan", to apply to the column header cell.
-
rows: An array of table rows. Every row is an array of cells, or an associative array with the following keys:
- data: An array of cells.
- Any HTML attributes, such as "class", to apply to the table row.
- no_striping: A Boolean indicating that the row should receive no 'even / odd' styling. Defaults to FALSE.
Each cell can be either a string or an associative array with the following keys:
- data: The string or render array to display in the table cell.
- header: Indicates this cell is a header.
- Any HTML attributes, such as "colspan", to apply to the table cell.
Here's an example for $rows:
1 2 3 4 5 6 7 8 9 10 | $rows = array ( // Simple row array ( 'Cell 1' , 'Cell 2' , 'Cell 3' ), // Row with attributes on the row and some of its cells. array ( 'data' => array ( 'Cell 1' , array ( 'data' => 'Cell 2' , 'colspan' => 2)), 'class' => array ( 'funky' ) ), ); |
- footer: An array of table rows which will be printed within a <tfoot> tag, in the same format as the rows element (see above).
- attributes: An array of HTML attributes to apply to the table tag.
- caption: A localized string to use for the <caption> tag.
-
colgroups: An array of column groups. Each element of the array can be either:
- An array of columns, each of which is an associative array of HTML attributes applied to the <col> element.
- An array of attributes applied to the <colgroup> element, which must include a "data" attribute. To add attributes to <col> elements, set the "data" attribute with an array of columns, each of which is an associative array of HTML attributes.
Here's an example for $colgroup:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | $colgroup = array ( // <colgroup> with one <col> element. array ( array ( 'class' => array ( 'funky' ), // Attribute for the <col> element. ), ), // <colgroup> with attributes and inner <col> elements. array ( 'data' => array ( array ( 'class' => array ( 'funky' ), // Attribute for the <col> element. ), ), 'class' => array ( 'jazzy' ), // Attribute for the <colgroup> element. ), ); |
These optional tags are used to group and set properties on columns within a table. For example, one may easily group three columns and apply same background style to all.
- sticky: Use a "sticky" table header.
- empty: The message to display in an extra row if table does not have any rows.
File
- core/includes/theme.inc, line 893
- The theme system, which controls the output of Drupal.
Code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | function template_preprocess_table(& $variables ) { // Format the table columns: if (! empty ( $variables [ 'colgroups' ])) { foreach ( $variables [ 'colgroups' ] as & $colgroup ) { // Check if we're dealing with a simple or complex column if (isset( $colgroup [ 'data' ])) { $cols = $colgroup [ 'data' ]; unset( $colgroup [ 'data' ]); $colgroup_attributes = $colgroup ; } else { $cols = $colgroup ; $colgroup_attributes = array (); } $colgroup = array (); $colgroup [ 'attributes' ] = new Attribute( $colgroup_attributes ); $colgroup [ 'cols' ] = array (); // Build columns. if ( is_array ( $cols ) && ! empty ( $cols )) { foreach ( $cols as $col_key => $col ) { $colgroup [ 'cols' ][ $col_key ][ 'attributes' ] = new Attribute( $col ); } } } } // Build an associative array of responsive classes keyed by column. $responsive_classes = array (); // Format the table header: $ts = array (); $header_columns = 0; if (! empty ( $variables [ 'header' ])) { $ts = tablesort_init( $variables [ 'header' ]); // Use a separate index with responsive classes as headers // may be associative. $responsive_index = -1; foreach ( $variables [ 'header' ] as $col_key => $cell ) { // Increase the responsive index. $responsive_index ++; if (! is_array ( $cell )) { $header_columns ++; $cell_content = $cell ; $cell_attributes = new Attribute(); $is_header = TRUE; } else { if (isset( $cell [ 'colspan' ])) { $header_columns += $cell [ 'colspan' ]; } else { $header_columns ++; } $cell_content = '' ; if (isset( $cell [ 'data' ])) { $cell_content = $cell [ 'data' ]; unset( $cell [ 'data' ]); } // Flag the cell as a header or not and remove the flag. $is_header = isset( $cell [ 'header' ]) ? $cell [ 'header' ] : TRUE; unset( $cell [ 'header' ]); // Track responsive classes for each column as needed. Only the header // cells for a column are marked up with the responsive classes by a // module developer or themer. The responsive classes on the header cells // must be transferred to the content cells. if (! empty ( $cell [ 'class' ]) && is_array ( $cell [ 'class' ])) { if (in_array(RESPONSIVE_PRIORITY_MEDIUM, $cell [ 'class' ])) { $responsive_classes [ $responsive_index ] = RESPONSIVE_PRIORITY_MEDIUM; } elseif (in_array(RESPONSIVE_PRIORITY_LOW, $cell [ 'class' ])) { $responsive_classes [ $responsive_index ] = RESPONSIVE_PRIORITY_LOW; } } tablesort_header( $cell_content , $cell , $variables [ 'header' ], $ts ); // tablesort_header() removes the 'sort' and 'field' keys. $cell_attributes = new Attribute( $cell ); } $variables [ 'header' ][ $col_key ] = array (); $variables [ 'header' ][ $col_key ][ 'tag' ] = $is_header ? 'th' : 'td' ; $variables [ 'header' ][ $col_key ][ 'attributes' ] = $cell_attributes ; $variables [ 'header' ][ $col_key ][ 'content' ] = $cell_content ; } } $variables [ 'header_columns' ] = $header_columns ; // Rows and footer have the same structure. $sections = array ( 'rows' , 'footer' ); foreach ( $sections as $section ) { if (! empty ( $variables [ $section ])) { foreach ( $variables [ $section ] as $row_key => $row ) { $cells = $row ; $row_attributes = array (); // Check if we're dealing with a simple or complex row if (isset( $row [ 'data' ])) { $cells = $row [ 'data' ]; $variables [ 'no_striping' ] = isset( $row [ 'no_striping' ]) ? $row [ 'no_striping' ] : FALSE; // Set the attributes array and exclude 'data' and 'no_striping'. $row_attributes = $row ; unset( $row_attributes [ 'data' ]); unset( $row_attributes [ 'no_striping' ]); } // Build row. $variables [ $section ][ $row_key ] = array (); $variables [ $section ][ $row_key ][ 'attributes' ] = new Attribute( $row_attributes ); $variables [ $section ][ $row_key ][ 'cells' ] = array (); if (! empty ( $cells )) { // Reset the responsive index. $responsive_index = -1; foreach ( $cells as $col_key => $cell ) { // Increase the responsive index. $responsive_index ++; if (! is_array ( $cell )) { $cell_content = $cell ; $cell_attributes = array (); $is_header = FALSE; } else { $cell_content = '' ; if (isset( $cell [ 'data' ])) { $cell_content = $cell [ 'data' ]; unset( $cell [ 'data' ]); } // Flag the cell as a header or not and remove the flag. $is_header = ! empty ( $cell [ 'header' ]); unset( $cell [ 'header' ]); $cell_attributes = $cell ; } // Active table sort information. if (isset( $variables [ 'header' ][ $col_key ][ 'data' ]) && $variables [ 'header' ][ $col_key ][ 'data' ] == $ts [ 'name' ] && ! empty ( $variables [ 'header' ][ $col_key ][ 'field' ])) { $variables [ $section ][ $row_key ][ 'cells' ][ $col_key ][ 'active_table_sort' ] = TRUE; } // Copy RESPONSIVE_PRIORITY_LOW/RESPONSIVE_PRIORITY_MEDIUM // class from header to cell as needed. if (isset( $responsive_classes [ $responsive_index ])) { $cell_attributes [ 'class' ][] = $responsive_classes [ $responsive_index ]; } $variables [ $section ][ $row_key ][ 'cells' ][ $col_key ][ 'tag' ] = $is_header ? 'th' : 'td' ; $variables [ $section ][ $row_key ][ 'cells' ][ $col_key ][ 'attributes' ] = new Attribute( $cell_attributes ); $variables [ $section ][ $row_key ][ 'cells' ][ $col_key ][ 'content' ] = $cell_content ; } } } } } if ( empty ( $variables [ 'no_striping' ])) { $variables [ 'attributes' ][ 'data-striping' ] = 1; } } |
Please login to continue.