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

    +149

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    <?php if ($tags) { ?>
      <div class="tags"><b><?php echo $text_tags; ?></b>
    	<?php for ($i = 0; $i < count($tags); $i++) { ?>
    	<?php if ($i < (count($tags) - 1)) { ?>
    	<a href="<?php echo $tags[$i]['href']; ?>"><?php echo $tags[$i]['tag']; ?></a>,
    	<?php } else { ?>
    	<a href="<?php echo $tags[$i]['href']; ?>"><?php echo $tags[$i]['tag']; ?></a>
    	<?php } ?>
    	<?php } ?>
      </div>
      <?php } ?>

    opencart 1.5.6

    Запостил: rombik, 04 Августа 2013

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

    • Паттерн «Безысходность». А нет, строки 05 и 07 различаются...

      Классика с ифом в цикле ради выделения последней итерации...
      Ответить
    • <a href="<?=$tags[$i]['href']?>">
        <?=$tags[$i]['tag']?>
      </a>
      <?=$i<sizeof($tags)?',':''?>
      Ответить
      • Уже лучше. Но для перфоманса можно последний элемент вынести из цикла, тогда и проверка не понадобится.

        А вообще можно написать декоратор, который превращает массив $tags в массив html-кодов, и свернуть через implode. Правда, это должно памяти сожрать.
        Ответить
        • Вынос последнего элемента тоже не кошерно - изменение исходного массива, вставка результата в еще одну ссылку (переменную) - все это тоже пожрет память - так проверки самое "дешевое"..
          Декоратор - памяти пожрет еще как..

          Ах, да - я бы еще for выкинул и заюзал foreach
          И чтобы добить до конца - можно единожды вычислить до цикла значение sizeof(), ато оно вычисляется "на лету" каждый раз..

          Божежмой - про пыха фраза "на лету" совсем не звучит..
          Ответить
      • А что будете делать, если там не только запятую надо будет вставить, а какой-нить паддинг добавить последнему элементу?

        Вариант с if понятнее и читабельнее.
        Ответить
    • ну я же извращенец
      .tags li:not(:last-child):after {
      	content: ',';
      }
      <?php if ($tags) { ?>
      	<ul class="tags">
      	<?php foreach ($tags as $tag) { ?>
      	<li><a href="<?php echo $tag['href']; ?>"><?php echo $tag['tag']; ?></a></li>
      	<?php } ?>
      	</ul>
      <?php } ?>
      Ответить
      • Жаль, что с помощью content: добавляется только простой текст...
        Ответить
        • Ничего, в следующей итерации будет JS и добавление произвольных сущностей. А для разгрузки клиента можно использовать синхронный AJAX как в треде про валидацию полей на сервере.
          Ответить
          • >синхронный AJAX
            Во время вызова js вообще работать не будет?
            Ответить
            • Надо еще браузер вешать до кучи ;) Чтобы вызов был действительно синхронным.
              Ответить
              • IE 6 так и вис, окно висло и жрало 99% проца, закрыть можно было только процесс с потерей всех окон. Слава богу, что я тогда открыл для себя красное очко.
                Ответить

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