@99-rus

Передать данные пришедшие через ajax из одной функции php в другую?

Вопрос про формирование календаря.
Есть ajax запрос, который передает дату в функцию php:
$('.order_delivery').click(function(event){
        event.preventDefault();
        let dataDelivery_in_html = $(this).attr('data-delivery');
        $('.overlay-calendar').hide(500);
        $('.calendar-show').hide(500);

        $.ajax({
            url: '/Basket/DeliveryMontazhDate',
            data:  {dateMontazh: dataDelivery_in_html},
            type: 'POST',
            success: function(res){
                // Показывает эту дату в кнопке
                $('.date-popup-calendar-montazh').html(res);
            },
            error: function(){
                alert('Ошибка! Попробуйте позже');
            }
        });

    });

функция php, которая принимает эту дату и выводит ее в кнопку с классом (date-popup-calendar-montazh):
public function ajaxDeliveryMontazhDate(){
        if(!empty($_POST['dateMontazh'])){
            $date_montazh = $_POST['dateMontazh'];
            return $date_montazh;
        }
    }

Помимо этого, есть еще 3 функции php, которые формируют сам календарь:
1)
public function getMonthMontazh($month, $year, $events = array(), $count){
// Тут формируется сам календарь с датами
// Сюда мне нужно как-то передать переменную $date_montazh с датой, которую я отсылаю через ajax
}

2)
public function getIntervalMontazh($start, $end, $events = array()){
        // Тут вызывается предыдущая ф-ция, которая генерирует календарь с датами в цикле
        do {
            $out .= self::getMonthMontazh($curent[0], $curent[1], $events, $count);
        } while ($begin == true);
}

3)
Кликаем по кнопке и ajax-ом показываем календарь:
$('.date-popup-calendar-montazh').click(function(event){
        event.preventDefault();
        $('.overlay-calendar-montazh').show(500);
        $('.calendar-show-montazh').show(500);

        $.ajax({
            url: '/Basket/ShowCalendarMontazh',
            type: 'POST',
            success: function(res){
               // Вставляем результат функции php getIntervalMontazh() - (html код с календарем)
               // в html блок (calendar-montazh-wrap)
                $('.calendar-montazh-wrap').html(res);
            },
            error: function(){
                alert('Ошибка! Попробуйте позже');
            }
        });

    });

По ajax запросу выше, показываем конечный код html календаря
public function ShowCalendarMontazh(){
       // Тут вызываем ф-цию getIntervalMontazh() и передаем ей параметры,
       // чтобы выводил календарь только на 3 месяца
        return $this->getIntervalMontazh(date('n.Y'), date('n.Y', strtotime('+2 month')));
    }

Собственно вопрос: когда я передаю дату напрямую, в ф-цию, которая формирует календарь, то через консоль я вижу, что она есть, но дело в том, что эта ф-ция вызывается в другой ф-ции, а та уже в третьей и дата теряется...
Как мне передать эту дату так, чтобы при вызовах во всех следующих функциях она продолжала существовать?
  • Вопрос задан
  • 119 просмотров
Решения вопроса 1
@koder_1
Битрикс программист
Либо через ООП, заводите переменную класса и используйте её во всех методах класса,
либо просто по-обезьяньи в каждой функции сделайте аргумент дата и передавайте в каждую функцию.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@99-rus Автор вопроса
Спасибо! Завел переменную в классе:
Class Basket {
   private $date_montazh ;
  // и теперь в методе ajaxgetMonthMontazh(), когда дата пришла через ajax
  // я получаю к ней доступ через $this->date_montazh = $_POST['dateMontazh'];
  // и она теперь доступна уже и в других методах по цепочке
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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