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

maxakagaret

  • Новичок
  • 9
  • 0 / 0
Приветствую собратьев разработчиков.
На днях решил попробовать свои силы в создании собственного простенького модуля - слайдер статей. Все элементарно, модуль берет все статьи из заданной категории и выводит по 3, с пагинаторами сверху и снизу. Javascript-ом производится переключение страниц. Что-то вроде LOF article slider. Проблем не возникло.
Потом я решил использовать AJAX. При клике на пагинаторе посылается ajax-запрос на сервер, берутся только нужные статьи, например, в количестве 3 штук. И в итоге отображаются на странице. Все делается с помощью Mootools.
Код javascript:
Спойлер
[свернуть]

Код обработчика запроса:
Спойлер
[свернуть]
Файл reqest.php читает параметры из $_POST, формирует запрос к БД, получает статьи, формирует вывод.
Если вначале файла имеется "defined('_JEXEC') or die('Restricted access');"
то получаю сообщение "Restricted access". Без нее "Class 'JFactory' not found".
Был бы признателен опытным разработчикам, если бы они ткнули меня носом в мою глупую ошибку неправильного использования AJAX.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Цитировать
Если вначале файла имеется "defined('_JEXEC') or die('Restricted access');"
то получаю сообщение "Restricted access". Без нее "Class 'JFactory' not found".
что есть естественно. Просто к файлу обратиться не достаточно, т.к. фреймворк сам по себе в нем не подключиться)
Нужно
либо подключать фреймворк в этом файле
либо делать через компонент
либо делать через компонент com_ajax, если используется 3.2

Документация по всему можно найти в интернете или на форуме

А вообще оригинальный способ использования пагинации)
Гораздо эффективней и производительней будет использования оператора LIMIT в мускуле
« Последнее редактирование: 25.02.2014, 13:25:42 от SmokerMan »
*

maxakagaret

  • Новичок
  • 9
  • 0 / 0
либо подключать фреймворк в этом файле
либо делать через компонент
либо делать через компонент com_ajax, если используется 3.2

Первое предложение, на мой взгляд, оптимальное, именно им и воспользовался, спасибо за подсказку.
Писать компонент для чего-то с функциональностью на уровне модуля на мой взгляд не практично, как и пользоваться встроенной компонентой.

А вообще оригинальный способ использования пагинации)
Гораздо эффективней и производительней будет использования оператора LIMIT в мускуле

Как раз в обработчике ajax-запроса мускул-запрос формируется с использованием LIMIT X, Y

Как ни странно, но способ родился из практических нужд. Точнее из требований ББ (цитата "И чтобы вот тут вот статьи можно было переключать типа как Flash ну знаешь там с таким затуханием а потом снова так растухает. И чтоб и сверху и снизу можно было щелкать" (оригинальная орфография и пунктуация сохранены))  :dry:
Вот последнее то как раз и вынудило самому браться за код, ибо в готовых модулях такого способа навигации найти не смог, а переписывать чужой джава код, переработанный компрессором не захотелось.
А потом пришла идея с аяксом.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Цитировать
Писать компонент для чего-то с функциональностью на уровне модуля на мой взгляд не практично, как и пользоваться встроенной компонентой.
Ну да, а фреймворк подключать офигенно практично ;) Имхо, встроенный компонент как раз таки самый практичный вариант. А если завтра один из файлов фреймворка перенесут, что делать будете?
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Как раз в обработчике ajax-запроса мускул-запрос формируется с использованием LIMIT X, Y
возможно я слепой, но где в этом запросе LIMIT?
        $requestQuery = "SELECT * FROM #__content WHERE state=1 AND catid='".$catID."' ORDER BY created ASC";
        $db->setQuery($requestQuery);
        $requestResult = $db->loadObjectList();
*

maxakagaret

  • Новичок
  • 9
  • 0 / 0
