Новости Joomla

joomLab Gallery - плагин галереи изображений для Joomla

👩‍💻 joomLab Gallery - плагин галереи изображений для Joomla.Плагин joomLab Gallery позволит Вам добавлять в любой материал неограниченное количество галерей, а главное удобно управлять файлами и эффектами в каждой галерее.Плагин использует популярны скрипты Swiper.js и FancyBox. Первый для крутой организации и эффектов галерей, а второй для красивого и функционального показа оригинальных изображений на Вашем сайте.На данный момент плагин имеет 10 макетов вывода - это 10 различных эффектов галерей и Вы можете совмещать все 10 в 1 материале.Плагин позволяет гибко настраивать индивидуально каждую галерею в материале. Вы можете выбрать макет, эффекты и даже можете управлять функциями всплывающего окна изображения.Недостатки.Такой вид реализации не предусматривает выбор изображения на сервере. Т.е. Вы не можете выбрать уже добавленное фото, только загружать заново. Плагин не предоставляет возможности доступа к медиа-менеджеру.Плагин бесплатный. Разработчик - участник нашего сообщества Александр Новиков (@pro-portal).Страница расширения@joomlafeed#joomla #расширения

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla Ну что, интересная инициатива от...

Готовлю большой выпуск, включающий интервью с участниками Joomla 🖨Ну что, интересная инициатива от @webtolkru в виде интервью с разными участниками весьма меня увлекла. Я, вооружившись данным примером, решил подготовить выпуск для NorrNext (@norrnext) и экстраполировал идею на международный масштаб. Теперь готовлю эксклюзивный выпуск с участниками Joomla сообщества со всего мира, которые, в той или иной мере, внесли свой вклад в развитие и популяризацию системы. Будут беседы с людьми из разных стран и фото с юбилейной символикой 📸Работа в процессе 👆 📝О результатах оповещу отдельно.

0 Пользователей и 1 Гость просматривают эту тему.
  • 17 Ответов
  • 2480 Просмотров
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Приветствую уважаемых форумчан, нужен ваш совет!

Проблема в следующем: есть макет компонента в котором выводятся записи на прием к специалистам по косметологии. Под каждой записью есть кнопка изменить запись, которая вызывает модальное окно бутстрап с расписанием мастера, выводимое циклом PHP. Мне нужно каким то образом передать id мастера в модальное окно, чтобы выводилось расписание конкретного мастера. Я пытаюсь передать его аяксом: беру из кнопки атрибут с айдишником и отправляю в модальное окно.

Консоль говорит, что все ровно, сервер отвечает 200, показывает передаваемое значение, но в $master = JFactory::getApplication()->input->post->get('master', '') модального окна приходит результат string(0)"". В начале модалки стоит  defined('_JEXEC') or die('Restricted access') Если поменять url в аяксе на контролер, то значение передается, а в модалку или файл в той же папке - ни фига. Видимо это связано с тем, что содержимое окна загружается раньше, чем приходит значение айдишника.

У меня вопрос к бывалым : Как ВЫ решаете подобные задачи?
*

NewUsers

  • Живу я здесь
  • 2310
  • 216 / 0
  • +375 (25) 627-16-99 (WhatsApp, Telegram)
