UPDATE-RATE

Die Test-Installation wird aktuell zwischen 8:00 und 18:00 Uhr stündlich zur vollen Stunde aktualisiert.

Alles neu macht der Mai

ILIAS 9 ist da! Alle Infos zu den Highlights der neuen Version gibt es hier!

Documentation

Kitchen Sink documentation of style: 'Delos' of skin: 'ILIAS'

Multi

Description

Purpose
The Multi Action can only be used with more than one record. A typical example would be "compare".

Example 1: Base

a data table with actions

Field 1: 0
Field 1: 1
Field 1: 2
Field 1: 3
Field 1: 4
Field 1: 5
<?php
 
declare(strict_types=1);
 
namespace ILIAS\UI\examples\Table\Action\Multi;
 
use ILIAS\UI\Implementation\Component\Table as T;
use ILIAS\UI\Component\Table as I;
use ILIAS\Data\Range;
use ILIAS\Data\Order;
use ILIAS\UI\URLBuilder;
 
function base()
{
    global $DIC;
    $f = $DIC['ui.factory'];
    $r = $DIC['ui.renderer'];
    $df = new \ILIAS\Data\Factory();
    $refinery = $DIC['refinery'];
 
    //define multi actions for the table
    $here_uri = $df->uri($DIC->http()->request()->getUri()->__toString());
    $url_builder = new URLBuilder($here_uri);
    $query_params_namespace = ['datatable', 'example'];
    list($url_builder, $id_token, $action_token) = $url_builder->acquireParameters(
        $query_params_namespace,
        "relay_param",
        "demo_table_action"
    );
 
    $actions = [
        'some_action' => $f->table()->action()->multi(
            'do this',
            $url_builder->withParameter($action_token, "do_something"),
            $id_token
        ),
        'some_other_action' => $f->table()->action()->multi(
            'do something else',
            $url_builder->withParameter($action_token, "do_something_else"),
            $id_token
        )->withAsync(),
    ];
 
    $table = getExampleTable($f)
        ->withActions($actions)
        ->withRequest($DIC->http()->request());
 
 
    //render table and results
    $result = [$table];
 
    $query = $DIC->http()->wrapper()->query();
    if ($query->has($action_token->getName())) {
        $action = $query->retrieve($action_token->getName(), $refinery->to()->string());
        $ids = $query->retrieve($id_token->getName(), $refinery->custom()->transformation(fn($v) => $v));
 
        if ($action === 'do_something_else') {
            $items = [];
            $ids = explode(',', $ids);
            foreach ($ids as $id) {
                $items[] = $f->modal()->interruptiveItem()->keyValue($id, $id_token->getName(), $id);
            }
            echo($r->renderAsync([
                $f->modal()->interruptive(
                    'do something else',
                    'affected items',
                    '#'
                )->withAffectedItems($items)
            ]));
            exit();
        } else {
            $items = $f->listing()->characteristicValue()->text(
                [
                    'table_action' => $action,
                    'id' => print_r($ids, true),
                ]
            );
            $result[] = $f->divider()->horizontal();
            $result[] = $items;
        }
    }
 
    return $r->render($result);
}
 
function getExampleTable($f)
{
    $columns = ['f1' => $f->table()->column()->text("Field 1")];
 
    $data_retrieval = new class () implements I\DataRetrieval {
        public function getRows(
            I\DataRowBuilder $row_builder,
            array $visible_column_ids,
            Range $range,
            Order $order,
            ?array $filter_data,
            ?array $additional_parameters
        ): \Generator {
            foreach (range(0, 5) as $cnt) {
                yield $row_builder->buildDataRow('row_id' . $cnt, ['f1' => $cnt]);
            }
        }
 
        public function getTotalRowCount(
            ?array $filter_data,
            ?array $additional_parameters
        ): ?int {
            return 6;
        }
    };
    return $f->table()->data('a data table with actions', $columns, $data_retrieval);
}
 

Relations

Parents
  1. UIComponent
  2. Table
  3. Action