Clicky

Skocz do zawartości


Zdjęcie
- - - - -

[K2] Table - tworzenie tabel

Brak odpowiedzi do tego tematu

  • Zaloguj się, aby dodać odpowiedź

#1 phpion

phpion

    Senior Mastah

  • Użytkownik
  • PipPipPip
  • 774 postów
  • Skąd:Sosnowiec, Dąbrowa Górnicza

Napisano 20 czerwiec 2012 - 13:06

Witam,
przekazuję Wam kolejny mój moduł. Tym razem nie korzysta on z żadnych elementów K2, więc powinien bez problemu chodzić również pod K3 (przynajmniej w teorii).

Jaki był cel? Możliwie maksymalna elastyczność. Dotyczy to m.in.:
- stylowania komórek i wierszy, w tym warunkowe stylowanie (np. nieaktywne rekordy mają inny kolor tła),
- wyświetlania wartości w tabeli (można zdefiniować funkcję, która zwróci nam dane w jakiś sposób obrobione),
- dodawania akcji tabeli, w tym warunkowe akcje (np. nie można usunąć wierszy o id < 10).

Możliwości najlepiej obrazuje przykładowy kod.
<?php
// W standardowej wersji Kohany trzeba wczytać klasy ręcznie.
foreach (array(
'Table/Column',
'Table/Row',
'Table/Cell',
'Table/Sorting',
'Table/Column/RowNumber',
'Table/Action',
'Table/Action/Edit',
'Table/Action/Delete'
) as $file) {
require_once Kohana::find_file('libraries', $file);
}
class Table_Controller extends Controller {
public function index() {
// Utworzenie obiektu tabeli.
$table = new Table();
$table->get_html_attributes()->set('id', 'my-table');
//

// Ustawienie sortowania.
$table->get_sorting()
->set_column((string)$this->input->get('sort.col', 'id'))
->set_direction((int)$this->input->get('sort.dir', Table_Sorting::DESC))
;
//

// Definicja kolumn tabeli.
$column = new Table_Column_RowNumber();
$column
// Ustalenie wartości początkowej.
->set_value(100)
// Ustalenie wartości modyfikującej.
->set_change_value(2)
;
$table->add_column($column);

$column = new Table_Column('id');
// Możliwość dodatkowego przetworzenia konkretnej komórki.
$column->set_process_closure(function($row, $cell, $item, $value) {
if ($value >= 10) {
// Stylowanie komórki.
$cell->get_html_attributes()->set('style', array(
'background-color' => 'red'
));
// Stylowanie wiersza.
$row->get_html_attributes()->set('style', array(
'background-color' => 'yellow'
));
}
});
$table->add_column($column);

$column = new Table_Column('name');
$table->add_column($column);

$column = new Table_Column('name_rev');
$column
// Ustawienie etykiety.
->set_label('Odwrócone name')
// Wyłączenie sortowania.
->set_sorting_column(FALSE)
// Własna funkcja zwracająca dane.
->set_value_closure(function($item) {
return strrev($item->name);
})
;
$table->add_column($column);
//

// Definicja akcji tabeli.
$table->add_action(new Table_Action_Edit());
$table->add_action(new Table_Action_Delete());
$table->add_action(new Table_Action(function($item) {
// Możliwość warunkowego ustalenia akcji.
// Można dodać np. włączanie/wyłączanie obiektu w zależności od aktualnego stanu
// lub sprawdzać warunki kontroli dostępu...
return mt_rand(0, 1) ? html::anchor('index?id='.$item->id, 'Jakaś akcja') : '-';
}));
//

// Pobranie danych do wyświetlenia w tabeli.
$data = ORM::factory('city');

$sorting_column = $table->get_column_by_id($table->get_sorting()->get_column());

if ($sorting_column !== NULL) {
$data->orderby($sorting_column->get_sorting_column(), $table->get_sorting()->get_direction_name());
}

$data = $data->find_all();

$table->set_data($data);
//

echo $table;
}
}


Uwaga! Z racji zastosowania funkcji anonimowych wymagania wzrastają do PHP w wersji co najmniej 5.3.

Demo: http://kohana_2345.n...ro.pl/table.png (niestety na serwerze nie mam PHP 5.3 :P stąd tylko obrazek)
Demo: http://kohana_2345.notifero.pl/table
Download: http://kohana_2345.n...ro.pl/table.zip
Notifero - Technologie Informatyczne | Warsztat: Kohana 3.x/2.x + PostgreSQL/MySQL | Programista Kohana




Użytkownicy przeglądający ten temat: 0

0 użytkowników, 0 gości, 0 anonimowych