【问题标题】:nesting elesif syntax嵌套 else if 语法
【发布时间】:2012-10-14 22:17:27
【问题描述】:

如果标题超过 40 个字符,我正在修改面包屑脚本以附加 '...'。我把那部分工作得很好,但我不能把它嵌套在这个庞大的脚本中,以便在它的长度低于 40 个字符时保留它。

我这里还需要 else 吗?我从未遇到过有多个 ifs 而没有 elseelseif 的脚本

    } elseif ( is_single() && !is_attachment() ) {
      if ( get_post_type() != 'post' ) {
        $post_type = get_post_type_object(get_post_type());
        $slug = $post_type->rewrite;
        echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>';
        if ($showCurrent == 1) echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after;
      } else {
        $cat = get_the_category(); $cat = $cat[0];
        $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
        if ($showCurrent == 0) $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats);
        echo $cats;
        if (($showCurrent == 1) && (strlen($post->post_title) > 40)) echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after;
      } elseif {
        if (($showCurrent == 1) && (strlen($post->post_title) < 40)) echo $before . get_the_title() . $after;

      }

【问题讨论】:

  • 这不会解决你的实际问题,但我用于这种情况的东西是在服务器上,我检查字符串的长度是否> 40(就像你一样)......如果是这样,向名为 "trimmed" 的元素添加一个类,并且只打印前 40 个字符...然后在您的 CSS 中,使用以下规则:.trimmed:after { content: "..."; }
  • 绝招,感谢分享

标签: php javascript syntax if-statement


【解决方案1】:

看起来您可能缺少一些大括号

} elseif ( is_single() && !is_attachment() ) {
      if ( get_post_type() != 'post' ) {
        $post_type = get_post_type_object(get_post_type());
        $slug = $post_type->rewrite;
        echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>';

        if ($showCurrent == 1) { echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after; }

      } else {
        $cat = get_the_category(); $cat = $cat[0];
        $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');

        if ($showCurrent == 0) { $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats);
        echo $cats; }

        if (($showCurrent == 1) && (strlen($post->post_title) > 40)) { echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after; }

      } elseif {

        if (($showCurrent == 1) && (strlen($post->post_title) < 40)) { echo $before . get_the_title() . $after; }

      }

【讨论】:

    【解决方案2】:

    最后一个elseif 无效,因为它前面已经有一个else。

    我还要说,您应该养成使用标准化方式编写 if / if-else 语句的习惯。在我看来,您的代码可能搞砸了,因为您有一些没有花括号的 if 语句和一些带有花括号的语句。例如,如果您要在所有情况下都使用花括号,并为它们使用适当的缩进,那么您在 else 条件之后使用 and elseif 的问题就很容易发现了。

    举个例子:

    if ( get_post_type() != 'post' ) {
        $post_type = get_post_type_object(get_post_type());
        $slug = $post_type->rewrite;
        echo '<a href="' . $homeLink . '/' . $slug['slug'] . '/">' . $post_type->labels->singular_name . '</a>';
        if ($showCurrent == 1) {
             echo ' ' . $delimiter . ' ' . $before . substr(the_title('', '', FALSE), 0, 40) . $after;
        }
    } else {
        $cat = get_the_category(); $cat = $cat[0];
        $cats = get_category_parents($cat, TRUE, ' ' . $delimiter . ' ');
        if ($showCurrent == 0) {
            $cats = preg_replace("#^(.+)\s$delimiter\s$#", "$1", $cats);
        }
        echo $cats;
        if (($showCurrent == 1) && (strlen($post->post_title) > 40)) {
            echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after;
        }
    } else if {
        if (($showCurrent == 1) && (strlen($post->post_title) < 40)) {
            echo $before . get_the_title() . $after;
        }
    }
    

    对我来说,尽管它有点冗长,但阅读起来更清晰。很明显,最后一个 else-if 没有意义。

    顺便说一句,当你修正你的逻辑时,一定要考虑如果字符串正好是 40 个字符长会发生什么。

    【讨论】:

    • 代码不是我的,我只是想知道如何修改它以截断非常长的帖子标题。我同意这很乱,但是脚本足够长,我决定现在不花时间在上面(这只是一小部分)。我的代码编辑器将最后一个else if 标记为语法错误。当我完全删除它时,它说它很好。我不完全明白为什么——如果编辑错了,或者我在某处遗漏了什么
    • @kristinachilds 正如我所提到的,这不是有效的代码。您已经拥有和else 条件,它将捕获get_post_type() != 'post' 评估为false 的所有情况。
    • 我猜你嵌套在无效else-if 中的if 实际上应该是前面if (($showCurrent == 1) &amp;&amp; (strlen($post-&gt;post_title) &gt; 40)) { 语句中的else-if
    • 我同意你的观点,但是当我省略 elses 时代码可以工作。当我添加它时,脚本不起作用。所以我很困惑,想知道这是否正确。这是上下文中的整个脚本:pastebin.com/TQ9kd30g
    【解决方案3】:

    逻辑不清楚。您还没有处理长度正好是 40 个字符的情况。

    尝试构造您的代码,以便您只需要计算一次相同的表达式。也许这就是你的意思?

    } elseif ( is_single() && !is_attachment() ) {
      if ( get_post_type() != 'post' ) {
       ...
      } else {
        ...
        echo $cats;
    
        if (($showCurrent == 1) && (strlen($post->post_title) > 40)) 
          echo $before . substr(the_title('', '', FALSE), 0, 40) . '...' . $after;
        } 
        else {
          echo $before . get_the_title() . $after;
        }
      }
    }  // Close the elseif
    

    【讨论】:

    • 我没想到!谢谢你。 else 仍然被标记为语法错误。也许整个脚本需要在上下文中查看?我试图挽救你的眼睛,因为这只是一小部分(而且代码非常难看)。 pastebin.com/TQ9kd30g我强调它是为了帮助你们。
    • 您需要关闭封闭的elseif 块。我在上面添加了大括号。
    • 这会导致更多问题,因为它会甩掉它下面的其他elseifs
    • 老实说,牙套看起来还不错。具体语法错误是什么?
    • 不是说,只是在每个关注elseif之前有一个红色的警告框。您是否查看了 pastebin 代码以在上下文中查看整个内容?我不确定我发布它是否明显。它有点融合。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多