【问题标题】:How can I make this if else, into a one liner, if true, Show an `<a>`, else show a `<p>`如果是这样,我怎么能把它变成一个衬里,如果是真的,显示一个`<a>`,否则显示一个`<p>`
【发布时间】:2011-11-02 13:28:30
【问题描述】:

我有这段代码,我希望它尽可能小。
如您所见,我们重复了很多相同的 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; ?>

对于如何将其压缩成更少的内容有点卡住了。
我也有与上面相同的代码,所以我有 2 个这样的 if else 语句。
如您所见,唯一改变的是:

  • a href=... 标签到p 标签
  • 标题“喜欢”->“你喜欢这个”
  • p 标记必须有 rel,因为它在 javascript 中使用。

有什么想法可以让这个更精简吗?
某种内联回声。
你会怎么做?

【问题讨论】:

  • 为什么要缩短,会影响可读性?
  • 所有的行都略有不同,除了最后一个
    ,这可能是最可读的。
  • tbh,我有一个非常大的视图文件,其中 2 个 if 在我的所有页面上占用了这么多空间,我知道这很有效,所以我想“缩小”它,所以我所有的页面都略小,以帮助其他更重要的代码的可读性。
  • 如果你经常使用这个结构,也许你应该把它做成一个函数,定义一次,每次使用时一行调用?
  • 标签: php html if-statement


    【解决方案1】:

    我会保持原样。

    从您的示例中,您还修改了 &lt;p&gt;&lt;a&gt; 标记(样式和缩写属性)中的 HTML,并且将一些东西组合在一起来解决这个微不足道的“问题”只会导致可读性降低和更难管理代码。尤其是从效率的角度来看,这里没有任何好处。

    【讨论】:

      【解决方案2】:

      这听起来可以使用更好的 CSS 进行整理。您可以只使用 1 个带有“喜欢”类的标签来区分两者。非常整洁的代码,只有两个不同的 a 标签。

      【讨论】:

      • 听起来是这样,但您想将行为更改为。如果不喜欢,它应该是一个可点击的链接/按钮,但如果它之前喜欢它应该是静态的。除非您将其设为“不同”链接。 :)
      • $('a.liked').click( alert('something'); );
      • $('a.likedbefore').click( alert('something different')); jQuery
      • 我知道 JQuery,但你真的想依赖 Javascript 来禁用链接吗?您可以使用 JQuery 通过 AJAX 对页面“点赞”,然后禁用链接,但是在加载整个页面时,我不会冒险。
      • 另一方面,OP 似乎在链接的 Href 中有 Javascript。如果按钮依赖于 Javascript,我会依赖 Javascript 来呈现它,或者至少让它可见。您不想要根本不响应的链接或按钮。
      【解决方案3】:

      我会选择

      • 跳过else 条件,您不需要它。要么以前喜欢,要么不喜欢。
      • 在这两种情况下都将其包裹在 p(或者更确切地说是 div)中。
      • 仅在检查时输出a 元素。全面执行检查,一次为开盘,一次为收盘。
      • 使用 CSS 设置不透明度。

      【讨论】:

        【解决方案4】:

        这样的?

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

        【讨论】:

        • 我知道我可以做到这一点,但对于这么多代码真的不实用。
        【解决方案5】:

        为了在答案中列出实际答案:

        创建一个打印此内容的函数,并在整个 php 文件中以单行代码的形式继续调用该函数。

        【讨论】:

        • @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;
          }
        ?>
        

        【讨论】:

        • 这会降低它的可读性。您杀死了您的编辑器支持的任何 HTML 突出显示,并且行太长了。除此之外,它仍然是相同的代码,只是更难维护。
        • 显然,您需要一个用于 3 个标签元素的 HTML 高亮编辑器。不是我。
        • 是的,然后它变成了四个,然后你在一个回声中得到了半页。但是我看到您修改了答案以匹配接受的答案。也许这会给你加分。
        • 是的,在这种情况下它仍然是 3。我修改了答案以符合我的建议。
        • 这不是“3个标签”的问题。完全是使用模板的问题。只有 2 个选择:是否使用模板。如果是 - HTML 应该始终保持原样。否则整个想法就会被破坏并且代码臃肿。一旦你熟悉了模板,你会发现你当前的代码也很恶心:)
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-11-14
        • 2020-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-06
        相关资源
        最近更新 更多