L

Litemir

+2
Репутация
43
Рейтинг
#1 [ЕСТЬ РЕШЕНИЕ] Получение ajax запроса 5 апреля 2025 в 11:18

У меня возникла проблема с реализацией AJAX‑эндпоинта для получения статистики по выбранному диапазону дат. По умолчанию стандартные периоды (Сегодня, Вчера, Неделя, Всего) отображаются корректно, но когда я пытаюсь получить данные по произвольному диапазону (через GET‑параметры start и end), возвращается ошибка 404.

в grid_adblock.php

добавил        

  1. 'title' => 'Статистика',
  2. 'class' => 'view ajax-modal',
  3. 'href' => href_to($controller->root_url, 'adblock_statistics', array('{id}')),
  4. )

Появляется модальное окно.

Изображение

Я создал файл с названием adblock_statistics_ajax.php в каталоге
/system/controllers/adsman/backend/actions/
и внутри файла объявил класс:

  1. <?php
  2.  
  3. class actionAdsmanAdblockStatisticsAjax extends cmsAction {
  4.  
  5. public function run($id) {
  6. if (!$this->request->isAjax()) {
  7. cmsCore::error404();
  8. }
  9.  
  10. ini_set('display_errors', 0);
  11.  
  12. $start = $this->request->get('start', '');
  13. $end = $this->request->get('end', '');
  14.  
  15. if (empty($start) || empty($end)) {
  16. return $this->cms_template->renderJSON(['error' => 'Начальная и конечная даты обязательны.']);
  17. }
  18.  
  19. try {
  20. $result = $this->model->getRangeStatistics($id, $start, $end);
  21. if (!$result) {
  22. $result = ['hits' => 0, 'click' => 0];
  23. }
  24. return $this->cms_template->renderJSON($result);
  25. } catch (Exception $e) {
  26. return $this->cms_template->renderJSON(['error' => $e->getMessage()]);
  27. }
  28. }
  29. }
  30.  

В методе вызывается метод модели getRangeStatistics, который дополняет переданные даты до «00:00:00» и «23:59:59» и возвращает сумму значений в колонках hits_count и click_count.

Маршрутизация:
URL для AJAX‑запроса формируется функцией href_to

  1. $rangeUrl = href_to($this->controller->root_url, 'adblock_statistics_ajax', array($ads['id']));

Однако, при прямом обращении по полученному URL, например:

  1. https://example.com/admin/adsman/adblock_statistics_ajax/2?start=2025-01-01&end=2025-10-10

возвращается ошибка 404.

Какие ещё возможны причины, по которым файл моего AJAX‑эндпоинта не находится системой?
Как правильно настроить маршрутизацию для такого эндпоинта, чтобы URL, сформированный через href_to, корректно указывал на мой файл adblock_statistics_ajax.php?
Может ли проблема быть связана с значением $this->controller->root_url или с какими-либо настройками системы, влияющими на поиск файлов в каталоге /system/controllers/adsman/backend/actions/?


Буду благодарен за любые советы или решения, которые помогут устранить ошибку 404 для моего AJAX‑эндпоинта и правильно получать данные по произвольному диапазону дат.

#1 Хотелки к Будущему релизу 31 марта 2025 в 21:10
 pupsik, надо один раз создать свой дочерний шаблон, и будет вам счастье.
Zau4man

Поддерживаю. 

#2 Не устанавливаются дополнения из каталога и через файл 14 марта 2025 в 17:54
При установке дополнений  (из каталога или через файл) пишет что «Пакет дополнения был успешно установлен» Но реально дополнения не устанавливается — его нет нигде в админке и среди установленных
Нэйтал И

Удалите всё из базы и с хостинга что связано с этим дополнением.

#1 [ЗАКРЫТО] Загрузка несколько файлов в категории 20 февраля 2025 в 13:53

Всем привет. Подскажите, как сделать возможность загрузки несколько файлов для категории? 

#3 Контактная форма 18 февраля 2025 в 09:06
Я пишу виджет в нем цепляю на кнопку модальное окно Litemir Каким образом цепляете? Так пробовали? <a class=«ajax-modal btn btn-primary» href=«forms/ИД_формы»>Открыть форму</a>
Loadырь

Я форму получаю и вывожу в своём модальном окне. С этим всё в порядке. Хотелось бы в ней же выводить и предупреждение о том что форма уже отправлена. Вашим вариантом окно с предупреждением как и в моём варианте открывается в другом окне.

#4 Контактная форма 17 февраля 2025 в 21:03
Все привет. Делаю форму в модальном окне.  Форму получаю так: <?Litemir есть же в компонентах свой генератор форм встроенный
TOPg

Я пишу виджет в нем цепляю на кнопку модальное окно, получаю с конструктора форм все формы и выбераю какую именно мне использовать. Всё работает, а вот с предупреждением не могу разобраться покамест. 

#1 Контактная форма 17 февраля 2025 в 20:25

Все привет. Делаю форму в модальном окне. 