Можно увидеть код который вы используете HTML и JS
Занимаюсь создание расширений для Joomla 4.2.x | Доработка и настройка сайтов. Занимаюсь создание Интернет магазинов с нуля на собственном компоненте + оптимизация загрузки страницы (после предоставляю техподдержку).
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Можно увидеть код который вы используете HTML и JS
Это макет списка записей:
Код
<?php defined('_JEXEC') or die;
JLoader::register('JTplHelper', JPATH_SITE . '/templates/ryba/html/helper.php');
//$this->document->setTitle($this->document->title.' - '.JsnHelper::getFormatName($this->data));
$dispatcher   = JEventDispatcher::getInstance();
$this->user= JsnHelper::getUser();
$this->current_user=JsnHelper::getUser();
//$user=JsnHelper::getUser();
$timeZone = $this->user->getParam('timezone', 'UTC');
$hidden_rows = $visible_rows = 0;
//var_dump($timeZone);
?>
<!-- Main Container -->
<div class="jsn-p">
<?php
    if(!$this->items || !count($this->items)):?>
      <h3>Записи не найдены</h3>
   <?php else:?>
      <h2>Ваши записи:</h2>
      <?php foreach($this->items as $i=>$order){
         $add_class = (JFactory::getDate($order->time)<JFactory::getDate())?' text-muted hidden':'';
         if(!$add_class)
            $visible_rows += 1;
         else $hidden_rows += 1;
   $user_m = JsnHelper::getUser($order->master_id);
   $break_start = strtotime($order->time);
    $break_end = strtotime($order->time_to);
    $duration =   $break_start - $break_end;
   $time_sum = abs($duration);
   ?>                                     
             <div id="row" class="row m-0<?php echo $add_class ?>" style="padding: 6px 0;">
            <div class="col-sm-5 col-md-2 p-0"><?php echo JHtml::_('date', $order->time, 'Дата: '.'d-m-y'.'/'.'H:i'.' - '.date("H:i", strtotime($order->time_to)));?> </div>
            <div class="col-sm-7 col-md-6"><?php echo $order->service_name.($order->tag_id ? ' /'.$order->tag_name : '');?></div>
            <div class="col-xs-6 col-sm-5 col-md-2"><?php echo number_format($order->price, 0, '.', ' ').'p.';?></div>
            <div class="col-xs-6 col-sm-7 col-md-2"><a href="<?php echo $user_m->getLink();?>"><?php echo $user_m->get('firstname').' '.$user_m->get('lastname').'/'.$user_m->get('id');?></a></div>
            <div class="col-xs-6 col-sm-8 col-md-2">
            <?php if(JFactory::getDate($order->time)>JFactory::getDate()): ?>
             <button type="button" class="btnrpl" data-toggle="modal" data-target="#rpl" data-svc-name="<?= $order->svc_name ?>" data-timesum="<?= $time_sum ?>" data-master="<?= $order->master_id ?>" data-svc-id="<?= $order->svc_id ?>" data-tag-id="<?= $order->tag_id ?>" style="margin: 3rem auto;">
            Изменить
            </button>
              </div>
            <div class="col-xs-6 col-sm-8 col-md-2">
             <button type="button" class="btndel" data-toggle="modal" data-target="#del" data-svc-name="<?= $order->svc_name ?>" data-master="<?= $order->master_id ?>" data-time="<?= $order->time ?>" data-tag-id="<?= $order->tag_id ?>" style="margin: 3rem auto;">
            Отменить
            </button><?php endif;?>
              </div>
         </div>
         <?php }?>
      <?php if($hidden_rows && $visible_rows):?>
      <div class="row m-5">
         <a class="btn btn-success" style="margin: 3rem auto;" href="#" onclick="jQuery(this).parent().siblings().toggleClass('hidden')">Архивные показать/скрыть</a>
      </div>
      <?php endif;?>
      <?php if($hidden_rows && !$visible_rows):?>
            <style>.jsn-p .row.hidden{display: flex;}</style>
      <?php endif;?>
     
   <?php endif;?>
    <?php
   if(isset($user_m)&& !empty($user_m)):
   $work_day = (array)$user_m->getValue('work_day');
    $work_from = $user_m->getValue('work_from')? $user_m->getValue('work_from') : '[0]';
    $work_to = $user_m->getValue('work_to')? $user_m->getValue('work_to') : '[0]';

    $work_from = json_decode(($work_from[0]=='[')? $work_from : '['.$work_from.']');
    if(count($work_from)==1)
   $work_from = array_fill(0, 7, $work_from[0]);
    elseif(count($work_from)==count($work_day)){
   $work_from = array_replace(array_fill(0, 8, 0), array_combine($work_day, $work_from));
   array_shift($work_from);
    }

    $work_to = json_decode(($work_to[0]=='[')? $work_to : '['.$work_to.']');
    if(count($work_to)==1)
   $work_to = array_fill(0, 7, $work_to[0]);
    elseif(count($work_to)==count($work_day)){
   $work_to = array_replace(array_fill(0, 8, 0), array_combine($work_day, $work_to));
   array_shift($work_to);
    }
    //if(is_object($work_day) && is_object($work_from) && is_object($work_to))
    foreach($work_day as $wd)
   foreach(range(ceil($work_from[$wd-1]), floor($work_to[$wd-1])) as $hour)
     //if(isset($this->data->work))
      $this->data->work[$wd][] = $hour;
   endif;
   ?>
    </div>
    <script>
   $(document).ready(function($) {
      $('#rpl').insertAfter('head');   
     
      $('.btnrpl').click(function(e){
                 
            var svc_id  = $(this).attr('data-svc-id');
            $('.svcid').val(svc_id);
         
         var tag_id  = $(this).attr('data-tag-id');
            $('.tagid').val(tag_id);
         
         var svc_name  = $(this).attr('data-svc-name');
            $('.svcname').val(svc_name);
         
         var time_sum = $(this).attr('data-timesum');
         $('.time_sum').val(time_sum);
         
         var master_id  = parseInt($(this).attr('data-master'));
              $('.masid').val(master_id);
         
         var url = '../templates/ryba/html/com_jsn/orders/default_modal.php';
         
         $.ajax({
            url: url,
            data: {'master': master_id},
            type: "post",
         success: function(data) {
            alert("Here: " + data);
            }
            });
         console.log("Ответ сервера:\n" + data);
        });         
         
         
         $('#rpl').on('shown.bs.modal', function (event) {
            var id = $(event.relatedTarget).attr('data-master');
            $('.master').val(id);
            $('.calendar__master').slick("refresh");
            $('#rpl .screen').hide();
            $('#rpl .screen1').show();
            $('.calendar__master input:checked').removeAttr('checked');
            $('.calendar__master.preload').removeClass("preload");
         });
         
         $('#rpl .btn-next').click(function(el){
            var scr = jQuery(this).closest('.screen');
            if(scr.hasClass('screen1')){
               if(!scr.find('input:checked').length)
                  $('.calendar__master').addClass('error');
               else{
                  var date = new Date(scr.find('input:checked').first().val());
                  $('#req_date').html(date.toLocaleString().slice(0, 10).split('/').reverse().join('.'));               
                  $('#req_time').html(date.getHours()+':'+(date.getMinutes()==0?'00':date.getMinutes()));
                 
                  $('.calendar__master').removeClass('error');
                  scr.hide().next().show();
               }
            }else if(scr.hasClass('screen2'))
               scr.hide().next().show();
            else if(scr.hasClass('screen3'))
               if($('#order-form').find('input[name="name"]').val()=='')
                  $('#order-form').find('input[name="name"]').addClass('invalid');
               else if($('#order-form').find('input[name="telefon"]').val()=='')
                  $('#order-form').find('input[name="telefon"]').addClass('invalid');
               else {
                  $.ajax({type: "POST", url: '?option=com_jsn&format=json&task=update',
                     data: scr.closest('form').serialize(), dataType: 'json',
                     success: function(data){
                        if(data.success){
                           $('#rpl').modal('hide');
                           document.location.reload();                     
                        }
                        else{
                           if(!$('#order-form .error-msg').length)
                              $('<div class="error-msg"></div>').insertAfter($('#order-form .days__btns'));
                           $('#order-form .error-msg').html(data.message);
                        }
                     }
                  });
               }
          });
      $('#del').insertAfter('head');
        $('.btndel').click(function(){
                 var master  = $(this).attr('data-master');
                    $('.masid').val(master);
                var time  = $(this).attr('data-time');
                    $('.svctime').val(time);
                 var tag_id  = $(this).attr('data-tag-id');
                    $('.tagid').val(tag_id);
                 var svc_name  = $(this).attr('data-svc-name');
                    $('.svcname').val(svc_name);
               
             $('.btn-del').click(function(){
            $.ajax({type: "POST", url: '?option=com_jsn&format=json&task=del',
               data: $('#del-form').serialize(), dataType: 'json',
               success: function(data){
                  if(data.success){
                     $('#del').modal('hide');
                     document.location.reload();
                  }
                       
               }
             });
          });
       });
   });
   </script>
   <?php echo $this->loadTemplate('modal');?>
