UMIhelp

Разработка сайта на UMI.CMS => Макросы UMI.CMS => Тема начата: fantom103 от 15 Июня 2013, 20:42:08

Название: Макрос отправляемый запрос на сторонний сервер
Отправлено: fantom103 от 15 Июня 2013, 20:42:08
Здравствуйте уважаемые гуру юми цмс! У меня такой вопрос:

Есть форма которая по лицевому счету отправляет на сервер биллинга запрос и возвращает баланс:
<form name="lic" method="post" action="/stat.php">
<table align="center" CELLSPACING="3">
    <tr>
<td width="50%">Введите номер лицевого счёта </td>
<td width="50%" align="center">
        <input name="lic" type="text" size="46">
</td>
    </tr>
    <tr>
<td>&nbsp;</td>
<td align="center"><font size="0" color="grey">должен состоять из цифр и содержать не более 8 символов</font></td>
    </tr>
</table>


<div align="center"><br>
    <input type="submit" name="submit" value="Отправить">
  </div>
</form>

И есть скрипт каторый это обрабатывает:

<?php
    if ($_POST['submit']) {
if (preg_match('/^\d{1,8}+$/',$_POST['lic']))
{
unset ($lines);
$lines=file("http://mysait.ru/cgi-bin/Script.cgi?ACCOUNT=" . htmlspecialchars($_POST['lic']));

if ($lines[0]==1) {
echo "<p class=\"ballance_fail\">" . $lines[1] . "</p><br>";
} else {
$lines[1]=preg_replace('/\n/','',$lines[1]);
echo "<div id=\"bal\"><p class=\"ballance_result\">Состояние лицевого счета "."<b>" . htmlspecialchars($_POST['lic']) . "</b>". " на " . preg_replace("/\n/","",$lines[2] . "<br>");
echo "составляет: ";
echo preg_match('/^-/',$lines[1])?"<b><font color=\"red\">".$lines[1]."</font></b>":$lines[1];
echo " руб.</p></div>";
}
} else {
echo "<div id=\"bal\"><p class=\"ballance_fail\"><font color=\"red\" size=\"4\">В поле ввода можно вводить только цифры!</font><br>";
echo "Запрос не был отправлен!<br>Пожалуйста введите номер лицевого счёта и отправьте запрос снова.</p></div>";
}
    }      
?>

Знаю он не совершенен и требует доработки...

Так вот этот скрипт висел на старом php сайте, теперь я этот сайт переношу на umi-cms и так как в tpl-шаблонизаторе php скрипты не обрабатываются, нужно сделать кастомный макрос. И я сделал так:
в вайле classes/modules/custom.php
        public function balance() {
            if (getRequest('submit')) {
                if (preg_match('/^\d{1,8}+$/',getRequest('lic')))
                {
                    unset ($lines);
                        $lines=file("http://www.mysait.ru/cgi-bin/Script.cgi?ACCOUNT=" . htmlspecialchars(getRequest('lic')));
                   
                    if ($lines[0]==1) {
                        echo "<br><br><br><br><div align=\'center\'>" . $lines[1] . "</div><br>";
                    } else {
                        /* echo "<br><br><br><br>"; */
                        $lines[1]=preg_replace('/\n/','',$lines[1]);
                        echo "<div id=\"bal\"><p class=\"ballance_result\">Состояние лицевого счета "."<b>" . htmlspecialchars(getRequest('lic')) . "</b>". " на " . preg_replace("/\n/","",$lines[2] . "<br>");
                        echo "составляет: ";
                        echo preg_match('/^-/',$lines[1])?"<b><font color=\"red\">".$lines[1]."</font></b>":$lines[1];
                        echo " руб.</p></div>";
                    }
                } else {
                    echo "<div id=\"bal\"><p class=\"ballance_fail\"><font color=\"red\" size=\"4\">В поле ввода можно вводить только цифры!</font><br>";
                    echo "Запрос не был отправлен!<br>Пожалуйста введите номер лицевого счёта и отправьте запрос снова.</p></div>";
                }
            }                                         
        }   

и в шаблоне вывожу - custom balance()
В итоге скрипт работает, но теперь баланс приходит по вверх всего DOM-обекта,так:
<div id="bal">
    <p class="ballance_result">Состояние лицевого счета <b>10010010</b> на 12.06.2013
    <br>составляет: 45.57 руб.</p>
</div>
<!DOCTYPE html>
<html lang="ru">
    <head>

Хотя по сути должен выводится там куда я вставил макрос, под кнопкой submit.
Пожалуйста помогите решить этот вопрос!?
Название: Re:Макрос отправляемый запрос на сторонний сервер
Отправлено: admin от 16 Июня 2013, 02:45:26
umi макрос должен возвращать ответ не через echo, а через return.
То есть, формируете строчку вместо того чтобы выводить куски ответа через echo и отдаете сформированную строчку через return функцию.
Название: Re:Макрос отправляемый запрос на сторонний сервер
Отправлено: fantom103 от 16 Июня 2013, 13:42:30
Спасибо! Все получилось!