Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: <form> внутри <form> как обыграть
 
 автор: RuslanBLR   (26.12.2011 в 15:48)   письмо автору
 
 

Здравствуйте. подскажите как это обыграть:

Есть главная форма а внутри ее есть еще одна форма которая удаляет товар по кнопке обращаясь к функции - понимаю что так нельзя - но как это обыграть( может как-нибудь можно реальзовать 2-ю форму ввиде ссылки):

<? session_start(); 
function 
remove_from_cart($delete_key) { 
 unset(
$_SESSION['product_id'][$delete_key]); 
 unset(
$_SESSION['product_price'][$delete_key]); 
 unset(
$_SESSION['product_count'][$delete_key]); 
 
$_SESSION['prod_count']=$_SESSION['prod_count']-1
 
sort($_SESSION['product_id']); 
 
sort($_SESSION['product_price']); 
 
sort($_SESSION['product_count']); 
 
update_cart_sum(); 
 }
 if (isset(
$_POST['del_id'])) {
 
remove_from_cart($_POST['del_id']);
 }

<
form method="POST" onsubmit="return validar(this)" id="form1" action="ZakazOtpr.php">
............
............
...........
<
form action="<?php echo $_SERVER['REQUEST_URI']?>" method="POST">
  <
td align=center>
 <
input type="hidden" value="<?php echo $i;?>" name="del_id" />
 <
input type="Submit" value="Удалить" />
 </
form>
............
............
...........
</
form>

?>

  Ответить  
 
 автор: DJ Paltus   (26.12.2011 в 16:18)   письмо автору
 
   для: RuslanBLR   (26.12.2011 в 15:48)
 

Если я правильно прочел Ваши многоточия, то имеется в виду таблица некоего товару, где напротив каждого пункта стоит кнопка "удалить"?
Тогда поступите существенно прощще.
Вместо какой-то там формы с кнопкой просто нарисуйте ссылку
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $i;?>' title='удалить'>X</a>

А при загрузке скрипта проверяйте, если isset($_GET['action']), то удалять то, что надо (до вывода таблицы).

  Ответить  
 
 автор: RuslanBLR   (26.12.2011 в 16:27)   письмо автору
 
   для: DJ Paltus   (26.12.2011 в 16:18)
 

Вы все правильно поняли.
у меня передается через POST - нечего страшного?

не удаляет товар!

  Ответить  
 
 автор: DJ Paltus   (26.12.2011 в 16:32)   письмо автору
 
   для: RuslanBLR   (26.12.2011 в 16:27)
 

Передача данных из формы через "пост" ничем не мешает передавать данные и через адресную строку, в "гет". Если не удаляет, то вероятно при обработке запроса что-то не то.

давайте только немного упростим, я чего-то загнался:
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?delete=<?php echo $i;?>' title='удалить'>X</a> 

Соответственно, проверяем на наличие $_GET['delete'] и удаляем элемент с id=$_GET['delete'].

  Ответить  
 
 автор: RuslanBLR   (26.12.2011 в 16:36)   письмо автору
 
   для: DJ Paltus   (26.12.2011 в 16:32)
 

когда поменял с POST на GET то товар удалился - но возникло 2 ошибки:
1. товар который остался не удаленным - перестал показывать картинку которая загружается из БД и др. данные

2. после удаления - нажимаю - обновить страницу - следующий товар тоже удалился


<?
if (isset($_GET['del_id'])) {
remove_from_cart($_GET['del_id']);
}
?>

  Ответить  
 
 автор: DJ Paltus   (26.12.2011 в 16:46)   письмо автору
 
   для: RuslanBLR   (26.12.2011 в 16:36)
 

У вас что, при удалении товара его ID в корзине передается какому-то другому? Ну, и чего же тогда желать?
Немного иначе стоит подходить к такому делу.
В сессии для корзины хранить список уникальных ID товаров, отобранных покупателем. Соответственно и удалять на основании уникальных. И тогда при обновлении страницы после удаления позиции из корзины функция удаления попросту не найдет, чем поживиться, и успокоится. Ну а насчет изображений, думаю, на том же принципе разберетесь.

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 11:43)   письмо автору
 
   для: DJ Paltus   (26.12.2011 в 16:46)
 

подскажите что я не так делаю!

вот вывожу дамп SESSION и POST корзины (то что поступает в карзину):

<?
Array
(
    [
prod_count] => 3
    
[product_id] => Array
        (
            [
0] => 1
            
[1] => 2
            
[2] => 14
        
)

    [
product_price] => Array
        (
            [
0] => 50000
            
[1] => 100000
            
[2] => /
        )

    [
product_count] => Array
        (
            [
0] => 1
            
[1] => 1
            
[2] => 1
        
)
)
?>

