L

Litemir

+1
Репутация
14
Рейтинг
#1 Получение записей 8 апреля 2025 в 20:08

Всем привет. Подскажите как получить записи выбранного типа контента. Или всем списком или в виде поиска. Начинаем указывать название записи и появляются записи, выбираем именно ту которую нужно и сохраняем её id. Это касается в компоненте в backend.

Категории получаю так.

  1. new fieldList('ctype_id', array(
  2. 'title' => 'Тип категории',
  3. 'default' => 1,
  4. 'generator' => function($ctype) use ($content_model) {
  5. $tree = $content_model->getContentTypes();
  6. $items = [];
  7. if ($tree) {
  8. foreach ($tree as $item) {
  9. $items[$item['id']] = $item['title'];
  10. }
  11. }
  12. return $items;
  13. },
  14. 'visible_depend' => array('tip_ctypes' => array('hide' => array('content', '')))
  15. )),
  16.  
  17. new fieldList('category_id', array(
  18. 'title' => 'Под категории',
  19. 'parent' => array(
  20. 'list' => 'ctype_id',
  21. 'url' => href_to('content', 'widget_cats_ajax')
  22. ),
  23. 'generator' => function($item, $request) use ($content_model) {
  24. $list = ['' => ''];
  25. $ctype_id = is_array($item) ? array_value_recursive('ctype_id', $item) : false;
  26. if (!$ctype_id && $request) {
  27. $ctype_id = $request->get('ctype_id', 0);
  28. }
  29. if (!$ctype_id) {
  30. return $list;
  31. }
  32. $ctype = $content_model->getContentType($ctype_id);
  33. if (!$ctype) {
  34. return $list;
  35. }
  36. $cats = $content_model->getCategoriesTree($ctype['name']);
  37. if ($cats) {
  38. foreach ($cats as $cat) {
  39. if ($cat['ns_level'] > 1) {
  40. $cat['title'] = str_repeat('-', $cat['ns_level']) . ' ' . $cat['title'];
  41. }
  42. $list[$cat['id']] = $cat['title'];
  43. }
  44. }
  45. return $list;
  46. },
  47. 'visible_depend' => array('tip_ctypes' => array('hide' => array('content', '')))
  48. )),
#2 [ЕСТЬ РЕШЕНИЕ] Получение ajax запроса 5 апреля 2025 в 12:08

Всем спасибо. Вопрос решён. Была моя не внимательность.

#3 [ЕСТЬ РЕШЕНИЕ] Получение ajax запроса 5 апреля 2025 в 11:32
при прямом обращении по полученному URL, например: Litemir Думаю, так и должно быть. Работает if (!$this->request->isAjax()) { cmsCore::error404(); }
IamB

Это понятно. Как получить данные, вот вопрос.

#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‑эндпоинта и правильно получать данные по произвольному диапазону дат.

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

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

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

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

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

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

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

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

#9 Контактная форма 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.  

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

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

Изображение

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

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

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

Изображение

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

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

Изображение

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

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

Изображение

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

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

Изображение

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

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

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

Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.