Обновить div в представлении Joomla 3.x

Для моего компонента я сделал страницу проверки перед полетом, которая выполняет много проверок, но я не хочу, чтобы проверки выполнялись в начале, а иногда мне просто хочется, чтобы проверка выполнялась.

Так что если я использую ajax, но это не решение, которое я теряю, все мои классы из среды Joomla, есть ли лучший способ это одобрить?

мой tmpl/default.php выглядит так:

<div id="j-sidebar-container" class="span2">
    <?php echo $this->sidebar; ?>
    <button onClick="xmlserverinfo()">XMLserver check</button>
</div>
<div id="j-main-container" class="span10">
    <?php

        // some php stuff to get the variables

    ?>
    <div id="preflight">
        <table>
            <tbody>
                <tr>
                    <td>
                        <table>
                            <tbody>
                                <tr>
                                    <td colspan="3">XML server status</td>
                                </tr>
                                <tr>
                                    <td>Naam</td>
                                    <td>Url</td>

                                    <?php if ($proxy == '1')
                                        {
                                            echo "<td>via proxy</td>";
                                        }?>
                                        <td>Status</td>
                                </tr>
                                <div id="xmlservers"></div>
                            </tbody>
<snip>

Это Java-скрипт, который я использую, чтобы обновить мой div, включая ajax.js.

function xmlserverinfo() 
{
    var xmlhttp;
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
        xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState==4 && xmlhttp.status==200)
        {
            document.getElementById("xmlservers").innerHTML=xmlhttp.responseText;
        }
    }
    xmlhttp.open("GET","components/com_hccxmlbeheer/views/preflightcheck/tmpl/xmlservers.php",true);
    xmlhttp.send();
}

Это xmlservers.php, который создает мою таблицу, и это то, что я хочу в моем div:

<?php
    /**
        * @package     Joomla.Administrator
        * @subpackage  com_hccxmlbeheer
        *
        * @copyright   Copyright (C) 2005 - 2014 Open Source Matters, Inc. All rights reserved.
        * @license     GNU General Public License version 2 or later; see LICENSE.txt
    */

    // No direct access to this file
    defined('_JEXEC') or die;
    // php stuff to get variables 



foreach ($xmlservers as $xmlserver)
   {
    echo "<tr>";
    echo "<td>$xmlserver[0]</td>";
    echo "<td>$xmlserver[1]</td>";
    if ($proxy == '1')
    {
     echo "<td>ja</td>";
    }
    $echotest = HCC::echo_test($xmlserver[1], $pluginnaam, $plugincat, '0');
    if ($echotest['Status'] == 'TRUE')
    {
     echo "<td bgcolor=\"green\">Oke</td>";
    }
    else
    {
      echo "<td bgcolor=\"red\">mislukt</td>";
    }
     echo "</tr>";
    }
    if ($proxy == '1')
    {
     foreach ($xmlservers as $xmlserver)
        {
         echo "<tr>";
         echo "<td>$xmlserver[0]</td>";
         echo "<td>$xmlserver[1]</td>";
         if ($proxy == '1')
            {
                echo "<td>nee</td>";
            }
            $echotest = HCC::echo_test($xmlserver[1], $pluginnaam, $plugincat, '1');
            if ($echotest['Status'] == 'TRUE')
            {
             echo "<td>Oke</td>";
            }
            else
            {
             echo "<td>mislukt</td>";
            }
            echo "</tr>";
            }
            }
        ?>

Что я делаю неправильно?

1 ответ

Решение

Мой подход был сложным, я переключился на использование jquery и поместил свое обновление не в поле зрения, а в задачу в controller.php, используя опцию format=raw, и я получаю чистые строки таблицы обратно.

В заголовке default.php я добавил:

$doc = JFactory::getDocument();
JHtml::_('jquery.framework');
$doc->addScriptDeclaration
('
    jQuery(document).ready(function()
    {
        jQuery("#XMLserversbutton").click(function()
        {
            jQuery("#XMLservers").load("index.php?option=com_hccxmlbeheer&task=XMLservers&format=raw");
        });
    });
')

Моя кнопка выглядит так:

<button id="XMLserversbutton">XMLserver check</button>

И мой div выглядит так:

<div id="XMLservers"></div>

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

Другие вопросы по тегам