class atk4\ui\Tabs


Tabs implement a yet another way to organise your data. The implementation is based on:


Basic Usage

Once you create Tabs container you can then mix and match static and dynamic tabs:

$tabs = Tabs::addTo($app);

Adding a static conten is pretty simple:

LoremIpsum::addTo($tabs->addTab('Static Tab'));

You can add multiple elements into a single tab, like any other view.

atk4\ui\Tabs::addTab($name, $action = null)

Use addTab() method to add more tabs in Tabs view. First parameter is a title of the tab.

Tabs can be static or dynamic. Dynamic tabs use VirtualPage implementation mentioned above. You should pass callable action as a second parameter.


$t = Tabs::addTo($layout);

// add static tab
HelloWorld::addTo($t->addTab('Static Tab'));

// add dynamic tab
$t->addTab('Dynamically Loading', function ($tab) {

Dynamic Tabs

Dynamic tabs are based around implementation of VirtualPage and allow you to pass a call-back which will be triggered when user clicks on the tab.

Note that tab contents are refreshed including any values you put on the form:

$t = Tabs::addTo($app);

// dynamic tab
$t->addTab('Dynamic Lorem Ipsum', function ($tab) {
    LoremIpsum::addTo($tab, ['size'=>2]);

// dynamic tab
$t->addTab('Dynamic Form', function ($tab) {
    $m_register = new \atk4\data\Model(new \atk4\data\Persistence_Array($a));
    $m_register->addField('name', ['caption'=>'Please enter your name (John)']);

    $form = Form::addTo($tab, ['segment'=>true]);
    $form->onSubmit(function ($form) {
        if ($form->model->get('name') !== 'John') {
            return $form->error('name', 'Your name is not John! It is "'.$form->model->get('name').'". It should be John. Pleeease!');

URL Tabs

atk4\ui\Tabs::addTabUrl($name, $url)

Tab can load external URL or a different page if you prefer that instead of VirtualPage. This works similar to iframe:

$t = Tabs::addTo($app);

$t->addTabUrl('Terms and Condition', 'terms.html');