im развивающийся сайт в 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
я создал форму, в которой im с использованием 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"> 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 ошибки
теперь, что я должен изменить / добавить больше ??? просто позвоните мне ….
обратитесь к любой полезной ссылке, которая научит создавать компонент шаг за шагом … это будет очень полезно для меня
большое спасибо
Весь код переднего конца должен находиться в вашем tmpl, поэтому ваш материал Ajax также должен быть там. В этом руководстве рассказывается, как сделать компоненты MVC для Joomla http://www.joomladevuser.com/tutorials/components .
Я нашел решение. Вы должны запретить Joomla прикрепить шаблоны и модули и … к вашим выходным данным ajax. для этого вы должны добавить этот код после отображения ваших данных
//after $this->display($tpl); global $mainframe; $mainframe->close();
В joomla 1.7 и выше вы можете закрыть его так
$app = &JFactory::getApplication(); $app->close();
Правильно, 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 не проверен мной. Я считаю, что вам придется создать отдельный шаблон для back-end. Или каким-то образом дойти до интерфейсного шаблона (в настоящее время нет идей о том, как) …
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; } } /**/
Вы можете использовать:
url: "index.php?option=com_test&view=check_user& format=raw ",
что предотвратит загрузку всего шаблона, но будет загружать только компонентный вывод, который вы действительно хотите, когда вызываете свои функции ajax.
Кроме того, вы можете проверить index2.php
(вместо index.php
), который был разработан таким же образом, чтобы обеспечить простой вывод без рендеринга всего шаблона.
используйте format=raw
в URL-адресе ajax, так как это просто покажет результат без какого-либо шаблона.
Ничто не работало для меня из всех приведенных выше решений (Joomla 3.1). Поэтому я использовал это решение. Добавьте tmpl = component в url.
index.php?option=com_photos&view=intphoto&id=1&tmpl=component