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

    +164

    1. 1
    2. 2
    3. 3
    <a href="?page=news" <?php if (isset($_GET['page'])) if ($_GET['page']=='news') echo 'class="active"' ?> >Новости</a>
    <a href="?page=photo" <?php if (isset($_GET['page'])) if ($_GET['page']=='photo') echo 'class="active"' ?> >Фото</a>
    <a href="/" <?php if (isset($_GET['page'])); else echo ' class="active"'?> >Главная</a>

    Подсветка той ссылки, на которой сейчас находишься (присвоение класса active).
    Проверка if (isset($_GET['page'])) сделана для того, чтобы PHP не ругался на то, что page не передан (такое происходит при переходе на главную).

    Запостил: opex_jr, 23 Июля 2011

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

    • показать все, что скрытоПомни, guest, за тобой могут пиписюнчик!
      Ответить
      • Ты всегда приходишь первым и всегда постишь про свои маленькие проблемы.. Неужели у тебя нет совсем никакой личной жизни?
        Ответить
      • Я понимаю ты поймал эту шутку, и думаешь это смешно, отнюдь, выставляешь себя критином умственно отсталым.
        Если ты думаешь что ты кому-то действуешь на нервы (малолетнии убогие критины любят это делать), то скажу тебе что всем безразличен твой бред, просто какой смысл, ты тупо теряешь своё время.
        Ты мудак короче.
        Ответить
        • Рыцари грамматика, который освобождает, давно бы вас КРОВЬКИШКИРАСПИДОРАСИЛОпустили под нож, комрад.
          Ответить
    • <?php if($page): ?>class="active"<?php endif; ?>
      Ответить
      • А как обойти ошибку "Undefined variable: page"? На главной же page не передаётся.
        Ответить
        • показать все, что скрытоОчевидно, require_once("пиписюнчик")
          Ответить
        • <?php if (isset($_GET['page'])) $page=$_GET['page']; else $page=""?>
          А Ваш код не сработал: просто присваивает класс всем ссылкам подряд.
          Ответить
          • Не в шаблоне:
            $photo = (isset($_GET['page']) and $_GET['page'] == 'photo') ? true : false;

            Потом в шаблоне:
            <?php if($photo): ?>class="active"<?php endif; ?>
            Ответить
            • На мой взгляд не есть здорово, много левых переменных. Тогда уж лучше что-то типа:

              Не в шаблоне
              public function checkActive($page){
                echo (isset($_GET["page"]) && $_GET["page"] == $page) ? " class='active' " : "";
              }

              в шаблоне
              <a href="?page=news"<?php $this->checkActive("news"); ?>>Новости</a>
              Ответить
              • Ну это каждому свое, мне, например, совсем не нравится печатать HTML отдельными функциями. Плюс, можно вместо переменных использвать один массив.
                Ответить
              • Хотя, возможно, вы правы и так лучше, я пока кроме гостевух ничего не писал и в больших проектах не учавствовал :)
                Ответить
                • Ну, опыт дело наживное :)
                  А по-хорошему, то, что я написал, тоже не самая лучшая реализация.
                  Ответить
              • Просто замечательная ветка... и echo вместо return, и true : false как результат тернарного оператора, и название функции, которая по сути предикат, и при этом называется checkFact вместо isFact, и повторяющиеся строковые константы...
                Ответить
                • И тут явился ГУРУ.
                  Ответить
                • > которая по сути предикат
                  вначале прочиталось "пердикат" :) простите
                  Ответить
                  • есть такое словечко - brainfart
                    Ответить
                  • Предикат, это часть предложения, которая описывает подлежащее, например, homo homini lupus est - lupus est - предикат. Когда-то, когда единственным языком программирования был натуральный язык, а единственным православным языком программирования был древне-итальянский, функции-предикаты строили по принципу: однин аргумент, он же подлежащее, и, либо наречие, либо отглагольное существительное, либо глагол в страдательном залоге. Назначение такой функции, описав в названии ее сущность, дать ответ с минимальным количеством вариаций. Такой подход так же нужен в классической логике для построения утверждений типа силлогизмов, когда на основании двух предикатов доказывается третий.
                    В современных языках предикаты, это, как правило, функции принимающие один аргумент - читай: подлежащее, и выносящие суждение о проверяемом свойстве - ложно оно или истинно. Типичный пример, в ECMAScript - isNaN(n). Или, если мы попробуем создать предикат на основе первого примера: estLupus(homo).
                    :)
                    Ответить
            • $page = @$_GET['page'];
              foreach ($menuItems = array(
              'news' => 'Новости',
              'hunews' => 'хуевости',
              ) as $url => $name):
              ?><a href="<?= $url ?>" <?= $page == $url ? 'class="active"' : '' ?>><?= $name ?></a><?
              foreachend;

              а вообще, конечно, это в целом говно.
              Ответить
            • $photo = (isset($_GET['page']) and $_GET['page'] == 'photo') ? true : false;
              надо переписать как:
              $photo = (isset($_GET['page']) === true and false !== ($_GET['page'] == 'photo')) ? true : false;
              if($photo) $photo = true; else $photo = false;
              if(!$photo) $photo = false;
              и еще пару строк на всякий случай.
              Ответить
        • Понял, ошибки подавляются собакой.
          <a href="?page=news" <?php if (@$_GET['page']=='news') echo 'class="active"' ?> >Новости</a>
          Ответить
    • <a href="?page=news" <?php echo ('class='.((isset($_GET['page']) && $_GET['page']=='news')?'act':'pass').'ive');?> >Новости</a>
      Ответить
    • <?=@$_GET['page']=='news'?'active':''?> или с isset(), ток длиннее будет
      Ответить

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