【问题标题】:While loop making even/odd blocks with uneven number. Hard code second blockWhile 循环使偶数/奇数块具有奇数。硬编码第二块
【发布时间】:2013-06-21 22:17:35
【问题描述】:

可能我的标题比较难看懂,如果大家能看得更清楚,请编辑我的帖子谢谢。

所以我做了什么我创建了一个while循环并希望块像X一样

我每次都隔着两个街区。但我想要这个X 表格。 所以它将是(block 1) [gray] , (block 2) [darkgray] 然后去(block 1) [darkgray] , (block 2) [gray]。为了实现这一点,我在我的 while 循环中创建了一个 if 函数,在 if 之前我创建了一个counter++。 计数器从 0 开始并添加 1 直到它变成 3,因为 3 使它不均匀,它会形成这个 X 形式。但问题是前两个区块会因为早期的奇数3而一直保持灰色。

有谁知道我可以如何硬编码前两个块?

另外,在我的代码中,我以降序从数据库中取出信息。

它是在 wordpress 中创建的,但更多的是关于我在这里制作的 php 函数。

It has to be. 
First = Gray
Second = Dark Gray
Third = Dark Gray
Fourth = Gray.

这应该一直在重复。

enter code here

已经制作的代码(因为代码是用不同的语言制作的,我将其删除并替换为 cmets 以便于理解):

      global $wp_query;
      $temp = $wp_query; 
      $args = (array(
              'post_type' => 'news',
              'posts_per_page' => 9999,
             'post__not_in' => array(835),
             'order' => 'DESC'));
            $wp_query = new WP_Query();
       $counter = 0;
      $wp_query->query($args); 
      while ($wp_query->have_posts()) : 
           $wp_query->the_post(); 
      ?>
      <?php $counter ++; 
      if($counter == 3) { ?>
       /** here comes the dark gray block **/
     <?php $counter = 0; ?>
     <?php }else { ?>
      /** here comes the gray block **/
     <?php } ?>

所以在社区的大量帮助下,我最终找到了我的解决方案。我觉得自己很愚蠢,以至于我自己没有发现这一点。使用此方法,您将获得(块 1 = 灰色)、(块 2 = 深灰色)、(块 3 = 灰色)、(块 4 = 深灰色)。 解决方案

 <?php $counter ++; 
  if($counter == 1) { ?>
   /** here comes the gray block **/
 <?php }else if($counter == 2 { ?>
  /** here comes the dark gray block **/
 <?php }else if($counter == 3 { ?>
  /** here comes the gray block **/
 <?php }else if($counter === 4 { ?>
  /** here comes the dark gray block **/
 <?php $counter = 0; } ?>

所以我最终在这里所做的是我创建了第 4 个着色手册,然后我将它重置为零并让它循环。因为我每次都有一排两个街区。

【问题讨论】:

    标签: php css wordpress


    【解决方案1】:

    而不是使用条件将所有内容放在父 div 中,并为这样的孩子放置 css

    <div class="PARENT_DIV">
         while ($wp_query->have_posts()) : $wp_query->the_post(); 
          ?>
          <div id="CHILD_DIV">
             YOUR CONTENT 
          </div>
         <?php } ?>
    </div>
    
    <style>
        .PARENT_DIV:nth-child(odd){ background-color:#eee; }
        .PARENT_DIV:nth-child(even){ background-color:#fff; }
    </style>
    

    【讨论】:

    • 注意:在旧版本的 IE 中不起作用(可以使用 Javascript 修复)。如果您不关心 IE,或者如果您的大多数用户不使用它,那么这是一个很好的解决方案。它是演示的一部分(而不是编程逻辑),所以使用 CSS 是个好主意。
    • 我认为 CSS3 适用于 IE9,但如果您必须专注于低于此的版本,则必须使用 @Sverri M. Olsen 所说的 javascript..
    • 这是斑马条纹。它将重复块 1 为灰色,块 2 为灰色。但我希望它不断地从灰色、深灰色切换。深灰色,灰色
    • 你想要灰色,深灰色,深灰色,灰色,深灰色,深灰色,灰色,深灰色,深灰色,像这样还是其他......请给颜色链
    • @WesleyCheung 可以通过为 n 设置适当的值来为孩子提供任何颜色组合。检查此 url 以了解有关通过 css w3schools.com/cssref/sel_nth-child.asp 选择孩子的更多信息
    【解决方案2】:

    使用很简单

    % 是模运算符。

    <?php
    for($counter=0; $counter<10; ++$counter)
    echo (!($counter % 3)  ? "gray" : "dark gray").'<br>'; 
    ?>
    

    输出

    gray
    dark gray
    dark gray
    gray
    dark gray
    dark gray
    gray
    dark gray
    dark gray
    gray
    

    如你所愿。

    我创建了 fiddle 来向您展示它是如何工作的。

    Check fiddle

    【讨论】:

    • 嗨罗伯特,我想要的是第一个 = 灰色 第二个 = 深灰色 第三个 = 深灰色第四个 = 灰色
    • @WesleyCheung 检查更新版本。我还创建了小提琴。 phpfiddle.org/main/code/up3-z6e
    • 我检查了 phpfiddle,我看到它确实 1. 灰色 2. 灰色 3. 深灰色。这就是我已经拥有的。应该是 1. 灰色 2. 深灰色 3. 深灰色 4. 灰色
    • 非常感谢。我还是有问题。我的块的设置是 [1] [2] (新行) [3] [4] 等等。它必须是 [1] - 灰色,[2] - 深灰色,[3] 深灰色,[4] 灰色,但最终在 7-8 号我得到两个都是深灰色的块。你能帮我解决这个问题吗?
    • 我不明白你想要 1 块灰色然后 2 深灰色和 1 灰色和 2 深灰色对吗?把某种数组放在它应该的样子。
    【解决方案3】:

    其他答案有正确的想法,但设法制作斑马条纹,这不是您要求的。这是一个展示其工作原理的简单解决方案,您需要对其进行修改以适合您的风格。

    我将颜色放入一个数组中,然后使用模数运算符,但基数为 4,它将返回值 0,1,2,3,0,1,2,3,0,1...在你的循环里面。使用它作为数组的索引来获取颜色。

    $colours = array("gray","darkgray","darkgray","gray");
    
    $counter = 0;
    
    while (condition) {
        $colour = $colours[$counter % 4];
        //your code here
    
        $counter++;
    }
    

    【讨论】:

      【解决方案4】:

      你也可以这样做

      $colour = "gray";
      
      while (//loop though posts){
      
      $colour = ($colour=="gray")?"darkgray":"gray";
      //do something with colour
      

      这不需要额外的计数器,它只使用颜色变量

      这使用三元运算符 http://php.net/manual/en/language.operators.comparison.php

      【讨论】:

      • 代码错误。你检查过吗?语句中没有您错过? 的三元运算符。
      • 现已更新。有一个额外的 : 而不是 ?
      猜你喜欢
      • 2011-12-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多