Contao\Widget::getAttributesFromDca PHP Метод

getAttributesFromDca() публичный статический Метод

Extract the Widget attributes from a Data Container array
public static getAttributesFromDca ( array $arrData, string $strName, mixed $varValue = null, string $strField = '', string $strTable = '', DataContainer | null $objDca = null ) : array
$arrData array The field configuration array
$strName string The field name in the form
$varValue mixed The field value
$strField string The field name in the database
$strTable string The table name in the database
$objDca DataContainer | null An optional DataContainer object
Результат array An attributes array that can be passed to a widget
    public static function getAttributesFromDca($arrData, $strName, $varValue = null, $strField = '', $strTable = '', $objDca = null)
    {
        $arrAttributes = $arrData['eval'];
        $arrAttributes['id'] = $strName;
        $arrAttributes['name'] = $strName;
        $arrAttributes['strField'] = $strField;
        $arrAttributes['strTable'] = $strTable;
        $arrAttributes['label'] = ($label = is_array($arrData['label']) ? $arrData['label'][0] : $arrData['label']) != false ? $label : $strField;
        $arrAttributes['description'] = $arrData['label'][1];
        $arrAttributes['type'] = $arrData['inputType'];
        $arrAttributes['dataContainer'] = $objDca;
        // Internet Explorer does not support onchange for checkboxes and radio buttons
        if ($arrData['eval']['submitOnChange']) {
            if ($arrData['inputType'] == 'checkbox' || $arrData['inputType'] == 'checkboxWizard' || $arrData['inputType'] == 'radio' || $arrData['inputType'] == 'radioTable') {
                $arrAttributes['onclick'] = trim($arrAttributes['onclick'] . " Backend.autoSubmit('" . $strTable . "')");
            } else {
                $arrAttributes['onchange'] = trim($arrAttributes['onchange'] . " Backend.autoSubmit('" . $strTable . "')");
            }
        }
        $arrAttributes['allowHtml'] = $arrData['eval']['allowHtml'] || strlen($arrData['eval']['rte']) || $arrData['eval']['preserveTags'] ? true : false;
        // Decode entities if HTML is allowed
        if ($arrAttributes['allowHtml'] || $arrData['inputType'] == 'fileTree') {
            $arrAttributes['decodeEntities'] = true;
        }
        // Add Ajax event
        if ($arrData['inputType'] == 'checkbox' && is_array($GLOBALS['TL_DCA'][$strTable]['subpalettes']) && in_array($strField, array_keys($GLOBALS['TL_DCA'][$strTable]['subpalettes'])) && $arrData['eval']['submitOnChange']) {
            $arrAttributes['onclick'] = "AjaxRequest.toggleSubpalette(this, 'sub_" . $strName . "', '" . $strField . "')";
        }
        // Options callback
        if (is_array($arrData['options_callback'])) {
            $arrCallback = $arrData['options_callback'];
            $arrData['options'] = static::importStatic($arrCallback[0])->{$arrCallback[1]}($objDca);
        } elseif (is_callable($arrData['options_callback'])) {
            $arrData['options'] = $arrData['options_callback']($objDca);
        } elseif (isset($arrData['foreignKey'])) {
            $arrKey = explode('.', $arrData['foreignKey'], 2);
            $objOptions = \Database::getInstance()->query("SELECT id, " . $arrKey[1] . " AS value FROM " . $arrKey[0] . " WHERE tstamp>0 ORDER BY value");
            $arrData['options'] = array();
            while ($objOptions->next()) {
                $arrData['options'][$objOptions->id] = $objOptions->value;
            }
        }
        // Add default option to single checkbox
        if ($arrData['inputType'] == 'checkbox' && !isset($arrData['options']) && !isset($arrData['options_callback']) && !isset($arrData['foreignKey'])) {
            if (TL_MODE == 'FE' && isset($arrAttributes['description'])) {
                $arrAttributes['options'][] = array('value' => 1, 'label' => $arrAttributes['description']);
            } else {
                $arrAttributes['options'][] = array('value' => 1, 'label' => $arrAttributes['label']);
            }
        }
        // Add options
        if (is_array($arrData['options'])) {
            $blnIsAssociative = $arrData['eval']['isAssociative'] || array_is_assoc($arrData['options']);
            $blnUseReference = isset($arrData['reference']);
            if ($arrData['eval']['includeBlankOption'] && !$arrData['eval']['multiple']) {
                $strLabel = isset($arrData['eval']['blankOptionLabel']) ? $arrData['eval']['blankOptionLabel'] : '-';
                $arrAttributes['options'][] = array('value' => '', 'label' => $strLabel);
            }
            foreach ($arrData['options'] as $k => $v) {
                if (!is_array($v)) {
                    $arrAttributes['options'][] = array('value' => $blnIsAssociative ? $k : $v, 'label' => $blnUseReference ? ($ref = is_array($arrData['reference'][$v]) ? $arrData['reference'][$v][0] : $arrData['reference'][$v]) != false ? $ref : $v : $v);
                    continue;
                }
                $key = $blnUseReference ? ($ref = is_array($arrData['reference'][$k]) ? $arrData['reference'][$k][0] : $arrData['reference'][$k]) != false ? $ref : $k : $k;
                $blnIsAssoc = array_is_assoc($v);
                foreach ($v as $kk => $vv) {
                    $arrAttributes['options'][$key][] = array('value' => $blnIsAssoc ? $kk : $vv, 'label' => $blnUseReference ? ($ref = is_array($arrData['reference'][$vv]) ? $arrData['reference'][$vv][0] : $arrData['reference'][$vv]) != false ? $ref : $vv : $vv);
                }
            }
        }
        $arrAttributes['value'] = \StringUtil::deserialize($varValue);
        // Convert timestamps
        if ($varValue != '' && in_array($arrData['eval']['rgxp'], array('date', 'time', 'datim'))) {
            $objDate = new \Date($varValue, \Date::getFormatFromRgxp($arrData['eval']['rgxp']));
            $arrAttributes['value'] = $objDate->{$arrData['eval']['rgxp']};
        }
        // Add the "rootNodes" array as attribute (see #3563)
        if (isset($arrData['rootNodes']) && !isset($arrData['eval']['rootNodes'])) {
            $arrAttributes['rootNodes'] = $arrData['rootNodes'];
        }
        // HOOK: add custom logic
        if (isset($GLOBALS['TL_HOOKS']['getAttributesFromDca']) && is_array($GLOBALS['TL_HOOKS']['getAttributesFromDca'])) {
            foreach ($GLOBALS['TL_HOOKS']['getAttributesFromDca'] as $callback) {
                $arrAttributes = static::importStatic($callback[0])->{$callback[1]}($arrAttributes, $objDca);
            }
        }
        return $arrAttributes;
    }

Usage Example

 /**
  * Handle the widget preparation.
  *
  * @param GetAttributesFromDcaEvent $event The event.
  *
  * @return void
  */
 public function handleGetAttributesFromDca(GetAttributesFromDcaEvent $event)
 {
     $event->setResult(Widget::getAttributesFromDca($event->getFieldConfiguration(), $event->getWidgetName(), $event->getValue(), $event->getWidgetId(), $event->getTable(), $event->getDataContainer()));
 }
All Usage Examples Of Contao\Widget::getAttributesFromDca