Это модальное окно:
Код
<?php  defined('_JEXEC') or die('Restricted access');
require_once JPATH_SITE.'/templates/ryba/html/com_jsn/orders/temp.php';
?>
      <!-- Modal  THIS ORDER-->
      <div class="modal fade" id="rpl" role="dialog" name="master" aria-labelledby="exampleModalLabel"   aria-hidden="true">
          <input type="hidden" name="master" class="master" value=""/>
         <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                    <div class="modal-body">
                  <form id="order-form" method="POST" action="/">
                        <div class="screen screen1">
                            <div class="calc__body">
                                <h2>Изменить время записи на услугу</h2>
                            <div class="calendar__master preload">
                           <?php
                           
                           $db = JFactory::getDbo();
                           foreach($this->items as $i=>$order)
                           $user_m = JsnHelper::getUser($order->master_id);
                                                               
                           $this->reserved_time = array();
                                    if($user_m->id){
                                   $db->setQuery("SELECT CONCAT(DATE(time), ' ', TIME(time)) FROM #__jsn_orders WHERE time>NOW() AND master_id=".$db->quote($user_m->id));
                                   $this->reserved_time = $db->loadColumn();
                                   }   
                                    $this->reserved_time_to = array();
                                    if($user_m->id){
                                   $db->setQuery("SELECT CONCAT(DATE(time_to), ' ', TIME(time_to)) FROM #__jsn_orders WHERE time>NOW() AND master_id=".$db->quote($user_m->id));
                                   $this->reserved_time_to = $db->loadColumn();
                                   }
                                    $this->stock_time = array();
                                    if($user_m->id){
                                   $db->setQuery("SELECT CONCAT(DATE(time), ' ', TIME(time)) FROM #__jsn_stocks WHERE time>NOW() AND master_id=".$db->quote($user_m->id));
                                   $this->stock_time = $db->loadColumn();
                                   }   
                                    $this->stock_time_to = array();
                                    if($user_m->id){
                                   $db->setQuery("SELECT CONCAT(DATE(time_to), ' ', TIME(time_to)) FROM #__jsn_stocks WHERE time>NOW() AND master_id=".$db->quote($user_m->id));
                                   $this->stock_time_to = $db->loadColumn();
                           }   
                           
                                    $date = JFactory::getDate();                           
                           foreach(range(1, 14) as $day){?>
                                    <div class="calendar__master-item">
                              <span class="mas-date">
                                 <?php echo $date->format("d.m.Y");?>
                                 <b><?php echo mb_strtolower($date->format("D"))?>.</b>
                              </span>
                              <?php
                              $wday = $date->format("w"); $wday = $wday ? $wday : 7; //var_dump(max($this->data->work[$wday]) > (float)date("G")+1);
                              if(array_key_exists($wday, $this->data->work) && ($day>1 || max($this->data->work[$wday]) < $date->format("d.m.Y"))):?>
                              <p class="btns-m">
                              <?php
                              if($this->current_user->id){   
                              $work_from = $user_m->getValue('work_from');
                                        $work_to = $user_m->getValue('work_to');
                              }
                                        else{
                               $work_from = $this->user->getValue('work_from')? $this->user->getValue('work_from') : '[0]';
                                        $work_to = $this->user->getValue('work_to')? $this->user->getValue('work_to') : '[0]';
                              }                             
                                 $start = strtotime($work_from);
                                 $end = strtotime($work_to);
                                 
                                 $step = 15 * 60;
                                 $arr_work = array();
                               for($i = $start; $i <= $end; $i += $step){
                                  $arr_work[] = date("H:i", $start);
                                 $start += $step;
                                }
                               foreach($arr_work as $hour){
                                 $reserved = false;
                                 $val = $date->format("Y-m-d").' '.$hour;
                                if(isset($this->reserved_time) && !empty($this->reserved_time_to)){
                                 $a1 = new ArrayIterator($this->reserved_time);
                                            $a2 = new ArrayIterator($this->reserved_time_to);

                                            $it = new MultipleIterator;
                                            $it->attachIterator($a1);
                                            $it->attachIterator($a2);

                                            foreach($it as $e) {
                                 $break_start = strtotime($e[0]);
                                 $break_end = strtotime($e[1]);
                                 $arr_reserv = array();
                                  while($break_start <= $break_end){
                                    $arr_reserv = date("Y-m-d H:i", $break_start);
                                     $break_start += $step;
                                     if($val == $arr_reserv){
                                     $reserved = true;
                                     }
                                  }
                                  }
                               }   
                                        if(isset($this->stock_time) && !empty($this->stock_time_to)){
                                 $s1 = new ArrayIterator($this->stock_time);
                                            $s2 = new ArrayIterator($this->stock_time_to);
                                           
                                            $iter = new MultipleIterator;
                                            $iter->attachIterator($s1);
                                            $iter->attachIterator($s2);

                                            foreach($iter as $st) {
                                 $stock_start = strtotime($st[0]);
                                 $stock_end = strtotime($st[1]);
                                  $arr_stock = array();
                                  while($stock_start <= $stock_end){
                                    $arr_stock = date("Y-m-d H:i", $stock_start);
                                     $stock_start += $step;
                                     if($val == $arr_stock){
                                     $reserved = true;
                                     }
                                  }
                                  }
                               }       
                                      $master = JFactory::getApplication()->input->post->get('master', '');
                                    var_dump($master);
                                               $inp_id = str_replace(array('.', ' ', ':'), '-', $val);
                                    if(!$reserved){
                                       echo '<input type="radio" id="'.$inp_id.'-00" name="time" value="'.$val.'">';
                                       echo '<label for="'.$inp_id.'-00" class="btn-select'.$reserved.'">'.$hour.'</label>';
                                    }
                                    else echo '<label class="btn-select reserved">'.$hour.'</label>';
                                 }?>
                                        </p>
                              <?php else:?>
                                           <span class="line-no"></span>
                                        <?php endif;?>
                                    </div>
                                    <?php $date->modify('+1 DAY');
                              }?>
                                </div>
                            </div>
                            <div class="calc__btn">
                                <div class="btn-next">Далее</div>
                                <button type="button" class="close__btn" data-dismiss="modal">Отмена</button>
                            </div>
                        </div>


                        <div class="screen screen2">
                            <div class="calc__body">
                                <h2>Новая запись</h2>
                                <div class="zapis__data">
                                    <span class="zapis__data-time">Дата: <b id="req_date"></b></span>
                                    <span class="zapis__data-time">Время: <b id="req_time"></b></span>
                                    <div class="zapis__data-price-wrap"></div>
                                    <b class="zapis__data-result"></b>
                                    <textarea name="note" class="zapis__data-textarea" placeholder="Комментарий (необязательно)"></textarea>
                                </div>
                                <div class="calc__btn">
                                    <div class="btn-next">Далее</div>
                                    <button class="close__btn" type="button" onclick="jQuery('.screen').hide();jQuery(this).closest('.screen').prev().show();" >Назад</button>
                                </div>
                            </div>

                        </div>
                        <div class="screen screen3">
                            <div class="calc__body">
                                <h2>Изменение записи</h2>
                                <div class="form__finish">
                                </div>
                                <div class="calc__btn">
                                    <div class="btn-next">Изменить запись</div>
                                    <button class="close__btn" type="button" onclick="jQuery('.screen').hide();jQuery(this).closest('.screen').prev().show();">Назад</button>
                                </div>
                            </div>
                        </div>
                        <div class="screen screen4">
                     <div class="calc__body">
                        <label class="succes-round">Запись изменена</label>
                        <div class="calc__btn">
                           <div class="btn-fin" data-dismiss="modal">Закрыть</div>
                                </div>
                     </div>
                  </div>
                      <input type="hidden"  id="id" class="masid" name="master_id" value="" />
                     <input id="zapis__data-s-id" type="hidden"  class="svcid" name="svc_id" value="" />
                     <input id="zapis__data-t-id" type="hidden"  class="tagid" name="tag_id" value="" />
                     <input id="zapis__data-s-nm" type="hidden"  class="svcname" name="svc_name" value="" />
                     <input id="time_sum" type="hidden" class="time_sum" name="time_sum" value="" />
                     
                     <?php echo JHtml::_('form.token');?>
                  </form>
               </div>
                </div>
            </div>
        </div>

         <!-- Modal DELETE-->
        <div class="modal fade" id="del" role="dialog" aria-labelledby="exampleModalLabel" tabindex="-1"  aria-hidden="true">
            <div class="modal-dialog modal-dialog-centered" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                    </div>
                        <div class="modal-body">
                  <h2>Отмена записи</h2>
               <form id="del-form" method="POST" action="/">
                                <div class="del__btn">
                                    <div class="btn-del">Отменить запись</script></div>
                                </div>
                       
                        </div>
                       <input type="hidden"  class="masid" name="master_id" value="0" />
                            <input id="del__data-time" type="hidden"  class="svctime" name="time" value="0" />
                     <input id="del__data-t-id" type="hidden"  class="tagid" name="tag_id" value="0" />
                     <input id="del__data-s-nm" type="hidden"  class="svcname" name="svc_name" value="" />
                     <input id="time_sum" type="hidden" class="time_sum" name="time_sum" value="" />
                     <?php echo JHtml::_('form.token');?>
               </form>
            </div>
            </div>
        </div>
               
 

 
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Лучше создать модуль под вашу модалку .
Вы имеете в виду, что айдишник будет передаваться через сом_аякс в модуль, а уже модуль по айдишнику выведет расписание? Вариант!
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Еще прямые AJAX запросы блокируются запретом
Код
<?php defined('_JEXEC') or die;
Закоментируйте- и проверьте
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Еще прямые AJAX запросы блокируются запретом
Код
<?php defined('_JEXEC') or die;
Закоментируйте- и проверьте
Да, проверял. Отдает ошибку 500. Joomla без этой директивы вообще закрывает доступ к файлу. Если с ней, то код 200, но succes: alert(data) пустое. Если с defined('_JEXEC') or die('Restricted access'), то алерт отдает 'Restricted access'.
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Я так понял, что в Joomla AJAX запросы проходят только по системным ссылкам типа ?option=com_mycomponent&view=orders&view=modal но я не могу к модалке такую составить. Перепробовал много вариантов - в консоли 404
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Да, проверял. Отдает ошибку 500. Joomla без этой директивы вообще закрывает доступ к файлу.
500 это ошибка сервера. И если прямой запрос к файлу модалки, то нельзя использовать неопределенные константы Joomla . Например JPATH_SITE в
Код
require_once JPATH_SITE.'/templates/ryba/html/com_jsn/orders/temp.php'; 
п.с.
И этот код вызовет ошибку, потому что не подключен framework Joomla
Код
$db = JFactory::getDbo();
В модуле этих ошибок не будет или подключать framework Joomla в файлах .
« Последнее редактирование: 19.11.2021, 09:13:35 от draff »
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
500 это ошибка сервера. И если прямой запрос к файлу модалки, то нельзя использовать неопределенные константы Joomla . Например JPATH_SITE в
Код
require_once JPATH_SITE.'/templates/ryba/html/com_jsn/orders/temp.php'; 
п.с.
И этот код вызовет ошибку, потому что не подключен framework Joomla
Код
$db = JFactory::getDbo();
В модуле этих ошибок не будет или подключать framework Joomla в файлах .
В модалку поставил
Код
defined('_JEXEC');
Изменил запрос, добавил contentType и сообщение об ошибке
Код
var url = '/templates/ryba/html/com_jsn/orders/default_modal.php';
         
         $.ajax({
         url: url,
         data: {'master': master_id},
         type: "post",
         contentType: "application/json, charset: utf-8",
         cache: false,
         success: function(data) {
         alert('SUCCESS:  '+data);
         console.log("Ответ сервера:\n" + data); 
            },
         error: function(error) {
         alert('ERROR:  '+error);
         console.log( "ERROR:", error );
            }
         });

