TYPO3 Доп. cal: адаптация формы поиска

По умолчанию форма поиска содержит следующие входные данные:

введите здесь описание изображения

Вместо двух входов «Startdatum» и «Enddatum» я хочу поле выбора с опцией месяца.

В typo3conf\ext\cal\Resources\Private\Templates\v2\search_event.tmpl

есть только параметры поста start_day и end_date для поиска.

Как реализовать селектбокс для месяца, если я могу выбрать и опубликовать только значение месяца?

Должен ли я внести изменения здесь? typo3conf\ext\cal\Classes\View\SearchViews.php

Могу ли я реализовать это с помощью собственного расширения Cal?


person Markus Dübbert    schedule 09.07.2017    source источник
comment
Какой вид для калибровочного плагина вам нужен хотя бы (поиск, месяц, недели, список дней, ...)? Вы можете попробовать написать свою собственную форму выбора месяца с параметром tx_cal_controller[month].   -  person jokumer    schedule 10.07.2017
comment
Я могу создать ширину выбора tx_cal_controller[месяц] вместо tx_cal_controller[start_day] и tx_cal_controller[end_day]. Но я должен изменить функцию drawSearchEventResult() в SearchViews.php из-за нового параметра. Я не знаю, как это сделать в расширении кал.   -  person Markus Dübbert    schedule 10.07.2017
comment
Это верно. Но действительно ли вам нужен searchView? В searchView перечислены события, соответствующие фильтру поиска. ListView также перечисляет события, но может позаботиться о таких параметрах, как tx_cal_controller[month], если вы добавите какой-нибудь типотекст. Я могу добавить пример здесь.   -  person jokumer    schedule 10.07.2017
comment
Пожалуйста, добавьте пример. Мне нужен фильтр для событий с категорией, владельцем события и месяцем года. Я также могу использовать для этого listView, но почему listView для этого лучше? Например, если я добавлю это как параметр получения в представлении списка, это не сработает: &tx_cal_controller[month]=08   -  person Markus Dübbert    schedule 12.07.2017


Ответы (1)


Учитывая, что вы используете элемент контента типа плагина с видом, установленным на «список», и добавляете свою собственную форму, выберите месяц, который генерирует запросы с таким параметром, как

?tx_cal_controller[month]=08

затем вы можете манипулировать результатами списка с условием typoscript, чтобы отображать только события из запрошенного месяца текущего года:

[globalVar = GP:tx_cal_controller|month >0]
    plugin.tx_cal_controller.view.list.useCustomStarttime = 1
    plugin.tx_cal_controller.view.list.useCustomEndtime = 1
    plugin.tx_cal_controller.view.list.customStarttimeRelativeToGetdate = 1
    plugin.tx_cal_controller.view.list.customEndtimeRelativeToGetdate = 1
    plugin.tx_cal_controller.view.list.starttime = monthstart
    plugin.tx_cal_controller.view.list.endtime = monthend
[global]

Чтобы использовать свой собственный фильтр категорий для представления списка, вам нужно адаптировать/расширить класс \TYPO3\CMS\Cal\Controller\Controller::initConfigs(), чтобы вызывать такой параметр, как

?tx_cal_controller[category]=2

в глобальную конфигурацию, например

/**
 * Init configurations
 * Change category mode in listview, if category given in GET params
 * Used for category filter by selection
 */
public function initConfigs() {
    parent::initConfigs();
    if ($this->piVars['category'] && $this->conf ['view'] === 'list') {
        $this->conf ['view.'] ['categoryMode'] = 4;
        $this->conf ['view.'] ['category'] = $this->piVars['category'];
    }
} 

Для рабочего фильтра владельца события у меня нет примера.

person jokumer    schedule 12.07.2017
comment
Я использую TYPO3 7.6.18 и кал 1.10.3. Базовые стили css и негибкие шаблоны. Пример с месяцем у меня не работает. При добавлении ?tx_cal_controller[month]=08 в представлении списка нет изменений. Могу ли я отладить это в контроллере представления? Второй пример работает для меня, но без расширения вашего класса. - person Markus Dübbert; 15.07.2017
comment
если я добавлю это в свой ts: plugin.tx_cal_controller.view.list.useGetdate = 1, я могу изменить месяц с помощью ?tx_cal_controller[month]=08, но в представлении списка будет указан только один день, а не один месяц. - person Markus Dübbert; 15.07.2017
comment
[globalVar = GP:tx_cal_controller|месяц ›0] ... plugin.tx_cal_controller.view.list.useGetdate = 1 ... [else] ... plugin.tx_cal_controller.view.list.useGetdate = 0 ... [глобальный ] - person jokumer; 15.07.2017
comment
хорошо спасибо. Теперь это работает. Но если я добавлю свой третий параметр: tx_cal_controller[organizer]=1, это не сработает. То же самое с tx_cal_controller[organizer_ids]=1. Единственное, что работает с этим параметром, это search_view. - person Markus Dübbert; 16.07.2017
comment
Как я уже говорил, для работающего фильтра владельца события у меня нет примера. Также для дальнейшей фильтрации (местоположение и т.д.). Это вы должны попытаться вызвать в методе -initConfigs()-. Но помните, вы начали запрашивать фильтрацию только по месяцам. - person jokumer; 17.07.2017