@hollanditkzn

Не могу понять как сделать фильтрацию календаря?

Пишутся смены в определенномпорядке, только с фильтрацией не понятно как обстоят дела, то есть нужно посмотреть расписание сотрудников по магазинам за прошлую неделю, или другую неделю, только я я не пойму как эт организовать если выбрал пользователь за предыдущий месяц.
Вот моя реализация обычно без фильтров обычная статика можно назвать
<?php //Выводит все смены по магазинам с понедельника по восресение
function day($shop_id, $day){
    return Shifts::find()->andWhere(['shop_id' => $shop_id, 'date' => date('Y-m-d 00:00:00', strtotime($day))])->all();
}
//Ввыводит сотрудиков всех учитывая в каком магазине от работал. Формат начало смены, конец смены и фамилия и имя сотрудника
function cell($start, $end, $employee){
    echo Yii::$app->formatter->asTime($start, 'php:H:i').'-'.Yii::$app->formatter->asTime($end, 'php:H:i').' '.Html::a($employee->user->lastNameEmployee, ['shifts/update', 'id' => $employee->id], ['class' => 'button-editShifts', 'data-pjax' => 0]).'<br>';
}
$weekDay = [
    'Пн' => 'last Monday',
    'Вт' => 'last Tuesday',
    'Ср' => 'last Wednesday',
    'Чт' => 'Thursday',
    'Пт' => 'Friday',
    'Сб' => 'Saturday',
    'Вс' => 'Sunday',
]?>

<?php foreach ($weekDay as $shortname => $time): ?>
//Формирует столбцы недель с пн по вс
                <th><?= $shortname ?> <?= date('d.m', strtotime($time)) ?></th>
            <?php endforeach; ?>
            <?php foreach ($shops as $shop) : ?>
//Формирует строку магазина
                <tr>
                    <td><?= $shop->name ?></td>
                    <?php foreach ($weekDay as $time): ?>
// Формирует всех сотрудников которые работаю в магазине данном
                        <td>
                            <?php $emloyeeDate = array_map(function (Shifts $employee) {return cell($employee->start_time, $employee->end_time, $employee); }, day($shop->id, $time));
                            echo implode('<br>', $emloyeeDate)
                            ?>
                        </td>
                    <?php endforeach; ?>
                </tr>
            <?php endforeach; ?>

Я сейчас пробую через searchModel то у меня встал в ступор, как днии недели формировать в dataProvider
То примерно моя релизация была следующая
class ShiftsSearch extends Shifts
{
    public $weekDay = [
        'Пн' => 'last Monday',
        'Вт' => 'last Tuesday',
       //И тд
    ];

public function search($params)
    {
        function day($shop_id, $day){
            return Shifts::find()->andWhere(['shop_id' => $shop_id, 'date' => date('Y-m-d 00:00:00', strtotime($day))])->all();
        }
        function cell($start, $end, $employee){
            echo Yii::$app->formatter->asTime($start, 'php:H:i').'-'.Yii::$app->formatter->asTime($end, 'php:H:i').' '.Html::a($employee->user->lastNameEmployee, ['shifts/update', 'id' => $employee->id], ['class' => 'button-editShifts', 'data-pjax' => 0]).'<br>';
        }
        if ($this->date){
            $weekDay = [
                'Пн' => $this->date.' Monday',
                'Вт' => $this->date.'last Tuesday',
                'Ср' => $this->date.'last Wednesday',
                'Чт' => $this->date + 1 .'Thursday',
                'Пт' => $this->date + 1 .'Friday',
                'Сб' => $this->date + 1 .'Saturday',
                'Вс' => $this->date + 1 .'Sunday',
            ];
        }
        $query = Shifts::find()->andWhere('between', 'date', date('Y-m-d', strtotime($this->weekDay['Пн'])), date('Y-m-d', strtotime($this->weekDay['Вс'])));

        $dataProvider = new ActiveDataProvider([
            'query' => $query,
        ]);
//И тд

И в foreach я выводит $dataProvider->weekDay то не получается, как мне быть в этом плане?
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 2
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
А зачем dataProvider-у знать про дни недели? Вам надо любым способом вычислить диапазон и сформировать запрос, запрос передать в дата провайдер.
Я так понимаю на фронте ставите любой виджет для выбора диапазона дат, неделя тм будет или 2 дня - это выбор пользователя, зачем его ограничивать? Соответственно у Вас в запрос попадает две даты, а далее $query->andFilterWhere как в стандартной search модели
Я не понимаю зачем Вы с днями недели завязались? Если надо выводить все товары проданные во вторник (любой за все время) - тогда понятно. А если это некий диапазон дат, то есть дата начала и конца.
Ответ написан
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Как у Вас выводится дата в фильтре?
Посмотрите мой ответ на похожий вопрос. Там речь идёт о времени, но Вы легко переделаете на фильтр даты.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы