Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Кастомный макрос. Как передать строку с символами "/"?

Автор MIkeРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 2449
Последний ответ 23 Мая 2013, 15:13:37
от MIke
Макрос emarket basketAddLink - отсутствие ссылки купить если цена 0

Автор koroganРаздел Макросы UMI.CMS

Ответов: 3
Просмотров: 3514
Последний ответ 25 Апреля 2012, 01:19:03
от admin
Перенесено: Макрос постраничного вывода system numpages - ошибка

Автор adminРаздел Макросы UMI.CMS

Ответов: 0
Просмотров: 3224
Последний ответ 04 Октября 2011, 14:58:21
от admin
Макрос вывода новостей связанных определенным сюжетом

Автор 31rusРаздел Custom макросы

Ответов: 3
Просмотров: 2852
Последний ответ 21 Сентября 2013, 19:11:52
от admin
Макрос content/sitemap обрабатывает не все уровни.

Автор poloРаздел Макросы UMI.CMS

Ответов: 7
Просмотров: 6391
Последний ответ 22 Октября 2013, 21:10:52
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

fantom103

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Здравствуйте уважаемые гуру юми цмс! У меня такой вопрос:

Есть форма которая по лицевому счету отправляет на сервер биллинга запрос и возвращает баланс:
<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.
Пожалуйста помогите решить этот вопрос!?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
umi макрос должен возвращать ответ не через echo, а через return.
То есть, формируете строчку вместо того чтобы выводить куски ответа через echo и отдаете сформированную строчку через return функцию.

*

fantom103

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Спасибо! Все получилось!