Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: библиотека xAJAX

Модерирует : Cheery

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Открыть новую тему     Написать ответ в эту тему

6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Страница разработчика: http://xajax-project.org/
 
Последняя версия: xAJAX 0.6beta1
 
Докуменатция: Смотреть.
 
Решения:

 


 
Следует помнить!:
(мини-faq от 6epcepk'a)
  • Почему-то не обновляется/добавляется информация.
    Не забываем как должна выглядить функция:

    Код:
         
    function test() {
        $objResponse = new xajaxResponse();
        $objResponse->setCharEncoding('windows-1251');
        ...
        return $objResponse;
    }

     
  • Почему-то не обновляется/добавляется информация #2.
    Если присутствует символы кириллицы, то опять же вспоминаем как должна выглядить функция:

    Цитата:
         
    function test() {
        $objResponse = new xajaxResponse();
        $objResponse->setCharEncoding('windows-1251');
        ...
        return $objResponse;
    }

     
  • В базу данных добавляются кракозябры вместо кириллицы.
    А тут функция должна иметь другой вид:

    Цитата:
         
    function test() {
        $objResponse = new xajaxResponse();
        ...
        return $objResponse;
    }

     
  • Почемуто xajax.getFormValues('formID') не получает поля формы.
    Особенностью xajax является то что форма должна быть первого уровня или говоря другими словами не должна находиться в другой форме.
 





Лучше уточнить название, чтобы понятнее было о чем идет речь /Cheery/

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 23:12 18-04-2006 | Исправлено: Alukardd, 00:51 19-03-2011
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Угу, добавил $objResponse->loadCommands(loadMessage()); а то что ты красным обвел, я так и не понял, там где-то ошибка чтоли? Можно чуть чуть по подробней? Я просто не могу понять видимо логики. Переписал добавление на пхп - ни каких проблем! А тут такая вот проблема.  
$objResponse->addAssign("content","innerHTML",$output); - на сколько я понимаю и знаю, эта функция вставляет $output в <div id="content"> $output </div> я ведь прав? Я вот сидел всю ночь, парился. И добился того, что теперь они добавляются нормально, только не туда, КУДА надо. Это для меня какой-то нонсенс! Я всё это дело делаю, а добавляется на верх таблицы. А хотя id="content" находится внизу моей таблицы. Вобщем, ломал голову... ломал, и для пробы написан на пхп, думал, неужели я все не так правильно делаю. А вот и оно! На пхп все прекрасно пашед. Но ессно меня не устраивает один только пхп.
Ув-ый, Берсерк, ты обвел ошибки... если я тебя правильно понял, тогда вопрос, как это исправить? Буду очень рад любой помощьи!

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 12:30 21-04-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Понимаете, то что красным - я закомментировал, это надо вообще удалить, а вызывать только функцию через loadCommands.
Вызываемая функция должна возвращать XML.
И вообще я не особо понял смысла использования двух функций в данном случае - можно обойтись одной.
 
Добавлено:
Да, кстати, как вы себе представляете:

Код:
<div><td>..</td></div>

 
Чтобы добавлять вперед, назад - prepend, append соответственно.
 
Проблему четче.

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 23:33 21-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Может быть и одной, на счет этого я не подумал... начинающий, как ни как. Занчит должно выглядеть следущим образом:
function onStartLoad() {  
$objResponse = new xajaxResponse();  
$objResponse->loadCommands(loadMessage());  
return $objResponse;  
}  
 
Да? А как тогда его выводить? Просто прописать <script type="text/javascript">
xajax_onStartLoad();
</script> ?  
 
Хм.. ничего не получается все равно... Так почему убрали $objResponse->addAssign("content","innerHTML",$output);  
? ведь без этого он мне не выведит в id="content" ... или опять что-то путаю?
 

Цитата:
Проблему четче.

Вобщем мне необходимо выводить данные из бд. Я через форму их записываю, и хочется, чтобы они добавлялись без перезагрузки страницы. И больше я вобщем-то ничего не хочу. Но при вызове функции, у меня возникает проблема. Функция ничего не отображает на браузере. Просто пустое поле. Хотя на 0.2 версии, все работает. Вот и не могу понять, почему в 0.5бета2 не работает.  
 

Цитата:
Да, кстати, как вы себе представляете:  
 
Код:<div><td>..</td></div>  
 
 
Чтобы добавлять вперед, назад - prepend, append соответственно.  

 
Вот в этом то и есть некоторая часть проблемы =) из-за <div><tr><td>...</td> ... и выводятся коряво данные. А как это понять prepend, append ? Впервые такое слышу...

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 23:40 21-04-2007 | Исправлено: djinnet, 00:21 22-04-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Так с точки зрения логики xajax'a все верно, если ничего не выводит, попробуй вывести не $ouptut, а 'blabla', тогда ты точно поймешь где ошибка.

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 09:17 22-04-2007 | Исправлено: 6epcepk, 09:18 22-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Вобщем, протестил на 2х версиях xajax'a на 0.5бета2 - ничего не выводит. Пробовал писать blablabla за место $output никаких изменений. В версии 0.2.4 видимо он не понимает функцию loadcommands, выдает ошибку. Я тут вот что ещё подумал, когда я добавляю данные через форму. Сначала обрабатывает функция добавления выглядит так:
Код: function sendMessage($formData) {
    //получаем данные из формы
    $do_eur      = $formData['date_open_eur'];
    $dc_eur = $formData['date_close_eur'];
    $do_eur    = phptomysql($do_eur);
    $dc_eur = phptomysql($dc_eur);
    $type_eur      = $formData['type_eur'];
    $co_eur      = $formData['cost_open_eur'];
    $cc_eur      = $formData['cost_close_eur'];
 
 
     
   
    //записываем сообщение в бд
    $mysql=new mysql();
   $mysql->connect();  
   $mysql->tmpl = "INSERT INTO xajax_eur (date_open, date_close, type, cost_open, cost_close) VALUES ('$do_eur', '$dc_eur', '$type_eur', '$co_eur', '$cc_eur')";
   $mysql->args = array();
   $mysql->query(__FILE__,__LINE__);
     
    $output = loadMessage(); //подгружаем сохранненые сообщения
     
    $objResponse = new xajaxResponse();
    $objResponse->addAssign("content","innerHTML",$output); //выводим в div id="content" наши сообщения
    return $objResponse;
     
}
 
 
Тут опять такая же история как с функцией onstartload, он загружает оутпут через функцию лоадмессэйдж. Я пробовал изменить на  
Код: $objResponse = new xajaxResponse();
    $objResponse->loadCommands(loadMessage());  
    return $objResponse;
