Hallo Zusammen
Ich versuche gerade ein BackendModul zu schreiben, welches unabhängig vom DCA Array arbeitet und einen FileTree Widget nutzt. Leider habe ich noch keine Lösung gefunden ohne den DCA um ein pseudo Element (ohne Datenquelle) dieses Ziel zu erreichen.
Wenn ich die FileTree.php richtig interpretiere, werden da die Radios bzw. Checkboxen nur basierend vom dca erstellt.
Auschnitt aus der FileTree.php, Methode (renderFiletree, ab Zeile 342 Contao 2.9.5):
PHP-Code:
// Add checkbox or radio button
else
{
switch ($GLOBALS['TL_DCA'][$this->strTable]['fields'][$this->strField]['eval']['fieldType'])
{
case 'checkbox':
$return .= '<input type="checkbox" name="'.$this->strName.'[]" id="'.$this->strName.'_'.md5($currentFolder).'" class="tl_tree_checkbox" value="'.specialchars($currentFolder).'" onfocus="Backend.getScrollOffset();"'.$this->optionChecked($currentFolder, $this->varValue).' />';
break;
case 'radio':
$return .= '<input type="radio" name="'.$this->strName.'" id="'.$this->strName.'_'.md5($currentFolder).'" class="tl_tree_radio" value="'.specialchars($currentFolder).'" onfocus="Backend.getScrollOffset();"'.$this->optionChecked($currentFolder, $this->varValue).' />';
break;
}
}
Mein Lösungsansatz funktioniert, aber scheint mir ziemlich gegen die "Vorgaben" zu verstossen:
PHP-Code:
/**
* generateDCAforWidgets
*/
protected function generateDCAforWidgets() {
$GLOBALS['TL_DCA'][$this->strTable]['fields'] = array
(
'file' => array
(
'label' => $GLOBALS['TL_LANG'][$this->strTable]['file'],
'inputType' => 'FileTree',
'eval' => array
(
'fieldType' => 'radio',
'files' => true,
'filesOnly' => true,
'extensions' => 'mm',
),
),
);
foreach($GLOBALS['TL_DCA'][$this->strTable]['fields'] as $strFieldname => $field)
{
$strPropertyname = 'freemindimport' . $strFieldname;
$this->Template->$strPropertyname = $this->generateWidget($strFieldname);
}
}
/**
* generateWidget
* @param string $strFieldname fieldname
* @return obj widget
*/
protected function generateWidget($strFieldname)
{
$widget = new $GLOBALS['TL_DCA'][$this->strTable]['fields'][$strFieldname]['inputType']
(
$this->prepareForWidget
(
$GLOBALS['TL_DCA'][$this->strTable]['fields'][$strFieldname],
$strFieldname,
$this->Input->post($strFieldname),
$strFieldname,
$this->strTable
)
);
return $widget;
}
Hat da jemand eine Lösung, die Sauber gelösst ist?
Lesezeichen