Как получить доступ к функциям контроллера/модели joomla извне?

У меня есть сайт, созданный в Joomla и Jomsocial.

Я создаю веб-сервисы/API в Joomla для доступа к моему мобильному приложению.

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

Могу ли я получить доступ к функциям (задачам), определенным внутри controller/model externally в моих веб-сервисах/API? Как?

Примечание. Я использую phonegap для разработки мобильных приложений.


person Amol Chakane    schedule 28.01.2013    source источник
comment
Как это сделать??? КАК?? у меня такая же проблема вот в чем.   -  person AndyBoy    schedule 07.02.2014


Ответы (2)


Вы не можете напрямую вызывать определенную функцию в модели или представлении.

Но любые публичные методы без параметров в контроллере будут вызываться с

yoursite/index.php?option=com_yourcomponent&task=yourpublicmethod.

Это вызовет указанный метод и отобразит его в шаблоне Joomla со всеми соответствующими модулями и т. д.

Если вам нужен только вывод основного компонента, добавьте к вызову

&tmpl=component

который отображается через component.php шаблона вместо index.php, обычно первый загружает только внешние ресурсы (css и js) и вывод основного компонента.

В противном случае, если функция возвращает код (либо html xml, либо json), вы можете вызвать его с помощью

&format=raw

который возвращает только голый вывод вашего общедоступного метода. Это также может быть достигнуто на уровне компонентов с помощью инструкции

exit;

в конце реализации вашего публичного метода

person Riccardo Zorn    schedule 29.01.2013
comment
Попробовал предложенный вами способ. Но это не работает. Могу ли я получить доступ к встроенным задачам Jomsocial, включив этот конкретный файл в свой API? - person Amol Chakane; 29.01.2013
comment
скорее всего, я сделал это в модуле Joomla, вам просто нужно загрузить jomsocial (просто скопируйте один из модулей в комплекте, чтобы увидеть, как!) - person Riccardo Zorn; 31.01.2013

Joomla CMS реализует шаблон MVC (модуль-представление-управление) с небольшой разницей в представлении. Он реализует представление модели представления.

В Joomla все является компонентом. Каждый компонент может иметь свои модели вывода, представления, контроллеры, таблицы базы данных и т. д.

Простой пример того, как это работает: вы создаете компонент, скажем, компонент «helloworld», и этот компонент находится в JROOT/administrator/components/com_helloworld для панели администратора компонента и JROOT/components/com_helloworld для внешнего интерфейса.

В этих каталогах у вас есть один файл с именем com_helloworld.php, который запускает весь MVC для этого запроса.

Несмотря на то, что Joomla реализует шаблон Front controller, вы можете создать свой компонент так, как вам больше подходит (с фронтальным контроллером или без него).

Когда вы запрашиваете http://domainname.com/index.php?option=com_helloworld, вызывается файл com_helloworld, о котором я упоминал, и все внутри выполняется.

Для получения дополнительной информации см. эту очень полезную статью о разработке компонентов Joomla CMS 2.5:

http://docs.joomla.org/Developing_a_Model-View-Controller_Component/2.5/Introduction

Надеюсь это поможет :)

person Stoyan Dimov    schedule 28.01.2013
comment
Я разрабатывал компоненты в joomla. Что касается вашего примера, скажем, компонент com_helloworld имеет контроллер и модель, в которой есть некоторая задача с именем sayhello(). Я хочу вызвать эту задачу sayhello в своем веб-сервисе/API. Является ли это возможным? - person Amol Chakane; 28.01.2013
comment
Да, это можно сделать с помощью: domainname.com/ Где имя_контроллера имя контроллера в компоненте и имя метода — это имя метода внутри контроллера. - person Stoyan Dimov; 28.01.2013
comment
Хорошо, я попробую. Но могу ли я вызвать эту задачу с помощью jQuery.ajax? - person Amol Chakane; 29.01.2013
comment
Я использую приложение Advanced REST Client в браузере Chrome для вызова этой задачи. Но это не работает. Я использую phonegap для разработки мобильного приложения. Итак, я хочу вызвать эту задачу с помощью jQuery.ajax. Любые идеи? - person Amol Chakane; 29.01.2013
comment
Да можно, нужно создать отдельный метод и поверх него отключить верстку (как в большинстве фреймворков). Будьте осторожны, потому что Joomla по умолчанию использует Motools. Итак, вам нужен JQuery.noConflict(). - person Stoyan Dimov; 29.01.2013
comment
Что ты сделал? А как вы узнали, что он не работает? - person Stoyan Dimov; 29.01.2013
comment
Я пробовал использовать приведенный ниже URL-адрес в расширенном клиентском приложении REST Google Chrome mydomain.com/? option=com_community&task=photos.removelbum. Также переданы необходимые параметры. Я не понял, где мне нужно создать отдельный метод? в самом контроллере/модели? Потому что я создаю REST API, расширяя класс APIResource в joomla. - person Amol Chakane; 30.01.2013
comment
Проблема в том, что вам нужно зарегистрировать компонент в Joomla. Вы можете сделать это через запись в БД, но это сложно. Основываясь на вашем последнем комментарии, я создал небольшое сообщество компонентов с фотографиями контроллера, которые будут выполняться по указанной вами ссылке. При установке этого архива он будет прописан соответствующим образом. Если вы дадите мне свой адрес электронной почты, я вышлю вам компонент, включая объяснение, как его установить и отредактировать контроллер. - person Stoyan Dimov; 30.01.2013