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):
Mein Lösungsansatz funktioniert, aber scheint mir ziemlich gegen die "Vorgaben" zu verstossen: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;
}
}
Hat da jemand eine Lösung, die Sauber gelösst ist?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;
}

Zitieren