Данные форм в консоли показывает верное значение, но в ответе сервера отдает  HTML модалки...
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Лучше создать модуль под вашу модалку .
Пошел путем, который Вы порекомендовали - делаю модуль для модалки. В метод getAjax передаю ID записи без проблем, внутри метода делаю выборку из базы необходимых объектов, но вывести объекты в default не могу. В другом методе внутри класса модуля получить доступ к переменным метода getAjax также не могу - отдает null. Как полученнный id в методе getAjax передать другому методу внутри класса?
« Последнее редактирование: 22.11.2021, 15:33:34 от coolplaymaster »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
В метод getAjax передаю ID записи без проблем, внутри метода делаю выборку из базы необходимых объектов, но вывести объекты в default не могу.
Return возвращает данные, их видно в тулс браузера Сеть  ?
Делайте вызов другого метода с передачей параметров из getAjax или сессией .
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Return возвращает данные, их видно в тулс браузера Сеть  ?
Делайте вызов другого метода с передачей параметров из getAjax или сессией .
Да, в консоли возвращает полученные объекты. Но передать из в другой метод этого же класса не могу. У меня в default HTML самого окна мне туда нужен id, чтобы циклами вывести расписание. Создаю внутри класса метод getWorks, в него предаю значение id добавляю в mod_modal.php  $id = ModModalHelper::getWorks($params); в defaul.php пытаюсь вывести echo $id значение null
Пробовал создать дочерний класс с методом, в котором пытался получить экземпляр класса $obj = new ModModalHelper(); $obj->id; выдает ошибку контекста. Вот мой хелпер
Код
<?php  defined('_JEXEC') or die;