POST пустой - так как кнопка удаления не одна не нажата:
<?

Array
(
)
?>


Когда нажимаю удалить - передает: удаляю товар с id=2, а удаляет товар с id=14

<?
Array
(
    [
prod_count] => 2
    
[product_id] => Array
        (
            [
0] => 1
            
[1] => 2
        
)

    [
product_price] => Array
        (
            [
0] => 50000
            
[1] => 100000
        
)

    [
product_count] => Array
        (
            [
0] => 1
            
[1] => 1
            
[2] => 1
        
)

    [
sum] => 0
    
[cart_sum] => 150000
)
Array
(
    [
action] => delete
    
[del_id] => 2
)
?>


вот что я пишу в корзине:

<? session_start(); 

function 
remove_from_cart($delete_key) { 
 unset(
$_SESSION['product_id'][$delete_key]); 
 unset(
$_SESSION['product_price'][$delete_key]); 
 
$_SESSION['prod_count']=$_SESSION['prod_count']-1

 
update_cart_sum(); 
 }


 if (isset(
$_GET['del_id'])) {
 
remove_from_cart($_GET['del_id']);
 }
?>

ссылка удаления:

<?
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
?>

  Ответить  
 
 автор: DJ Paltus   (27.12.2011 в 12:26)   письмо автору
 
   для: RuslanBLR   (27.12.2011 в 11:43)
 

Оно всё правильно делает. Любезный, у Вас под индексом "2" находится товар с каким ID? С 14-м! Если надо опираться на другое число, так и подставляйте его в ссылку вместо $_SESSION[product_id][$i]. Не из того кармана, в общем, семечки таскаете.

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 13:55)   письмо автору
 
   для: DJ Paltus   (27.12.2011 в 12:26)
 

я же не опираюсь на индекс массива а на код товара - я подразумеваю под id=2 кодтовара, а у он у меня берет по индексу массива. Как сделать то???? помогите пожалуйсто!!!!!!

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 15:50)   письмо автору
 
   для: DJ Paltus   (27.12.2011 в 12:26)
 

подскажите как написать чтобы значение передаваемое через ссылку - было индексом массива товара, а то у меня передает номер товара????

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 16:37)   письмо автору
 
   для: DJ Paltus   (27.12.2011 в 12:26)
 

Извините, я понял. Подскажите от чего когда я удаляю - как вы говорите у меня индекс удаляемого товара в цикле передается следующему товару??? как это устранить???

  Ответить  
 
 автор: DJ Paltus   (27.12.2011 в 17:08)   письмо автору
 
   для: RuslanBLR   (27.12.2011 в 16:37)
 

Это не устранять надо, а исправлять.
Нахрена в корзине вообще лишние ID? У товара уже есть, зачем городить вложенность лишнюю? Есть уже у них уникальные номера, сделайте так, чтобы товар в корзине имел только один - свой ID. 1, 2, 14, а не 0, 1, 2.

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 17:16)   письмо автору
 
   для: DJ Paltus   (27.12.2011 в 17:08)
 

у меня вроде так и есть - id товара из БД а 0 1 2 3 и т.д. это индекс в массиве (счетчик), т.е:

index это [n] , а 1....n это id товара
[0] => 1
[1] => 2
[2] => 3
[3] => 4

или так не правильно? я не могу понять - простите!!!!

  Ответить  
 
 автор: DJ Paltus   (28.12.2011 в 00:01)   письмо автору
 
   для: RuslanBLR   (27.12.2011 в 17:16)
 

Вот. Вотвотвотвотвоот.
На кой леший этот счетчик? Если Вы мне это сумеете объяснить, то или у меня, или у Вас случится просветление. Сатори. А следующие Ваши 4 комментария я читать не стану, потому что многовато информации ради плёвого дела.

  Ответить  
 
 автор: RuslanBLR   (28.12.2011 в 11:29)   письмо автору
 
   для: DJ Paltus   (28.12.2011 в 00:01)
 

я не понимаю - что значит зачем счетчик, а как я положу несколько товаров?

вот как я передаю товар в корзину:

<? session_start(); 

function 
addtocart($product_id$product_price) { 

if(
is_array($_SESSION['product_id']) && in_array($product_id$_SESSION['product_id'])){


  echo 
"<p class=contGLAV2><font color=#BEBEBE><strong>товар уже есть в корзине</font></strong></p>"

}  

else   
{   
 
$_SESSION['prod_count']++; 
 
$incart=$_SESSION['prod_count'] - 1
 
$_SESSION['product_id'][$incart] = $product_id
 
$_SESSION['product_price'][$incart] = $product_price
 
$_SESSION['product_count'][$incart] = 1
 } 
 
}
?>


Первая строчка $_SESSION['prod_count']++ добавляет единицу к переменной $_SESSION['prod_count'], которая представляет собой счетчик товаров в корзине.
$incart=$_SESSION['prod_count']-1 – индекс массива, содержащего информацию о продукте в корзине. $_SESSION['product_id'][$incart] – идентификатор продукта, $_SESSION['product_price'][$incart] – цена продукта, $_SESSION['product_count'][$incart] – количество единиц продукта в корзине.


почему я не правильно делаю???

вывод из БД:

<?



if(!empty($_POST)){    

    
    
addtocart($_POST["product_id"],$_POST["product_price"]);  

}
  include 
"setup/options.php";  
  if(!
mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());  
  if(!
mysql_select_db($DB)) exit(@mysql_error());  

  
$r mysql_query("SELECT * FROM CLIPS WHERE kod = {$_GET['kod']}");  

  
$page "<form id='form1' name='form1' method='post' action='{$_SERVER["REQUEST_URI"]}'>";  
  while(
$f mysql_fetch_array($r)){ 
    
$page .= "<table border=1 width=100%> 
    <tr><td align=center bgcolor=#000000><font color=white>код: 
{$f['kod']}</font></td> 
    <td align=center bgcolor=#000000><font color=white>место установки:</font></td> 
    <td align=center bgcolor=#000000><font color=white>тип: 
{$f['tip']}</font></td></tr> 
    <tr><td width=5% align=left bgcolor=#FFFFFF height=5px><img src='clips/
{$f['image']}' width=120px height=120px></td> 
    <td align=center>
{$f['setup']}</td><td width=120px height=120px>картинка</td></tr> 
    <tr><td align=center bgcolor=#000000><font color=white>OEM:</font></td> 
    <td align=center bgcolor=#000000><font color=white>марка автомобиля:</font></td> 
    <td align=center bgcolor=#000000><font color=white>размеры:</font></td></tr> 
    <tr><td bgcolor=#E8E8E8 align=center>
{$f['original']}</td> 
    <td align=center>
{$f['marka']}</td> 
    <td>T= 
{$f['T']} <br>H= {$f['H']}<br>F= {$f['F']}<br>D= {$f['D']}<br>T1= {$f['T1']}<br> 
    T2= 
{$f['T2']}<br>L= {$f['L']}<br>G= {$f['G']}<br>S1= {$f['S1']}<br>S= {$f['S']}<br> 
    S min= 
{$f['Smin']}<br>S max= {$f['Smax']}</td></tr></table><br>
<p class=contGLAV2><strong>Цена: 
{$f['price']} бел.руб.</strong></p>
    <input type=hidden name='product_price' value="
.$f[price]." /> 
    <input type=hidden name='product_id' value="
.$f[id]." /> 
    <input type=hidden name='tocart' value=tocart /> 
<table border=0 width=100%><tr><td align=center>
    <input type=submit name='sub' value='В корзину' id='korz' />  
</td></tr></table>"
;
$f['price']=$_SESSION['price'];
echo 
"$f[price]";


  }  
  
$page .= "</label></form>";  
   
  echo 
$page;
  
?>

  Ответить  
 
 автор: Lotanaen   (28.12.2011 в 11:50)   письмо автору
 
   для: RuslanBLR   (28.12.2011 в 11:29)
 

А как у Вас схема работает, если покупатель например добавил одну позицию в корзину, а потом решил еще раз добавить ту же позицию в корзину? Или у Вас можно только по одной позиции каждого товара в корзину класть?

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 17:18)   письмо автору
 
   для: DJ Paltus   (27.12.2011 в 17:08)
 

может у меня в коде ошибка - посмотрите пожалуйсто!!!!
........
.......
.......
<?php
 
include "setup/options.php";  
  if(!
mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());  
  if(!
mysql_select_db($DB)) exit(@mysql_error());  
 for (
$i=0$i<$_SESSION['prod_count']; $i++) {
 
/* получаем информацию о товаре из базы данных */
 
$q="SELECT * FROM CLIPS WHERE id='".$_SESSION[product_id][$i]."'";
 
$query=mysql_query($q);
 
$prod_in_cart=mysql_fetch_assoc($query);
 
?>
 <tr>

<td align=center><? echo "$prod_in_cart[kod]"?></td>
 <td align=center><img src='clips/<?php echo $prod_in_cart['image'] ;?>' width=50px height=50px></td>
 <td align=center>

 
<input type="text" name="kol[<?=$prod_in_cart['id'];?>]" size="3" value="" /></td>

 <td align=center><?php echo $_SESSION['product_price'][$i];?></td>

<td align=center>
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $i;?>' title='удалить'>удалить</a>
</td>
 
 </tr>

 <?php
 
}


 
?>

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 17:32)   письмо автору
 
   для: DJ Paltus   (27.12.2011 в 17:08)
 

как я понимаю - проблема в следуйщем. Происходит так: когда я удаляю товар, товар удаляется и его индекс как то переходит следующему товару, но когда я отслеживаю дамп массива - то там все нормально - удаляет только тот товар который я нажал удалить! Типа того - могу немного ошибатся.
Поэтому надо удалять не по индексу товара а по его id. Но у меня не получается этого сделать!

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 17:45)   письмо автору
 
   для: DJ Paltus   (27.12.2011 в 17:08)
 

когда я делаю так: то передается id товара
<?
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
?>


но удаление происходит по индексу
<?
function remove_from_cart($delete_key) { 
 unset(
$_SESSION['product_id'][$delete_key]); 
 unset(
$_SESSION['product_price'][$delete_key]); 
 
$_SESSION['prod_count']=$_SESSION['prod_count']-1

 
update_cart_sum(); 
 }

if (isset(
$_GET['del_id'])) {
 
remove_from_cart($_GET['del_id']);
 }
?>


как заменить эту строку - чтобы она брала не индекс товара а id товара?
<?
 
unset($_SESSION['product_id'][$delete_key]); 
?>

  Ответить  
 
 автор: RuslanBLR   (27.12.2011 в 17:46)   письмо автору
 
   для: RuslanBLR   (27.12.2011 в 17:45)
 

если так - это полный бред: или я ошибаюсь

<? 
 
unset($_SESSION['product_id'][$i][$delete_key]);  
?>

  Ответить  
 
 автор: Lotanaen   (28.12.2011 в 11:08)   письмо автору
 
   для: RuslanBLR   (27.12.2011 в 17:45)
 

как вариант:


<?
foreach ($_SESSION['product_id'] as $key=>$value) { 

     if (
$value == $delete_key) {
       unset(
$_SESSION['product_id'][$key]); 
       unset(
$_SESSION['product_price'][$key]);
       unset(
$_SESSION['product_count'][$key]);
    }

}
?> 

  Ответить  
 
 автор: RuslanBLR   (28.12.2011 в 12:01)   письмо автору
 
   для: Lotanaen   (28.12.2011 в 11:08)
 

спасибо - вроде все хорошо - с массива удаляет, но поля удаляемого товара остаются ну а значения удалены. Почему поля не удалило? Может не правильно записал что?:

правильно ли я записал?

<?
function remove_from_cart($delete_key) { 
 foreach (
$_SESSION['product_id'] as $key=>$value) {  

     if (
$value == $delete_key) { 
       unset(
$_SESSION['product_id'][$key]);  
       unset(
$_SESSION['product_price'][$key]); 
       unset(
$_SESSION['product_count'][$key]); 
    } 

}

 }


if (isset(
$_GET['del_id'])) {
 
remove_from_cart($_GET['del_id']);
 }
?>

передаю что удалить:
<?
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
?>

  Ответить  
 
 автор: Lotanaen   (28.12.2011 в 12:25)   письмо автору
 
   для: RuslanBLR   (28.12.2011 в 12:01)
 

Какие поля не удалило? У Вас обновление страницы происходит по ссылке на удаления из корзины? Если да, то сначала удаляйте позицию из корзины, а потом вывод самой страницы делайте.

  Ответить  
 
 автор: RuslanBLR   (28.12.2011 в 12:36)   письмо автору
 
   для: Lotanaen   (28.12.2011 в 12:25)
 

не удалило поля из таблицы. из массива товар удалило с этим все отлично - спасибо еще раз большое!! у меня ссылка и ссылается на эту же страницу - разве она не должна удалить поля товара из таблицы -товар же уже удален. Извините немного не понял. Вот мой вывод:

<? session_start(); 

function 
remove_from_cart($delete_key) { 
 foreach (
$_SESSION['product_id'] as $key=>$value) {  

     if (
$value == $delete_key) { 
       unset(
$_SESSION['product_id'][$key]);  
       unset(
$_SESSION['product_price'][$key]); 
       unset(
$_SESSION['product_count'][$key]); 
    } 

}

 }

 if (isset(
$_GET['del_id'])) {
 
remove_from_cart($_GET['del_id']);
 }

  <
div class="content">
<
br>
    <
table border=1 width=100%>
    <
tr><td align=center bgcolor=#000000><font color=white>код</font></td><td bgcolor=#000000><font color=white></font></td><td  align=center bgcolor=#000000><font color=white>количество</font></td><td bgcolor=#000000 align=center><font color=white>цена за шт</font></td><td bgcolor=#000000 align=center><font color=white>удалить товар</font></td></tr>
 
<?php
 
include "setup/options.php";  
  if(!
mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());  
  if(!
mysql_select_db($DB)) exit(@mysql_error());  
 for (
$i=0$i<$_SESSION['prod_count']; $i++) {
 
/* получаем информацию о товаре из базы данных */
 
$q="SELECT * FROM CLIPS WHERE id='".$_SESSION[product_id][$i]."'";
 
$query=mysql_query($q);
 
$prod_in_cart=mysql_fetch_assoc($query);
 
?>
 <tr>

<td align=center><? echo "$prod_in_cart[kod]"?></td>
 <td align=center><img src='clips/<?php echo $prod_in_cart['image'] ;?>' width=50px height=50px></td>
 <td align=center>

 
<input type="text" name="kol[<?=$prod_in_cart['id'];?>]" size="3" value="" /></td>

 <td align=center><?php echo $_SESSION['product_price'][$i];?></td>

<td align=center>
<a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $_SESSION[product_id][$i];?>' title='удалить'>удалить</a>
</td>

 </tr>
 <?php
 
}


 
?>
 </table>
?>

  Ответить  
 
 автор: Lotanaen   (28.12.2011 в 12:57)   письмо автору
 
   для: RuslanBLR   (28.12.2011 в 12:36)
 

вот этот фрагмент :


for ($i=0; $i<$_SESSION['prod_count']; $i++) {
 /* получаем информацию о товаре из базы данных */
 $q="SELECT * FROM CLIPS WHERE id='".$_SESSION[product_id][$i]."'"; 


замените на :


foreach ($_SESSION[product_id] as $key=>$value) {
 /* получаем информацию о товаре из базы данных */
 $q="SELECT * FROM CLIPS WHERE id='".$value."'"; 


а еще лучше в один запрос к БД загнать все ИД товара и затем по циклу выводить:


 <?php
 
include "setup/options.php";  
  if(!
mysql_connect($host,$USER,$PASSWD)) exit(@mysql_error());  
  if(!
mysql_select_db($DB)) exit(@mysql_error());  
 if (
sizeof($_SESSION['product_id'])) {
     
/* получаем информацию о товаре из базы данных */
     
$q="SELECT * FROM CLIPS WHERE id in (".implode(",",$_SESSION['product_id']).");";
     
$query=mysql_query($q);
     while (
$prod_in_cart=mysql_fetch_array($query)) {
         
?>
         <tr>
        
        <td align=center><? echo "$prod_in_cart[kod]"?></td>
         <td align=center><img src='clips/<?php echo $prod_in_cart['image'] ;?>' width=50px height=50px></td>
         <td align=center>
        
         
        <input type="text" name="kol[<?=$prod_in_cart['id'];?>]" size="3" value="" /></td>
        
         <td align=center><?php echo prod_in_cart['product_price'];?></td>
        
        <td align=center>
        <a href='<?php echo $_SERVER['REQUEST_URI'];?>?action=delete&del_id=<?php echo $prod_in_cart['id'];?>' title='удалить'>удалить</a>
        </td>
        
         </tr>
         <?php
     
}
}
else
    echo 
"Корзина пуста!";

 
?>

  Ответить  
 
 автор: RuslanBLR   (28.12.2011 в 13:18)   письмо автору
 
   для: Lotanaen   (28.12.2011 в 12:57)
 

ОГРОМНОЕ ВАМ СПАСИБО!!!!!!!! СПАСИБО!!!!!!!!!!! СПАСИБО ЗА ТЕРПЕНИЕ!!!!!!!!!

  Ответить  
 
 автор: Lotanaen   (28.12.2011 в 16:58)   письмо автору
 
   для: RuslanBLR   (28.12.2011 в 13:18)
 

Да... в Вашей функции удаления позиции перед foreach делайте проверку на существования массива например так:


function remove_from_cart($delete_key) { 
if (sizeof($_SESSION['product_id'])) {
 foreach ($_SESSION['product_id'] as $key=>$value) {  

     if ($value == $delete_key) { 
       unset($_SESSION['product_id'][$key]);  
       unset($_SESSION['product_price'][$key]); 
       unset($_SESSION['product_count'][$key]); 
       return true;
    } 

}
return false;
}
else
    return false;

 } 

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования