Ich teile nochmals meine Erfahrungen damit, da ich letztens nun hinbekommen habe:
Zunächst einmal muss der im DCA angegebene Bereich mit dem Namen *extrafilter* programmiert werden.
PHP-Code:
/**
* @Callback(table="tl_events_event_applicant", target="list.sorting.panel_callback.extrafilter")
*/
public function listSortingPanelCallback(DataContainer $dca): String
{
if(Input::post('FORM_SUBMIT') === 'tl_filters') {
$this->session->set('tl_studentCourse', Input::post('studentCourse'));
}
$applicants = ApplicantModel::findAll();
$studentCourse = [];
foreach($applicants as $applicant) {
$studentCourse[$applicant->studentCourse] = $applicant->studentCourse;
}
asort($studentCourse);
$studentCourseOptions = "";
foreach($studentCourse ?? [] as $key => $item) {
$selected = $this->session->get('tl_studentCourse') === $key ? ' selected' : '';
$studentCourseOptions .= "<option$selected value='$key'>$item</option>";
}
return "
<div class='tl_filter tl_subpanel'>
<strong>Weitere Filter:</strong>
<select name='studentCourse' id='studentCourse' class='tl_select'>
<option value='tl_studentCourse'>Studiengang</option>
$studentCourseOptions
</select>
</div>
";
}
Dann muss nun darauf reagiert werden, so dass der Filter im DCA gesetzt wird:
PHP-Code:
/**
* @Callback(table="tl_events_event_applicant", target="config.onload")
*/
public function configOnload(DataContainer $dc = null): void
{
$backendUser = BackendUser::getInstance();
$eventApplicants = EventApplicantModel::findAll();
$ids = [];
foreach($eventApplicants as $eventApplicant) {
$applicant = $eventApplicant->getRelated('applicant');
$studentCourse = $this->session->get('tl_studentCourse');
if($studentCourse === 'tl_studentCourse' || $studentCourse === $applicant->studentCourse) {
$ids[] = $eventApplicant->id;
}
}
$filter = ["id IN (-1)"];
if(count($ids) > 0) {
$ids = implode(',', $ids);
$filter = ["id IN ($ids)"];
}
$GLOBALS['TL_DCA']['tl_events_event_applicant']['list']['sorting']['filter'] = $filter;
}
Lesezeichen