Но все равно результатов никаких, где ещё я могу ошибаться?

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 12:28 22-04-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору

Цитата:
Пробовал писать blablabla за место $output никаких изменений.

Значит у вас нет такого бокса. Или скрипт выдает ошибку, отладчик включен?
 

Код:
В версии 0.2.4 видимо он не понимает функцию loadcommands, выдает ошибку

В версии 2.х - loadXML

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 13:07 22-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
В версии 0.2.4 изменил на loadXML - заработало. http://img145.imageshack.us/my.php?image=97347978ld1.jpg вот как это выглядит. Но почему он пихает его сверху? Ведь в хтмле <div>...</div> расположен НИЖЕ чем таблица, которые Вы видите.  

Код:
<TABLE class="sortable-onload-3-reverse rowstyle-alt no-arrow paginate-7"  
id=theTable cellSpacing=0 cellPadding=0> // Шапка таблицы
  <THEAD>
  <TR>
    <TH class=sortable-date-dmy>дата отк</TH>
    <TH class=sortable-text>цена отк</TH>
    <TH class=sortable-text>тип</TH>
    <TH class=sortable-currency>цена зак</TH>
    <TH class=sortable-currency>дата зак</TH>
    <TH class=sortable-currency>прибыль</TH></TR></THEAD>
  <script>xajax_onStartLoad();</script>
<div id="content"></div> // А это тот самый div, куда по идее должен распологаться код
</TABLE>  
 

Что-то не так все работает. А с версией 0.5бета2 все равно ничего не получается. Код просто молчит. Ничего не выдает...

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 14:38 22-04-2007 | Исправлено: djinnet, 14:45 22-04-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Учите HTML, как может div располагаться внутри table?

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 15:51 22-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Это то я знаю, div размещается между тегами <td>...</td> я так и сделал. И делал как-то до этого. Но тогда проблема в другом возникает. Он все данные кидает в 1ю таблицу, в моем случае "Дата отк" то есть там распологаются данные даты открытия, закрытия, тип, цена отк, закрытия. Как этого избежать? Крутил-вертел по всякому. Ни к чему человеческому не пришел. Буду признателен, если поможете.

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 16:08 22-04-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Что мешает вернуть в качестве результата не только строки с данными, но и всю таблицу, включая шапку?

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 16:47 22-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Включил и шапку и всё, но он почему то не читает css классы... Вобщем ерунда какая-то получается...пфф...

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 17:27 22-04-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
Это уже не от аякса зависит.

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 18:04 22-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Разобрался с проблемой, теперь все работает тсабильно! Только пришлось сделать много лишних вызовов  

Код:
$objResponse->addAssign("content","innerHTML",$output);  
 $objResponse->addAssign("content1","innerHTML",$output1);  
 $objResponse->addAssign("content2","innerHTML",$output2);  
 $objResponse->addAssign("content3","innerHTML",$output3);  
 $objResponse->addAssign("content4","innerHTML",$output4);  
 $objResponse->addAssign("content5","innerHTML",$output5);
 
К сожелению, короче пути разыскать не смог Что ещё жалко, это то, что таблица построенная на css не может правильно работать. Не разобрался, почему не читает классы css в данном случае. Поэтому пришлось строить простую таблицу...
Берсерк, огромное спасибо за помощь!

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 18:21 22-04-2007
vania2112

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Здрасте Всем.
Прочитал посты решил выложить свой пример вывода таблицы через xajax
1 Создание шапки  таблицы в переменной $tex1

Код:
 
 $tex1="<table width=100% border=1 cellspacing=1 cellpadding=0 style=border-collapse:collapse; background:#FFFFF0>
<tr  bgcolor=#C0C0C0>
 <th title='Сортировать по времени' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'waytime',xajax.getFormValues(my))><span id=head3 style=font-family:Symbol;color:black></span><b>Мин</b></th>
    <th title='Сортировать Москва/Подмосковье' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'suburb',xajax.getFormValues(my))><span id=head5  
 
style=font-family:Symbol;color:black></span><b>от метро</b></th>
    <th title='Сортировать по площади' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'areakitchen',xajax.getFormValues(my))><span id=head6  
 
style=font-family:Symbol;color:black></span><b>Кухня</b></th>
    <th><b>S</b></th>
    <th><b>Комн</b></th>
    <th title='Сортировать по цене' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'prise',xajax.getFormValues(my))><span id=head9  
 
style=font-family:Symbol;color:black></span><b>Ц</b></th>
    <th title='Сортировать по процентам' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'ag,kl',xajax.getFormValues(my))><span id=head11  
 
style=font-family:Symbol;color:black></span><b>%</b></th>
      <th title='Сортировать по этажам' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'floorall,floor',xajax.getFormValues(my))><span id=head14  
 
style=font-family:Symbol;color:black></span><b>Этаж</b></th>
    <th title='Сортировать по сведеньям' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'edishional',xajax.getFormValues(my))><span id=head15  
 
style=font-family:Symbol;color:black></span><b>Д\Свед</b></th>
    <th><b>Тел.</b></th>
    <th title='Сортировать по фирме' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'owner',xajax.getFormValues(my))><span id=head17  
 
style=font-family:Symbol;color:black></span><b>фирм</b></th>
    <th title='Сортировать по дате' style=cursor:hand; onClick=xajax_printing($kols,$rooms,'createdate',xajax.getFormValues(my))><span id=head20  
 
style=font-family:Symbol;color:black></span><b>Дата</b></th>
    <th width=100><b>Инфо</b></th>
    </tr>";
 

2 формирование таблицы в переменой $tex1

Код:
 
while (($row = mysql_fetch_assoc($result))and($kolstr!=0))  {
        $kolstr--;
                $tex1=$tex1."<tr bgcolor=#F4F4F4 >";
        $tex1=$tex1."<td>".$row["waytime"]."/";
        $tex1=$tex1.$row["way"]."</td>";
        $q="SELECT name from metro WHERE metroid=".$row["metroid"];
        $res=mysql_query($q);
        $namemetro=mysql_result($res,0,0);
        $tex1=$tex1."<td>".$namemetro."<br>";
        if ($row["suburb"]==1){$subu="<font color=#0080C0>Подмосковье</font>";}
        $tex1=$tex1.$subu."</td>";
        $tex1=$tex1."<td>".$row["areakitchen"]."</td>";
        $tex1=$tex1."<td>".$row["area"]."</td>";
        $tex1=$tex1."<td>".$row["room"]."</td>";
        $tex1=$tex1."<td>".$row["prise"]."&nbsp;";
        $tex1=$tex1.$row["currency"]."</td>";
        $tex1=$tex1."<td>".$row["ag"]."/";
        $tex1=$tex1.$row["kl"]."</td>";
        $tex1=$tex1."<td>".$row["floor"]."/";
        $tex1=$tex1.$row["floorall"]."</td>";
        $tex1=$tex1."<td>".$row["edishional"]."</td>";
        $tex1=$tex1."<td>".$row["phone"]."</td>";
        $tex1=$tex1."<td>".$row["owner"]."</td>";
         $tex1=$tex1."<td>".$row["createdate"]."</td>";
        $tex1=$tex1."<td>".$row["info"]."</td>";
        //$tex1=$tex1."<td>".$row["userid"]."</td>";
           }
    $tex1=$tex1."</tr></table></font></div>";
 

3 вывод

Код:
 
$objResponse->addAppend("text2","innerHTML", "$tex1");
 

 
Ес кому нада могу выложить полный код
Также столкнулся с несколькими проблемами почему и залез на этот форум.
1) Я создаю SELECT  
добавляю option вот таким кодом  

Код:
 
$objResponse->addAssign("ar","options.add(new Option('комната',0))","");
 

В IE  все работает в опере тоже но почему то всего по два т.е. в выборе комната высвечивается дважды и любой option  высвечивается дважды
2 Создаю кнопку

Код:
 
$objResponse->addCreate("my", "button", "pres");
$objResponse->addAssign("pres","value","Вывести");
$objResponse->addAssign("pres","onClick","xajax_printing '$kols',$rooms,'$sort',xajax.getFormValues(my));");
 

Опять же в Опере не высвечивается название кнопки
3 В опере не срабатывает xajax.getFormValues()
При нажатии на кнопку идет перезагрузка странички в адресной строке появляется следущее ....index.php?ssa=0&ssc=4...
т.е кнопка ведет себя как submit...
Выше видел использование xajax.getFormValues() вопрос кто нить тестил это в опере
 
Попробовал сделать так $a="<input type=button onClick=xajax_printing('$kols',$rooms,'$sort',xajax.getFormValues(my)); Value=Ok>"
$objResponse->addAssign("my","innerhtml","$a");
Все заработало
Вывод xajax не хочет работать в опере(((

Всего записей: 2 | Зарегистр. 24-04-2007 | Отправлено: 20:03 24-04-2007 | Исправлено: vania2112, 20:41 24-04-2007
SRangeR

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я ))) Только оперу признаю )))

Цитата:
xajax.getFormValues()
- работает если внутри прописать название формы.
 
пример кнопки которая работает
<A onclick=\"xajax_testPollsAJAX(xajax.getFormValues('formPolls'));\">Голосовать</a>

Всего записей: 37 | Зарегистр. 07-04-2007 | Отправлено: 23:52 24-04-2007
vania2112

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Извеняюсь неправильно сформулировал пост
не работает не сама  xajax.getFormValues()
а создание кнопки, а также селекта, а то что нужно указывать имя формы эт и так понятно и у меня оно указано

Код:
 
$objResponse->addCreate("my", "button", "pres");  
$objResponse->addAssign("pres","value","Вывести");  
$objResponse->addAssign("pres","onClick","xajax_printing '$kols',$rooms,'$sort',xajax.getFormValues(my));");  
 

 
В Опере не работает данный код, зато если написать так:

Код:
 
$a="<input type=button onClick=xajax_printing('$kols',$rooms,'$sort',xajax.getFormValues(my)); Value=Ok>"  
$objResponse->addAssign("my","innerhtml","$a");
 

то все работает...  

Всего записей: 2 | Зарегистр. 24-04-2007 | Отправлено: 04:06 25-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Возникла ещё одна проблема... вобщем, делаю поиск:

Код:
function searchFormInt($formSearch) {
$feur = $formSearch['fuer'];
$seur = $formSearch['suer'];
$feur = phptomysql($feur);
$seur = phptomysql($seur);
   $query = "Select * from xajax_eur where date_open >= '$seur' and date_open <= '$feur' order by `date_close`";
$result = @mysql_query($query);
 
$num_subcat = @mysql_num_rows($result);
    $result = db_result_to_array($result);
   while($row=dbarray($mysql->result)){
      $name    = $row['date_open'];
      $date    = $row['type'];
      $message = $row['date_close'];
      $co_eur  = $row['cost_open'];
      $cc_eur  = $row['cost_close'];
 
        $output  .= "<td class=\"name\">$name</td><br>";
        $output1 .= "<td class=\"name\">$message</td><br>";
        $output2 .= "<td class=\"name\">$date</td><br>";
        $output3 .= "<td class=\"name\">$co_eur</td><br>";
        $output4 .= "<td class=\"name\">$cc_eur</td><br>";
        $output5 .= "<td class=\"name\">$....</td><br>";
 
      }    
 

 
вот функция... вроде все правильно делаю. Вывожу так:
<script type="text/javascript">
xajax_onStartLoad();
</script><tr><td class="name" id="content"></td><td class="name" id="content1"></td><td class="name" id="content2"></td><td class="name" id="content3"></td><td class="name" id="content4"></td><td class="name" id="content5"></td></tr>
 
Ну где ошибка то? При поиске ничего не выводится. Просто пустота. Проверял все. Таблица естессно есть, строки тоже верные, может где-то Вы увидите ошибку?

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 18:43 27-04-2007
6epcepk



Silver Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
vania2112

Цитата:
$objResponse->addAssign("pres","onClick","xajax_printing '$kols',$rooms,'$sort',xajax.getFormValues(my));");  

=>
addEvent("buttonId", "onClick", "alert('worl!');
 
djinnet
И что это? Просто функция. А где функция аякс?
ПС: конструкцию mysql_query не только не стоит "заглушать" от ошибок (@), а наоборот: добавлять конструкцию - or die(mysql_error());
 
буду через неделю

Всего записей: 2603 | Зарегистр. 02-05-2003 | Отправлено: 23:23 28-04-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
С этим я уже разобрался, там была маленька опечатка

Код:
$feur = $formSearch['fuer'];  
$seur = $formSearch['suer'];  
$feur = phptomysql($feur);  
$seur = phptomysql($seur);  
 
 
А теперь у меня возник ещё один вопрос. Можно ли передать значение ID в ссылке через xajax <a href="xajax_blabla...."> ?
И как это сделать? На пхп я передавал как <a href='?id=".$id."'>...</a> а на xajax как это сделать?

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 11:07 01-05-2007 | Исправлено: djinnet, 14:42 01-05-2007
djinnet

Newbie
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
И с этим вопросом я сам разобрался =) Берсерк, просвяти меня как  можно сделать паузу на некоторое время, внутри функции до какого-либо процесса? sleep(..) не помогает, так как он перед данной функцией делает тайм аут. А мне надо внутри функции сделать паузу. Допустим поменять знаечение:

Код:
 
$objResponse->addAssign("id","innerHTML","$blablabla");
потом сделать паузу на 2-4 секунды и после этого удалить
$objResponse->addRemove("id");
 

Как такое сделать? Заранее спасибо!

Всего записей: 18 | Зарегистр. 19-04-2007 | Отправлено: 17:57 03-05-2007 | Исправлено: djinnet, 19:32 03-05-2007
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

Компьютерный форум Ru.Board » Интернет » Web-программирование » PHP: библиотека xAJAX


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru