[1168 Aufrufe]

4.4 Callbacks für die Operationen

Die Operations Callbacks dienen dem Erstellen und Anpassen der Buttons für die Aktionen der einzelnen Datensätze und der globalen Aktionen.

Alle hier aufgeführten Callbacks kann es nur einmal geben, sie werden also nicht der Reihe nach ausgeführt. Wird ein neuer Callback definiert, überschreibt er den alten.

In diesen Beispielen werden die Callbacks immer in der Datei /src/Ctocb/Example/Resources/config/services.yml registriert und die Klasse für die Verarbeitung ist hier immer /src/Ctocb/Example/Classes/Contao/Callbacks/TlTest.php. Wer nicht weiß was hier gemeint ist, sollte sich den Text " "Grundlagen der Callbacks"" noch einmal ansehen.

Bitte auch in diesem Artikel wieder den Vendor-Namespace (und/oder entsprechenden Ordner) durch Euren eignen ersetzen und nicht Ctocb verwenden! Danke!

Callback: list.global_operations.[OPERATION].button

Mit dem list.global_operations.[OPERATION].button -Callback für die globalen Operationen, werden die Buttons oben rechts in der Liste angepasst (z. B. "Mehrere bearbeiten").

services:
    Ctocb\Example\Classes\Contao\Callbacks\TlTest:
        public: true
        tags:
            - { name: contao.callback, target: list.global_operations.[OPERATION].button, table: tl_test, method: myCallback }

[OPERATION] muss durch den Namen der globalen Aktion ersetzt werden (z. B. all für "Mehrere bearbeiten").

<?php declare(strict_types=1);

namespace Ctocb\Example\Classes\Contao\Callbacks;

use Contao\Controller;
use Contao\StringUtil;

class TlTest
{
    public function myCallback(
        ?string $href, 
        string $label, 
        string $title, 
        string $cssClass, 
        string $attributes, 
        string $table, 
        array $rootRecordIds
    ): string {
        $button = '<a href="' . Controller::addToUrl($href) . '" title="' . StringUtil::specialchars($title);
        $button.= '" class="' . $class . '"' . $attributes . '>' . $label . '</a> ';

        return button; 
    }
}

Es kann für jede globale Aktion nur einen Callback geben. Es wird das HTML des Buttons als Rückgabewert erwartet.

Callback: list.operations.[OPERATION].button

Mit dem list.operations.[OPERATION].button -Callback für die Operationen der einzelnen Datensätze, werden die Buttons auf der rechten Seite der Liste angepasst (z. B. "Bearbeiten").

services:
    Ctocb\Example\Classes\Contao\Callbacks\TlTest:
        public: true
        tags:
            - { name: contao.callback, target: list.operations.[OPERATION].button, table: tl_test, method: myCallback }

[OPERATION] muss durch den Namen der Aktion ersetzt werden (z. B. copy oder edit).

<?php declare(strict_types=1);

namespace Ctocb\Example\Classes\Contao\Callbacks;

use Contao\Controller;
use Contao\DataContainer;
use Contao\Image;
use Contao\StringUtil;

class TlTest
{
    public function myCallback(
        array $reecord,
        ?string $href,
        string $abel,
        string $title,
        ?string $icon,
        string $attributes,
        string $table,
        array $rootRecordsIds,
        array $childRecordsIds,
        bool $circular,
        string $previousLabel,
        string $nextLabel,
        DataContainer $dc
    ): string
    {
        $button = '<a href="' . Controller::addToUrl($href . '&amp;id=' . $row['id']);
        $button.= '" title="' . StringUtil::specialchars($title) . '"' . $attributes . '>';
        $button.= Image::getHtml($icon, $label) . '</a> ';

        return $button;
    }
}

Es kann für jede globale Aktion nur einen Callback geben. Es wird das HTML des Buttons als Rückgabewert erwartet.