嵌套else if语法

时间:2012-10-24 19:47:21

标签: php javascript syntax if-statement

如果标题长度超过40个字符,我正在修改面包屑脚本以追加'...'。我得到的那部分很好,但我不能正确的是如何将它嵌入这个庞大的脚本中,如果它长度不超过40个字符就可以保留它。

我甚至需要其他人吗?我从未遇到过多个if没有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;

      }

3 个答案:

答案 0 :(得分:0)

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

我还要说你应养成使用标准化写法if / else语句的习惯。在我看来,你的代码可能搞砸了,因为你有一些没有花括号的if语句和一些。例如,如果您要在所有情况下使用花括号,并对它们使用适当的缩进,那么您可以非常清楚地发现有和其他条件遵循其他条件的问题。

举个例子:

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;
    }
}

对我而言,即使它稍微冗长一点,也会更加清晰。很明显,最后的其他 - 如果没有意义。

顺便说一句,在修复逻辑时,请确保考虑如果字符串长度正好为40个字符会发生什么。

答案 1 :(得分:0)

看起来你可能会遗漏一些大括号

} 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 :(得分:0)

逻辑不明确。您还没有处理长度恰好为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