Как использовать Jquery AJAX в Joomla Components? - PullRequest
4 голосов
/ 01 июля 2010

я занимаюсь разработкой сайта в Joomla, тем временем я застрял в проблеме, пожалуйста, помогите мне в решении проблемы ниже

здесь моя структура папок для компонента

htdocs/Joomla/administrator/component/com_test/test.php,controller.php
                                              models/test.php
                                              controllers/test.php
                                              views/test/view.html.php
                                              view/test/tmpl/default.php

сейчас в view.html.php iсоздал форму, в которой я использую jquery ajax-код для проверки доступности usernmae

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

вот мой код, написанный на test / view.html.php

<script type="text/javascript">
 jQuery(document).ready(function(){
 jQuery("#username").change(function () {
    var usr = jQuery("#username").val();
    if (usr.length >= 2) {
     jQuery("#status").html('<img src="loader.gif" align="absmiddle">&nbsp;Checking availability...');
     jQuery.ajax({
         type: "POST",
         url: "index.php?option=com_test&view=check_user",
         data: "username=" + usr,
         success: function (msg) {
         jQuery("#status").ajaxComplete(function (event, request, settings) {
         if (msg == 'OK') {
            jQuery("#username").removeClass('object_error'); // if necessary
                jQuery("#username").addClass("object_ok");
         }
         else {
               jQuery("#username").removeClass('object_ok'); // if necessary
               jQuery("#username").addClass("object_error");
               jQuery(this).html(msg);
         }
       });
      }
    });
  }    
});

<script>

<form action="" method="post" name="addUserForm" id="addUserForm" > 
   <table width="100%" border="0" cellpadding="4" cellspacing="2">
     <tr>
    <th >User Name :</th>
        <td ><input type="text" name="username" id="username" size="50">
             <span id="status"></span>  
        </td>
     </tr>      
   </table>
</form>

Я создал структуру папок ниже для вышеуказанного действия, пожалуйста, скажите мне, где я могу ошибиться

view/check_user/view.html.php
views/check_user/tmpl/default.php

код в check_user / view.html.php

<?php

// no direct access
defined('_JEXEC') or die('Restricted access');

jimport( 'joomla.application.component.view');

/**
 * HTML View class for the advertising component
 */
class TestViewCheck_user extends JView 
{
   /**
    * Default display function
    */  
    function display($tpl = null) 
    {
        $testController = new TestController();
        // Make an object of Main Model class contains Main functions
        $testModel = $testController->getModel('test');
        $userName  = JRequest::getVar('username');
        parent::display($tpl);
        }
 }
?>

но когда я запускаю этот код ... почему файл http://localhost/Joomla/includes/js/joomla.javascript.js запускается бесконечное число раз.и, наконец, выдает 4 ошибки

что теперь мне нужно изменить / добавить еще ???пожалуйста, просто направьте меня ...

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

Большое спасибо

Ответы [ 8 ]

4 голосов
/ 06 ноября 2010

Я нашел решение. Вы должны запретить Joomla прикреплять шаблоны и модули и ... к вашим выходным данным ajax. для этого необходимо добавить этот код после отображения ваших данных

//after $this->display($tpl);

global $mainframe;

$mainframe->close();
3 голосов
/ 06 июля 2010

Весь код переднего конца должен быть в вашем tmpl, поэтому ваши Ajax-файлы тоже должны быть там. Посмотрите этот урок о том, как сделать компоненты MVC для Joomla http://www.joomladevuser.com/tutorials/components (deadlink).

2 голосов
/ 07 мая 2012

В Joomla 1.7 и выше вы можете закрыть его вот так

$app = &JFactory::getApplication();
$app->close();
1 голос
/ 22 апреля 2013

Это верно, Joomla будет загружать модули, компоненты, whatewer. Ваш шаблон по умолчанию и ядро ​​Joomla требуют ... Измените это поведение, используя «& format = raw» (это заставит Joomla включать «ничто» в Joomla) или"& template = your_own_template_for_ajax" (это заставит Joomla включить ваше собственное "ничто").

Я не знал о "& format = raw", поэтому я использую свой собственный пустой шаблон для ajax.Пустой шаблон имеет смысл для меня - я могу настроить его так, как я хочу (например, включить что-то по умолчанию).«& format = raw» - хороший вариант, но не единственный.Решение зависит от того, что вы хотите сделать / получить по умолчанию.

Как сделать такой шаблон ajax во внешнем интерфейсе?

Необходимо создать новый каталог (например,"ajax") внутри каталога front-end \ templates \.Затем поместите в него 3 файла:

index.php :

<jdoc:include type="component" />

templateDetails.xml :

...XML content.. 

Инструкции по правильному созданию templateDetails.xml можно найти здесь:http://docs.joomla.org/Creating_a_basic_templateDetails.xml_file

index.php :

<!DOCTYPE html><title></title>

Это все, что вам нужно для внешнего интерфейса.

Проверьте это, позвонив по телефонувот так: http://www.example.com/index.php?template=ajax

Это 100% рабочее решение для внешнего интерфейса.Back-end не проверен мной.Я считаю, что вы должны создать отдельный шаблон для бэк-энда.Или как-нибудь достучаться до внешнего шаблона (в настоящее время понятия не имею, как это сделать) ...

0 голосов
/ 15 января 2015

Ничто не работает для меня из всех приведенных выше решений (Joomla 3.1).Поэтому я использовал это решение.Добавьте tmpl = компонент в URL.

index.php?option=com_photos&view=intphoto&id=1&tmpl=component
0 голосов
/ 15 июля 2012

Вы можете использовать:

url: "index.php?option=com_test&view=check_user&<strong>format=raw</strong>",

, что предотвратит загрузку всего шаблона, но загрузит только вывод компонента, который вы действительно хотите при вызове функций ajax.

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

0 голосов
/ 19 мая 2012

используйте format=raw в URL-адресе ajax, так как это будет просто показывать вывод без какого-либо шаблона.

0 голосов
/ 27 октября 2010

1 - скопируйте основной index.php (joomlaRoot/index.php) Joomla и переименуйте его в любое имя (например: joomlaRoot/ajax.php).

2 - отключить метод рендеринга ($mainframe->render();)

3 - скопируйте этот код в строку метода рендеринга:

/***/
$document =& JFactory::getDocument();
$content=$document->getBuffer();
foreach($content as $var){
    foreach($var as $var2){
        echo $var2;
    }
}

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