class ModModalHelper
{
    function getAjax()
    {
        $jinput = JFactory::getApplication()->input;
        $master = $jinput->getInt('master_id');
       
        $db = JFactory::getDbo();
       
        $fields = array('work_day', 'work_from', 'work_to');
        $query = $db->getQuery(true);
        $query
        ->select($db->quoteName($fields))
        ->from($db->quoteName('#__jsn_users'))
        ->where($db->quoteName('id') . ' = ' . $master);
        $db->setQuery($query);
        $works = $db->loadObjectList();
       
       
        $fields = array('time', 'time_to');
        $query = $db->getQuery(true);
        $query
        ->select($db->quoteName($fields))
        ->from($db->quoteName('#__jsn_orders'))
        ->where($db->quoteName('master_id') . ' = ' . $master);
        $db->setQuery($query);
        $orders = $db->loadObjectList();
       
       
        $fields = array('time', 'time_to');
        $query = $db->getQuery(true);
        $query
        ->select($db->quoteName($fields))
        ->from($db->quoteName('#__jsn_stocks'))
        ->where($db->quoteName('master_id') . ' = ' . $master);
        $db->setQuery($query);
        $stocks = $db->loadObjectList();
       
       
        $schedule = array($works, $orders, $stocks);
        return $schedule;   
    }
    /* public function getWorks($params){
        echo "HUETA";
    } */
}
class RenderModal extends ModModalHelper{
    function getWorks($params){
        $render = new ModModalHelper();
        echo $render->schedule;
    }
}
?>
Ответ в тулс то что нужно. Но как его передать в дефаулт?
Код
{
    "success": true,
    "message": null,
    "messages": null,
    "data": [
        [
            {
                "work_day": "[\"2\",\"3\",\"4\",\"7\"]",
                "work_from": "8.45",
                "work_to": "18.45"
            }
        ],
        [
            {
                "time": "2021-11-23 08:45:00",
                "time_to": "2021-11-23 09:30:00"
            }
        ],
        []
    ]
}
« Последнее редактирование: 22.11.2021, 17:32:21 от coolplaymaster »
*