Форму получаю так:

  1. <?php
  2. // Подключаем контроллер форм
  3. $forms_controller = cmsCore::getController('forms');
  4.  
  5. // Получаем ID формы из настроек виджета
  6. $form_id = !empty($widget->options['litbanner_form_id']) ? $widget->options['litbanner_form_id'] : null;
  7.  
  8. if ($form_id) {
  9. // Получаем данные формы
  10. list($form, $form_data) = $forms_controller->getFormData($form_id);
  11.  
  12. if ($form && $form_data) { ?>
  13. <div class="position-relative icms-forms__wrap">
  14. <?php if (!empty($form_data['title']) && !empty($form_data['options']['show_title'])) { ?>
  15. <h4><?php echo htmlspecialchars($form_data['title']); ?></h4>
  16. <?php } ?>
  17. <?php if (!empty($form_data['description'])) { ?>
  18. <p><?php echo nl2br(htmlspecialchars($form_data['description'])); ?></p>
  19. <?php } ?>
  20. <?php
  21. // Рендер формы
  22. $this->renderForm($form, [], $form_data['params'], false);
  23. ?>
  24. </div>
  25. <?php } else {
  26. echo "<p>Форма не найдена.</p>";
  27. }
  28. } else {
  29. echo "<p>Идентификатор формы не задан.</p>";
  30. }
  31. ?>
  32.  

С этим всё хорошо. 

Хочу разместить ошибку об отправке если повторная отправка в своё модальное окно.

Изображение

Подскажите как реализовать или куда копать?

#5 Модуль memcached не найден 6 февраля 2025 в 10:56
Тогда не знаю. Но это  скорее всего надо поддержку хостинга  пытать.
Pro AV

Это было первым, что я сделал)

Изображение

#6 Модуль memcached не найден 6 февраля 2025 в 10:48
Всем привет. Подскажите почему Модуль memcached не найден при его включении. Может нужно что то дополнительно устанавливать?
Pro AV

На хостинге всё включено. 

Изображение

#1 Модуль memcached не найден 6 февраля 2025 в 10:26

Всем привет. Подскажите почему Модуль memcached не найден при его включении. Может нужно что то дополнительно устанавливать?

Изображение

#7 Слайдер 21 января 2025 в 16:28

 Loadырь, Вы это делали в виджете?

Изображение

Если да, то можете подсказать в двух словах как?

#8 Слайдер 20 января 2025 в 19:33
 Litemir, уберите options в имени поля изображение.
Zau4man

Убирал, не помогло.

#1 Слайдер 20 января 2025 в 18:58

Всем привет. 

Делаю для себя слайдер, состоящий из нескольких слайдов. Не получается сохраниться делаю вот так:

В опциях:

                    new fieldFieldsgroup('options:slide', array(
                        'title' => 'Слайды',
                        'childs' => [
                            new fieldString('title', array(
                                'title' => 'Заголовок',
                                'css_class' => 'col-md-6 bg-success text-light p-2'
                            )),
                            new fieldString('icon', array(
                                'title' => 'Иконка',
                                'hint' => '<span class = «text-light»>В формете <strong>solid:map-marker-alt</strong></span>',
                                'css_class' => 'col-md-6 bg-success text-light p-2'
                            )),
                            new fieldImage('options:slide_img', array(
                                'title' => 'Логотип',
                                'hint' => 'Укажите логотип который будет отображаться на ПК',
                                'options' => [
                                    'sizes' => ['original']
                                ],
                                'css_class' => 'col-md-12 bg-success text-light p-2'
                            )),
                            new fieldHtml('content', array(
                                'title' => 'Контент слайда',
                                'options' => [
                                    'editor' => 'ace'
                                ],
                                'css_class' => 'col-md-12 bg-success text-light p-2'
                            ))
                        ],
                        'visible_depend' => [
                            'options:modal_content' => [
                                'show' => ['slider']
                            ]
                        ]
                    )),

Если не указывать Картинку тогда всё сохраняет и выводит слайды. Подскажите что не так делаю.

#9 Выбор стандартных иконок из темы в своём виджете 4 января 2025 в 17:08

Посмотрите как реализовано в этом шаблоне instantcms.ru/addons/lte.html уже не помню, но долго заморачивался.

В виджете Статистика 

My-InstantCMS.Ru

У Вас не много не то. Вы сделали отдельным вывод шаблона и как я понял только к одному элементу.

А я хочу сделать, например: Поле телефон и к нему иконка, другое поле почта и к нему иконка.

#1 Выбор стандартных иконок из темы в своём виджете 4 января 2025 в 12:31

Всех с наступившим НГ!. 

Подскажите пожалуйста как сделать выбор стандартной иконки в своём виджете?

Делаю так, но путь не получаю. 

  1. new fieldString('icon_top_btn', array(
  2. 'title' => 'Иконка',
  3. 'prefix' => '<a href="#" class="icms-icon-select" data-href="'.href_to('admin', 'settings', ['theme', cmsConfig::get('template'), 'icon_list']).'"><span>'.(defined('LANG_CP_ICON_SELECT') ? LANG_CP_ICON_SELECT : '').'</span></a>',
  4.  
  5. )),

Выводит выбор иконки, но путь у неё /admin/widgets#

Изображение

🍪Мы используем файлы cookie для работы сайта. Читать подробнее.