1. PHP / Говнокод #18423

    +142

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    <?php
    
    $self=$_SERVER['PHP_SELF'];
    
    if (isset($_GET['page'])) { $page=$_GET['page'];} else {$page=1;}
    
    $pages=25;
    $page_offset=5;
    $unique_links=9;
    
    if ($page != 1) { // Don't show back link if current page is first page.
    $back_page = $page-1;
    echo("<a href=\"$self?page=$back_page\">prev</a>    \n");}
    
    for ($i=1; $i <= $pages; $i++)  {
    
    if ($i == $page) {
     echo("<b>$i</b>\n");// If current page don't give link, just text.
     }  else {
    
    if (($i>$page-$page_offset) && ($i<$page+$page_offset)  && ($page>$page_offset)) {	
    echo("<a href=\"$self?page=$i\">$i</a> \n");
    } 
    elseif (($i<=$unique_links) && ($page<=$page_offset)) {
    	echo("<a href=\"$self?page=$i\">$i</a> \n");
    }
    elseif (($i>$pages-$unique_links) && ($page>$pages-$page_offset)) {
    echo("<a href=\"$self?page=$i\">$i</a> \n");	
    }
    
    }
    
    }
    
    if (!($page >= $pages) && $pages != 1) { // If last page don't give next link.
    $next_page = $page + 1;
    echo("<a href=\"$self?page=$next_page\">next</a>");}
    
    
    ?>

    Адовый аромат (хоть и рабочий), понимаю, но помогите упростить, пожалуйста. Условия внутри цикла скорее всего избыточны.
    Вкратце: "плавающий" пагинатор, 9 уникальных ссылок.

    Запостил: nurfed362, 30 Июня 2015

    Комментарии (18) RSS

    • очередное пыэхоговнище

      глядь! откуда в 2015м году такие дебилы берутся? Во истину -- ПХПист хуже обезьяны
      Ответить
      • ну ладно тебе на всех-то гнать! нельзя из за 99% про всех пхпшников так говорить
        Ответить
      • ну, это ожидаемо, даже возражать не стану, а по существу есть что-нибудь?
        Ответить
        • http://bit.ly/1LGhz1v Первые два варианта, вроде, подходят.
          Ответить
          • не, спасибо. там за метров 100 несет так же как и от этого кода.
            Злые вы. Ну ладно, а вот так ?
            $pages=25;
            $page_offset=5;
            $unique_links=9;

            for ($i=1;$i<=$pages;$i++) {
            $pages_a[$i]=$i;
            }

            if ($page+$unique_links<=$pages) {
            $sliced=array_slice($pages_a,$page-1,$unique_links);
            }else{
            $sliced=array_slice($pages_a,$pages-$unique_links,$unique_links);
            }

            if ($page != 1) { // Don't show back link if current page is first page.
            $back_page = $page-1;
            echo("<a href=\"$self?page=$back_page\">назад</a> \n");}

            foreach ($sliced as $key=>$value) {
            if ($value== $page) {
            echo("<b>$value</b>\n");// If current page don't give link, just text.
            } else {
            echo("<a href=\"$self?page=$value\">$value</a> \n");
            }
            }

            if (!($page >= $pages) && $pages != 1) { // If last page don't give next link.
            $next_page = $page + 1;
            echo("<a href=\"$self?page=$next_page\">вперед</a>");}
            Ответить
            • Пхп как шаблонизатор выглядит уёбищно.
              Ответить
              • Где в этом фрагменте «пхп как шаблонизатор»? В какой строке?
                Ответить
                • page=$i в 22
                  Ответить
                • echo("<a href=\"$self?page=$value\">$value</a> \n");

                  Здесь? Везде?
                  Ответить
                  • echo — это как раз НЕ шаблонизатор. Смотри, как выглядит шаблонизатор на пыхе:
                    if ($page != 1) { // Don't show back link if current page is first page.
                     $back_page = $page-1; ?>
                    <a href="<?=$self?>?page=<?=$back_page?>">назад</a>
                    <?php }
                    
                     foreach ($sliced as $key=>$value) {
                     if ($value== $page) { ?>
                    <b><?=$value?></b>
                    <?php // If current page don't give link, just text.
                     } else { ?>
                    <a href="<?=$self?>?page=<?=$value?>"><?=$value?></a>
                    <?php }
                     }
                    Ответить
                    • ИМХО все что с заменой символов формата на значение уже шаблонизатор.

                      echo " цццц $dddd sdasasdas"; шаблонизатор - автор мудак

                      цццц <?= $dddd ?> sdasasdas тоже шаблонизатор - автор не мудак.
                      Ответить
                      • код и так говно, а мне еще туда нассать, обрамляя каждый шмот <? ?> ?
                        Ответить
                        • можно же например twig
                          мало того что обрамлять нужно {} так он еще наследование шаблонов умеет и прочие ништяки
                          Ответить
    • время поднасрать. Вроде лучше, но всеравно воняет:

      $self=$_SERVER['PHP_SELF'];

      $pages=25;
      $page_offset=5;
      $unique_links=9;

      $pages_a=range(1,$pages);

      $page = (isset($_GET['page']) && in_array($_GET['page'],$pages_a)) ? intval($_GET['page']) : 1;

      switch(true) {
      case ($page-$page_offset<=1):
      $pages_a_s=array_slice($pages_a,0,$uniqu e_links);
      $pages_a_s[]="..."; $pages_a_s[]="25"; break;
      case ($page+$page_offset>=$pages):
      $pages_a_s=array_slice($pages_a,$pages-$unique_links,$unique_links);
      array_unshift($pages_a_s, 1, "..."); break;
      default:
      $pages_a_s=array_slice($pages_a,$page-$page_offset,$unique_links);
      array_unshift($pages_a_s, 1, "...");
      $pages_a_s[]="..."; $pages_a_s[]="25";
      }

      $back_page = $page-1;
      echo (($page != 1) ? "<a href=\"$self?page=$back_page\">назад</a> \n" : "");

      foreach ($pages_a_s as $key=>$value) {

      echo ((($value== $page) || ($value=="...")) ? "<b>$value</b>\n" : "<a href=\"$self?page=$value\">$value</a> \n");

      }

      $next_page = $page + 1;
      echo((!($page >= $pages) && $pages != 1) ? "<a href=\"$self?page=$next_page\">вперед</a>" : "");
      Ответить
      • обосрашка небольшая была...вот так правильно, но ппц опять условиями поросло. Пока соображалки не хватает как еще упростить.

        $pages=25;
        $page_offset=5;
        $unique_links=11;

        $pages_a=range(1,$pages);

        $page = (isset($_GET['page']) && in_array($_GET['page'],$pages_a)) ? intval($_GET['page']) : 1;

        switch(true) {
        case ($pages<=$unique_links):
        $pages_a_s=$pages_a;break;
        case ($page-$page_offset<=1):
        $pages_a_s=array_slice($pages_a,0,$uniqu e_links-1);
        $pages_a_s[]="..."; $pages_a_s[]=$pages;; break;
        case ($page+$page_offset>=$pages):
        $pages_a_s=array_slice($pages_a,$pages-$unique_links+1,$unique_links);
        array_unshift($pages_a_s, 1, "..."); break;
        default:
        $pages_a_s=array_slice($pages_a,$page-$page_offset,$unique_links-2);
        array_unshift($pages_a_s, 1, "...");
        $pages_a_s[]="..."; $pages_a_s[]=$pages;
        }

        $back_page = $page-1;
        echo (($page != 1) ? "<a href=\"$self?page=$back_page\">назад</a> \n" : "");

        foreach ($pages_a_s as $key=>$value) {

        echo ((($value== $page) || ($value=="...")) ? "<b>$value</b>\n" : "<a href=\"$self?page=$value\">$value</a> \n");

        }

        $next_page = $page + 1;
        echo((!($page >= $pages) && $pages != 1) ? "<a href=\"$self?page=$next_page\">вперед</a>" : "");
        Ответить

    Добавить комментарий