Contao Alias Generierung

Data Container Array erweitern

Zunächst benötigen wir für unser DCA einen alias Feld. Der Alias Feld benötigt einen save_callback Hook, welcher unser 'generateAlias' Funktion aufruft. Die generateAlias Funktion erzeugt den passenden Alias.

In der generateAlias Funktion sollte nur noch die $table Variable angepasst werden.

DCA Snippet

<?php
 
$GLOBALS['TL_DCA']['tl_demo'] = array
(
 
    'fields' => array
    (
        'alias' => array
        (
            'label' => &$GLOBALS['TL_LANG']['tl_demo']['alias'],
            'inputType' => 'text',
            'eval' => array('rgxp' => 'alias', 'maxlength' => 128),
            'save_callback' => array(array('tl_demo', 'generateAlias')),
            'sql' => "varchar(128) COLLATE utf8_bin NOT NULL default ''"
        )
    )
);

generateAlias Snippet

class tl_demo extends Backend
{
    public function generateAlias($varValue, $dc)
    {
        $autoAlias = false;
 
        // Generiere einen Alias wenn es keinen gibt
        if ($varValue == '') {
            $autoAlias = true;
            $varValue = StringUtil::generateAlias($dc->activeRecord->title);
        }
 
        // Die gewünschte Tabelle zuweisen, aus der ein auto- Alias generiert werden soll.
        // Input::get('table') lassen, wenn die Tabelle dynamisch zugeordnet werden soll.
        $table = Input::get('table') ? Input::get('table') : 'tl_demo';
 
        $objAlias = $this->Database->prepare("SELECT id FROM " . $table . " WHERE alias=?")->execute($varValue);
 
        // Überprüfe ob der Alias bereits existiert.
        if ($objAlias->numRows > 1 && !$autoAlias) {
            throw new \Exception(sprintf($GLOBALS['TL_LANG']['ERR']['aliasExists'], $varValue));
        }
 
        // wenn alias bereits existiert, füge eine ID hinzu.
        if ($objAlias->numRows && $autoAlias) {
            $varValue .= '-' . $dc->id;
        }
 
        return $varValue;
    }
}
Zurück