draff

  • Гуру
  • 5801
  • 434 / 7
  • ищу работу
Код
$schedule = array($works, $orders, $stocks);
может
Код
$schedule = array_merge($works, $orders, $stocks);
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Код
$schedule = array($works, $orders, $stocks);
может
Код
$schedule = array_merge($works, $orders, $stocks);
Нет, не хочет передавать. Внутри метода переменная работает правильно и делает выборку из базы согласно своему значению, а наружу не передается ни сама переменная, ни полученные объекты.
« Последнее редактирование: 22.11.2021, 19:40:42 от coolplaymaster »
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
Пошел путем динамической подгрузки расписания аяксом. Передаю атрибут кнопки с ID поля в PHP обработчик, в моем случае это хелпер шаблона, в обрабочике получаю ID и делаю выборку из базы рабочих дней и расписание мастера, создаю циклы вывода и передаю это все в модальное окно через success. В результате выводится индивидуальное расписание, но не в том виде в каком надо. Вопрос как корректно передать HTML селекторы через AJAX.
my.js
Код
var url = "?option=com_ajax&template=ryba&format=raw";
         $.ajax({
            url: url,
            data: {"master": master_id},
         type: "post",
         cache: false,
         beforeSend: function(){
            $('.calendar__master-item').empty();
            },
         success: function(data) {
             $('.calendar__master-item').append(data);
         },
         error: function(error) {
         alert("ERROR:  "+error);
         console.log( "ERROR:", error );
            }
         });   
