Как я могу превратить это if else в однострочный, если true, показать ``, else показать «

#php #html #if-statement

#php #HTML #if-оператор

Вопрос:

У меня есть этот код, который я хотел бы сделать как можно меньше.
Как вы можете видеть, мы повторяем много того же HTML-кода, но с небольшими изменениями.

 <?php if( ! $liked_before): // If not liked before, show the link a href?>
<a href="javascript:;" id="action-like">
    <div class="action_like" title="Like">
        <abbr title="Like">Like</abbr>
    </div>
</a>

<?php elseif($liked_before): // else dim it and make non clickable ?>

<p id="action-like" rel="liked_before">
        <div class="action_like" title="You Like this" style="opacity: 0.5;">
             <abbr title="You Like this">Like</abbr>
        </div>
</p>
<?php endif; ?>
 

Отчасти застрял в том, как я бы сократил это до less.
У меня также есть тот же код, что и выше, сразу после этого, поэтому у меня есть 2 оператора if else, подобных этому.
Как вы можете видеть, меняются только:

  • a href=... тег к тегу p
  • заголовок ‘Нравится’ -> ‘Вам нравится это’
  • p тег должен иметь значение rel, поскольку он используется в javascript.

Есть идеи, как я мог бы сделать это компактнее?
Какое-то встроенное эхо.
Как бы вы это сделали?

Комментарии:

1. Почему вы хотите, чтобы это было короче, это ухудшит читаемость?

2. Все строки немного отличаются, за исключением последней </div> , это, вероятно, наиболее читаемая.

3. tbh, у меня действительно большой файл просмотра, и 2 из этих if занимают так много места на всех моих страницах, я знаю, что это работает, поэтому я хотел как бы «уменьшить» его, чтобы все мои страницы были немного меньше, чтобы улучшить читаемость другого, более важного кода.

4. Если вы часто используете эту конструкцию, может быть, вам следует превратить ее в функцию, определить ее один раз и выполнять однострочный вызов каждый раз, когда вы ее используете?

Ответ №1:

Я бы оставил это как есть.

Из вашего примера вы также изменяете HTML в <p> <a> теге or (атрибуты style и abbr), и взлом чего-либо для решения этой тривиальной «проблемы» приведет только к менее удобочитаемому и более сложному в управлении коду. Особенно с точки зрения эффективности, здесь нечего выиграть.

Ответ №2:

Похоже, это можно было бы исправить, используя лучший CSS. Вы можете просто использовать 1 тег с классом ‘liked’, чтобы различать их. Очень аккуратный код с двумя разными тегами A.

Комментарии:

1. Звучит так, но вы хотите изменить поведение на. Если не нравится, это должна быть интерактивная ссылка / кнопка, но если она понравилась раньше, она должна быть статичной. Если вы не сделаете это «непохожей» ссылкой. 🙂

2. $(‘a.понравилось’).click(оповещение(‘что-то’); );

3. $(‘a.likedbefore’).click( оповещение(‘что-то другое’)); Jquery

4. Я знаю jQuery, но вы действительно хотите зависеть от Javascript для отключения ссылки? Вы можете использовать jQuery для «лайка» страницы через AJAX, а затем отключить ссылку, но при загрузке всей страницы я бы не стал рисковать.

5. С другой стороны, в OP, похоже, есть Javascript в Href ссылки. Если кнопка зависит от Javascript, я бы полагался на Javascript для ее отображения или, по крайней мере, сделать ее видимой. Вам не нужны ссылки или кнопки, которые вообще не отвечают.

Ответ №3:

Я бы предпочел

  • Пропустите else условие, оно вам не нужно. Это либо понравилось раньше, либо нет.
  • оберните его внутри p (или, скорее, div) в обоих случаях.
  • Выводите a элемент только в случае проверки. Выполните контрольный поворот, один раз для открытия и один раз для закрытия.
  • Установите непрозрачность с помощью CSS.

Ответ №4:

Что-то вроде этого?

 <html><?php echo $booleanCondition ? '<b>blah</b>' : '<i>blah</i>';?><html>
 

Комментарии:

1. Я знаю, что могу это сделать, но на самом деле это непрактично для такого большого количества кода.

Ответ №5:

Ради того, чтобы фактический ответ был указан в answers:

Создайте функцию, которая печатает это, и продолжайте вызывать функцию в виде однострочного кода по всему вашему php-файлу.

Комментарии:

1. @JustAnil Кто бы мог подумать, что ты этого еще не сделал. 🙂

Ответ №6:

Вот так:

 <?php 
   function getHtml($liked_before){
      $title='';
      $styleAttr='';
      if( ! $liked_before){ // If not liked before, show the link a href
          $title='Like';
      }
      else{ // else dim it and make non clickable
          $title='You Like this';
          $styleAttr=' style="opacity: 0.5;"';
      }

      $html='<div class="action_like" title="'.$title.'"'.$styleAttr.'><abbr title="'.$title.'">Like</abbr></div>';

      if( ! $liked_before){ // If not liked before, show the link a href
          $html='<a href="javascript:;" id="action-like">'.$html.'</a>';
      }
      else{ // else dim it and make non clickable
          $html='<p id="action-like" rel="liked_before">'.$html.'</p>';
      }
      return $html;
  }
?>
 

Комментарии:

1. Это делает его менее читаемым. Вы отключаете любую подсветку HTML, которую поддерживает ваш редактор, и строки становятся слишком длинными. Помимо этого, это все тот же код, только еще менее обслуживаемый.

2. Очевидно, вам нужен редактор выделения HTML для 3 элементов тега. Не я.

3. Да, а затем их становится четыре, и тогда вы получаете половину страницы в одном echo. Но я вижу, что вы изменили свой ответ, чтобы он соответствовал принятому ответу. Возможно, это принесет вам несколько очков.

4. Да, и для этого случая все еще 3. Я изменил свой ответ, чтобы он соответствовал моему предложению.

5. дело не в «3 тегах». Это вопрос использования шаблонов вообще. Есть только 2 варианта: использовать шаблоны или нет. Если да — HTML ВСЕГДА должен быть как есть. В противном случае вся идея будет испорчена, а код раздут. Как только вы познакомитесь с шаблонами, вы тоже найдете свой текущий код отвратительным 🙂