Nano Hash - криптовалюты, майнинг, программирование

Класс календаря CodeIgniter не будет отображать правильные даты для +1 месяца

Я пытаюсь показать три календаря, один на текущий месяц и два на следующие два месяца.

Вот мой закомментированный контроллер

public function index($year = null, $month = null, $day = null)
{
    if (empty($year)) {
        redirect('book/index/' . date('Y/m/d', time()));
    }

    $this->load->model('book/Booking_Model');

    // september
    $data['cal_one']   = $this->Booking_Model->generateCalendar($year, $month, $day);
    // october
    $data['cal_two']   = $this->Booking_Model->generateCalendar($year, date('m', strtotime('+1 months')), $day);
    // november
    $data['cal_three'] = $this->Booking_Model->generateCalendar($year, date('m', strtotime('+2 months')), $day);

    // to load the view
    $data['module'] = 'book';
    $data['view_file'] = 'select_date';
    $this->load->module('templates');
    $this->templates->frontend($data);
}

Это то, что я получаю на выходе

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

Как видите, месяцы отображаются правильно, однако все ячейки таблицы показывают один и тот же месяц, 09 (сентябрь).

Если вы посмотрите вверху слева, вы увидите, что я var_dumped для переменной $month в календарях, и они отображаются правильно, 09 ... 10 ... 11, однако внутри календаря они все 09.

Вот моя модель календаря...

public function generateCalendar($year, $month, $day)
{
    var_dump($month);
    // styling the calendar
    $params = [
        'show_next_prev' => true,
        'next_prev_url'  => base_url() . 'schedule/index',
        'template'       => '
            {table_open}<table id="tt-calendar">{/table_open}

                {heading_row_start}<tr>{/heading_row_start}

                    {heading_previous_cell}
                        <th class="text-center">

                        </th>
                    {/heading_previous_cell}

                    {heading_title_cell}
                        <th class="text-center" colspan="{colspan}">
                            <h4>
                                {heading}
                            </h4>
                        </th>
                    {/heading_title_cell}

                    {heading_next_cell}
                        <th class="text-center">

                        </th>
                    {/heading_next_cell}

                {heading_row_end}</tr>{/heading_row_end}
                {week_row_start}<tr>{/week_row_start}

                    {week_day_cell}
                        <td>
                            <strong>
                                {week_day}
                            </strong>
                        </td>
                    {/week_day_cell}

                {week_row_end}</tr>{/week_row_end}
                {cal_row_start}<tr>{/cal_row_start}

                    {cal_cell_start}<td>{/cal_cell_start}

                    {cal_cell_start_today}<td id="tt-calendar-today">{/cal_cell_start_today}

                    {cal_cell_start_other}<td id="tt-calendar-test">{/cal_cell_start_other}

                    {cal_cell_content}
                        <div class="day" href="" onclick="return getDate(' . $year . ' + /' . $month . '/ + {day});">
                            {day} ' . $month . '
                        </div>
                    {/cal_cell_content}

                    {cal_cell_content_today}
                        <div class="day" href="" onclick="return getDate(' . $year . ' + /' . $month . '/ + {day});">
                            {day} ' . $month . '
                        </div>
                    {/cal_cell_content_today}

                    {cal_cell_no_content}
                        <div class="day" href="" onclick="return getDate(' . $year . ' + /' . $month . '/ + {day});">
                            {day} ' . $month . '
                        </div>
                    {/cal_cell_no_content}

                    {cal_cell_no_content_today}
                        <div class="day" href="" onclick="return getDate(' . $year . ' + /' . $month . '/ + {day});">
                            {day} ' . $month . '
                        </div>
                    {/cal_cell_no_content_today}

                    {cal_cell_blank}&nbsp;{/cal_cell_blank}

                    {cal_cell_other}{day}{/cal_cel_other}

                    {cal_cell_end}</td>{/cal_cell_end}

                    {cal_cell_end_today}</td>{/cal_cell_end_today}

                    {cal_cell_end_other}</td>{/cal_cell_end_other}

                {cal_row_end}</tr>{/cal_row_end}

            {table_close}</table>{/table_close}'
    ];

    // loading the calendar and passing the params and data
    $this->load->library('calendar', $params);
    return $this->calendar->generate($year, $month);
}

Если вы посмотрите на приведенную выше модель, вы увидите, что я передаю переменную $month в модель и сразу же var_dumping, чтобы убедиться, что она передает в модель «+1 месяц». Это работает... однако я повторяю этот месяц в тегах {cal_cell_content} и получаю только этот месяц (сентябрь) для каждого из трех календарей.

16.09.2016

Ответы:


1

Хорошо, вот ответ для кого-то вроде меня в будущем.

Причина проблемы

CodeIgniter загружает библиотеки, которые создаются ОДИН РАЗ. Итак, здесь я пытался получить библиотеку «календарь» три раза, когда на самом деле CodeIgniter увидел, что я создал ее для сентября, поэтому он потрудился создать экземпляр для октября или ноября (одиночный шаблон?).

Решение

К счастью, CodeIgniter позволяет вам присвоить пользовательское имя класса библиотеке, например.

$this->load->library('calendar', $params, 'custom_name);
return $this->custom_name->generate($year, $month);

Довольно круто, так что теперь все, что мне нужно было сделать, это динамически генерировать новое «имя» для каждого из месяцев, которые я хотел отобразить... поэтому я сделал имя переменной $month вот так.

$this->load->library('calendar', $params, $month);
return $this->$month->generate($year, $month);
16.09.2016
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..