Ну да, а фреймворк подключать офигенно практично ;) Имхо, встроенный компонент как раз таки самый практичный вариант. А если завтра один из файлов фреймворка перенесут, что делать будете?
Хороший вопрос. Подумаю над этим. Тем более что столкнулся с подобной ситуацией, используя пакет roksproket. При переходе на J! 3.2.2 c 3.2.1 (как раз в день выхода 3.2.2) получил веселое падение всего сайта. Тыкнул на кнопку обновления не подумав =)
Кстати, должен заметить, что столкнулся с некоторыми трудностями в использовании com_ajax - в позиции модуля отображается страница сайта с пустым модулем. Конечно, скорее всего сделал что-то неправильно, хотя следовал инструкции.
возможно я слепой, но где в этом запросе LIMIT?
Нет, вы не слепой. Просто на тот момент я нацелен был именно на реализацию функциональности аякса, потому просто скопипастил "классический" запрос. Кстати, столкнулся со странной проблемой - мне не удалось сформировать запрос на получения конкретных полей, если среди них присутствует fulltext статьи. Текст ошибки говорит, что в мускул запросе ошибка после fulltext. Убираю fulltext из запроса - все нормально, пишу звездочку - тоже все нормально, при этом в полученном массиве [fulltext] имеется.
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Цитировать
Кстати, должен заметить, что столкнулся с некоторыми трудностями в использовании com_ajax - в позиции модуля отображается страница сайта с пустым модулем. Конечно, скорее всего сделал что-то неправильно, хотя следовал инструкции.
http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/ajax-v-joomla-3-2
*

maxakagaret

  • Новичок
  • 9
  • 0 / 0
http://ссылка вырезана, так как домен распространяет вирусы/blog/joomla/ajax-v-joomla-3-2
Вот именно этим и пользовался. И скачивал пример, и делал все как там, и получал именно тот результат, о котором писал раньше.
Кстати, подумал добавить поддержку отображения материалов из К2 и задался вопросом - а есть ли для К2 аналогия функции
ContentHelperRoute::getArticleRoute($requestResult[$i]->id, $requestResult[$i]->catid)?

*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
Вопрос по К2 не в тему.

Цитировать
в позиции модуля отображается страница сайта с пустым модулем.
Эмм... А инфа точно приходит с запроса? Если вывести результат запроса через print_r() в хелпере, модуль все равно пустой?
*

maxakagaret

  • Новичок
  • 9
  • 0 / 0
Эмм... А инфа точно приходит с запроса? Если вывести результат запроса через print_r() в хелпере, модуль все равно пустой?
Нашел ошибку - неправильно класс в хелпере назвал.
Можно вернуться к обсуждению практичности подключения фрэймворка. Но ведь и компонент завтра могут удалить, разве нет? Или изменить специфику его использования.
« Последнее редактирование: 26.02.2014, 17:29:13 от maxakagaret »
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

maxakagaret

  • Новичок
  • 9
  • 0 / 0
Re: Вопрос об использовании AJAX в модуле
« Ответ #11 : 26.02.2014, 18:05:47 »
Могут, но это теперь уже маловероятно.
А если смотреть с точки зрения нагрузки на сервер? Какой способ более ресурсоемкий - подгрузка фреймворка или использование компоненты?
*

b2z

  • Глобальный модератор
  • 7290
  • 778 / 0
  • Разраблю понемногу
*

maxakagaret

  • Новичок
  • 9
  • 0 / 0
Re: Вопрос об использовании AJAX в модуле
« Ответ #13 : 26.02.2014, 18:16:17 »
Большое спасибо за все ответы.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Подключение сторонних библиотек в модуле J4

Автор denism300

Ответов: 6
Просмотров: 355
Последний ответ 30.12.2022, 19:58:09
от denism300
Вопрос на засыпку

Автор Aleks.Denezh

Ответов: 5
Просмотров: 683
Последний ответ 10.03.2019, 23:15:22
от Aleks.Denezh
Рекурсия в модуле

Автор alpha_ru

Ответов: 19
Просмотров: 1416
Последний ответ 20.07.2017, 19:25:11
от passer
Дополнительное поле в модуле

Автор paskal

Ответов: 21
Просмотров: 2259
Последний ответ 27.08.2016, 00:59:55
от robert
СЕСИЯ при AJAX запросе к php файлу

Автор avantyrist

Ответов: 15
Просмотров: 2649
Последний ответ 20.12.2015, 14:13:43
от robert