helper.php
Код
public static function getAjax(){
      $app = JFactory::getApplication()->input;
      $master = $app->getInt('master');
      $db = JFactory::getDbo();
      $fields = array('work_day', 'work_from', 'work_to');
       $query = $db->getQuery(true);
      $query
      ->select($db->quoteName($fields))
      ->from($db->quoteName('#__jsn_users'))
      ->where($db->quoteName('id'). ' = ' . $master);
      $db->setQuery($query);
      $works = $db->loadObjectList();
     
     
      $fields = array('time', 'time_to');
      $query = $db->getQuery(true);
      $query
      ->select($db->quoteName($fields))
      ->from($db->quoteName('#__jsn_orders'))
      ->where($db->quoteName('master_id'). ' = ' . $master);
      $db->setQuery($query);
      $orders = $db->loadObjectList();
     
     
      $fields = array('time', 'time_to');
      $query = $db->getQuery(true);
      $query
      ->select($db->quoteName($fields))
      ->from($db->quoteName('#__jsn_stocks'))
      ->where($db->quoteName('master_id'). ' = ' . $master);
      $db->setQuery($query);
      $stocks = $db->loadObjectList();
     
     
      $date = JFactory::getDate();                           
      foreach(range(1, 14) as $day){
       
      echo '<span class="mas-date">'.$date->format("d.m.Y").'<b>'.mb_strtolower($date->format("D")).'.</b></span>';
        foreach($works as $work)
      foreach($orders as $order)
        foreach($stocks as $stock)
      echo '<p class="btns-m">';
     
       $start = strtotime($work->work_from);
      $end = strtotime($work->work_to);
                                 
      $step = 15 * 60;
      $arr_work = array();
       for($i = $start; $i <= $end; $i += $step){
      $arr_work[] = date("H:i", $start);
      $start += $step;
      }
      foreach($arr_work as $hour){
         $reserved = false;
            $val = $date->format('Y-m-d').' '.$hour;
      if(!empty($orders->time) && !empty($orders->time_to)){
            $a1 = new ArrayIterator($orders->time);
            $a2 = new ArrayIterator($orders->time_to);

            $it = new MultipleIterator;
            $it->attachIterator($a1);
            $it->attachIterator($a2);

            foreach($it as $e) {
            $break_start = strtotime($e[0]);
            $break_end = strtotime($e[1]);
            $arr_reserv = array();
      while($break_start <= $break_end){
            $arr_reserv = date("Y-m-d H:i", $break_start);
             $break_start += $step;
         if($val == $arr_reserv){
            $reserved = true;
            }
         }
        }
       }   
      if(!empty($stocks->time) && !empty($stocks->time_to)){
         $s1 = new ArrayIterator($stocks->time);
         $s2 = new ArrayIterator($stocks->time_to);
                                   
         $iter = new MultipleIterator;
         $iter->attachIterator($s1);
         $iter->attachIterator($s2);

       foreach($iter as $st) {
         $stock_start = strtotime($st[0]);
         $stock_end = strtotime($st[1]);
         $arr_stock = array();
      while($stock_start <= $stock_end){
          $arr_stock = date("Y-m-d H:i", $stock_start);
         $stock_start += $step;
      if($val == $arr_stock){
         $reserved = true;
         }
      }
      }
       }   
          $inp_id = str_replace(array('.', ' ', ':'), '-', $val);                             
         if(!$reserved){
         echo '<input type="radio" id="'.$inp_id.'" name="time" value="'.$val.'">';
         echo '<label for="'.$inp_id.'" class="btn-select'.$reserved.'">'.$hour.'</label>';
      }
         else echo '<label class="btn-select reserved">'.$hour.'</label>';
       }
         echo "</p>";
         echo "<span class='line-no'></span>";
            echo "</div>";
         $date->modify('+1 DAY');
         
      }
     
   }
Результат ajax http://vfl.ru/fotos/dd50b67237109647.html
А нужно так http://vfl.ru/fotos/c1cc810b37108827.html
« Последнее редактирование: 15.12.2021, 11:04:20 от coolplaymaster »
*

anatol81n

  • Захожу иногда
  • 82
  • 2 / 0
Пошел путем динамической подгрузки расписания аяксом. Передаю атрибут кнопки с ID поля в PHP обработчик, в моем случае это хелпер шаблона, в обрабочике получаю ID и делаю выборку из базы рабочих дней и расписание мастера, создаю циклы вывода и передаю это все в модальное окно через success. В результате выводится индивидуальное расписание, но не в том виде в каком надо. Вопрос как корректно передать HTML селекторы через AJAX.
my.js
Код
var url = "?option=com_ajax&template=ryba&format=raw";
         $.ajax({
            url: url,
            data: {"master": master_id},
         type: "post",
         cache: false,
         beforeSend: function(){
            $('.calendar__master-item').empty();
            },
         success: function(data) {
             $('.calendar__master-item').append(data);
         },
         error: function(error) {
         alert("ERROR:  "+error);
         console.log( "ERROR:", error );
            }
         });   
