С Joomla, как я могу получить в вызов AJAX только вывод, сгенерированный вызываемой функцией php? - PullRequest
1 голос
/ 17 сентября 2011

Я создаю компонент Joomla.В представлении внешнего интерфейса у меня есть форма с 2 выпадающими меню, выбирая вариант из 1-го, параметры 2-го должны измениться соответственно.Для этого я использую AJAX.

Я могу отправить запрос в функцию php, расположенную в файле controller.php, и функция php генерирует правильный вывод.

Проблема в том, чтоПлатформа Joomla поместила этот вывод на страницу со всеми метатегами, заголовком, шаблоном и т. Д., Как это должно быть показано в браузере, прежде чем вернуть его в AJAX.Вы можете увидеть скриншот с firebug того, что я получаю.Элемент div, в который я хочу поместить раскрывающееся меню: -div id = "select-formatocarta" - вы можете видеть, что перед "select" у меня есть много других нежелательных вещей.http://img695.imageshack.us/img695/7725/selectp.jpg

Результатом является то, что внутри div, где я хочу разместить только меню «select», сгенерированное функцией php, я получаю целую страницу.Даже если я могу показать единственное меню, передающее параметр tmpl = component из запроса AJAX, высота div такая, как вся страница внутри него.

Как получить выходные данные единственной функции php без шаблона Joomla?Если это невозможно, как я могу извлечь единственное выпадающее меню из responseText?Я могу использовать только javascript, у меня нет доступных прототипов или jquery.

Ответы [ 3 ]

2 голосов
/ 22 сентября 2011

Вам необходимо создать субконтроллер в вашей папке / components / com_yourcomponent / controllers / с именем ajax.raw.php

Затем вы можете отправлять ему запросы ajax следующим образом:

index.php? option = com_name & task = ajax.function_name & format = raw & var = value

  • «function_name» выполнит функцию с тем же именем внутри контроллера.
  • Формат = raw сообщаетjoomla не включать шаблон
  • Значение var = представляет любые параметры, которые вы хотите отправить, и может быть получено с помощью JRequest :: getVar ()
2 голосов
/ 19 сентября 2011

Выход.

Таким образом, Joomla сначала оценит код вашего компонента, а затем добавит верхний / нижний колонтитул через систему шаблонов (именно поэтому компоненты динамически могут добавлять строки заголовка для CSS и т. Д.). Так что все, что вам нужно сделать, это немедленно выйти, не давая Joomla возможности добавить колонтитулы.

Таким образом, в вашем коде контроллера у вас будет что-то вроде:

<?php

function ajax_foo()
{
    ...code here...
    $view->display();
    jexit();
}

Встроенная функция PHP exit() также будет работать нормально, но предпочтительным является jexit().

0 голосов
/ 22 сентября 2011

Вам не нужно создавать новый контроллер для этого.Вы можете просто использовать свой существующий контроллер и добавить & format = raw к URL.Это отключает весь вывод Joomla.Создание специального контроллера для вызова ajax - это просто то, что может быть хорошей практикой, если ваш компонент большой и его сложно поддерживать иначе.

Использование jexit ();просто подавить вывод абсолютно плохо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...