helper.php
Код
public static function getAjax(){
      $app = JFactory::getApplication()->input;
      $master = $app->getInt('master');
      $db = JFactory::getDbo();
      $fields = array('work_day', 'work_from', 'work_to');
       $query = $db->getQuery(true);
      $query
      ->select($db->quoteName($fields))
      ->from($db->quoteName('#__jsn_users'))
      ->where($db->quoteName('id'). ' = ' . $master);
      $db->setQuery($query);
      $works = $db->loadObjectList();
     
     
      $fields = array('time', 'time_to');
      $query = $db->getQuery(true);
      $query
      ->select($db->quoteName($fields))
      ->from($db->quoteName('#__jsn_orders'))
      ->where($db->quoteName('master_id'). ' = ' . $master);
      $db->setQuery($query);
      $orders = $db->loadObjectList();
     
     
      $fields = array('time', 'time_to');
      $query = $db->getQuery(true);
      $query
      ->select($db->quoteName($fields))
      ->from($db->quoteName('#__jsn_stocks'))
      ->where($db->quoteName('master_id'). ' = ' . $master);
      $db->setQuery($query);
      $stocks = $db->loadObjectList();
     
     
      $date = JFactory::getDate();                           
      foreach(range(1, 14) as $day){
       
      echo '<span class="mas-date">'.$date->format("d.m.Y").'<b>'.mb_strtolower($date->format("D")).'.</b></span>';
        foreach($works as $work)
      foreach($orders as $order)
        foreach($stocks as $stock)
      echo '<p class="btns-m">';
     
       $start = strtotime($work->work_from);
      $end = strtotime($work->work_to);
                                 
      $step = 15 * 60;
      $arr_work = array();
       for($i = $start; $i <= $end; $i += $step){
      $arr_work[] = date("H:i", $start);
      $start += $step;
      }
      foreach($arr_work as $hour){
         $reserved = false;
            $val = $date->format('Y-m-d').' '.$hour;
      if(!empty($orders->time) && !empty($orders->time_to)){
            $a1 = new ArrayIterator($orders->time);
            $a2 = new ArrayIterator($orders->time_to);

            $it = new MultipleIterator;
            $it->attachIterator($a1);
            $it->attachIterator($a2);

            foreach($it as $e) {
            $break_start = strtotime($e[0]);
            $break_end = strtotime($e[1]);
            $arr_reserv = array();
      while($break_start <= $break_end){
            $arr_reserv = date("Y-m-d H:i", $break_start);
             $break_start += $step;
         if($val == $arr_reserv){
            $reserved = true;
            }
         }
        }
       }   
      if(!empty($stocks->time) && !empty($stocks->time_to)){
         $s1 = new ArrayIterator($stocks->time);
         $s2 = new ArrayIterator($stocks->time_to);
                                   
         $iter = new MultipleIterator;
         $iter->attachIterator($s1);
         $iter->attachIterator($s2);

       foreach($iter as $st) {
         $stock_start = strtotime($st[0]);
         $stock_end = strtotime($st[1]);
         $arr_stock = array();
      while($stock_start <= $stock_end){
          $arr_stock = date("Y-m-d H:i", $stock_start);
         $stock_start += $step;
      if($val == $arr_stock){
         $reserved = true;
         }
      }
      }
       }   
          $inp_id = str_replace(array('.', ' ', ':'), '-', $val);                             
         if(!$reserved){
         echo '<input type="radio" id="'.$inp_id.'" name="time" value="'.$val.'">';
         echo '<label for="'.$inp_id.'" class="btn-select'.$reserved.'">'.$hour.'</label>';
      }
         else echo '<label class="btn-select reserved">'.$hour.'</label>';
       }
         echo "</p>";
         echo "<span class='line-no'></span>";
            echo "</div>";
         $date->modify('+1 DAY');
         
      }
     
   }
Результат AJAX http://vfl.ru/fotos/dd50b67237109647.html
А нужно так http://vfl.ru/fotos/c1cc810b37108827.html
сильно не вкупался в ваш код, вы пытаетесь рендерить HTML на беке, но мне кажется ваш подход не совсем верный. Я бы сделал так:
на беке формировал только массив данных с расписанием, AJAX бы его забирал.
на фронте уже разбирал этот массив данных и рендерил нужный HTML джаваскриптом.
*

coolplaymaster

  • Захожу иногда
  • 62
  • 1 / 0
  • Быстро, весело, спортивно.
сильно не вкупался в ваш код, вы пытаетесь рендерить HTML на беке, но мне кажется ваш подход не совсем верный. Я бы сделал так:
на беке формировал только массив данных с расписанием, AJAX бы его забирал.
на фронте уже разбирал этот массив данных и рендерил нужный HTML джаваскриптом.
Спасибо за подсказку! Буду пробовать.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Joomla 3 не пускает в админку (просто перезагружается страница) (гуглил, нашёл решение, не помогло)

Автор lifelover2b

Ответов: 11
Просмотров: 4559
Последний ответ 05.06.2025, 04:48:29
от andrey222
По поводу сессий Joomla 3

Автор azm1n

Ответов: 0
Просмотров: 1055
Последний ответ 25.05.2025, 09:26:17
от azm1n
Стоит ли ставить плагин rel="canonical" на Joomla 3

Автор azm1n

Ответов: 2
Просмотров: 1338
Последний ответ 09.05.2025, 12:39:18
от azm1n
Вывести поля профиля Joomla

Автор romagromov

Ответов: 11
Просмотров: 2554
Последний ответ 28.04.2025, 10:25:44
от sivers
Максимальная версия PHP для Joomla 3

Автор Dram

Ответов: 8
Просмотров: 2902
Последний ответ 27.03.2025, 10:40:29
от wishlight