2016-11-21 36 views
1

继在stackoverflow上发布后,我能够修改我的代码,为我的div指定一个随机类。我现在面临的问题是,因为它是随机的,所以它与materializecss的部分工作。在php中指定随机类,但限制类可以归因的时间数

基本上,当我有5或6个职位来显示我想随机化的外观和各种列大小。只有两个选项(无论是6列宽还是3列)。每个“行”应该总共有12列。

这是我的问题:我怎样才能限制“col s12 m6 l6”类的给定时间?

下面的代码:

if($count == 5): 
    $the_class = array(
     'col s12 m6 l3', 
     'col s12 m6 l6' 
    ); 
    $class = $the_class[array_rand($the_class)]; 

endif; 

然后我附和类:

<?php echo $class; ?> 

当随机分配给3倍的“山坳S12 M6 L6”这是完美的,但是当它更或少于它不工作。 我知道array_rand可能不是实现这个目标的最好方法,但它对我来说是最简单的方法。

我要使用相同的代码和修改的时间,当我有6项显示。我认为,第二部分应该是“col s12 m6 l6”的2倍或4倍。

这里是全码为包括在哪里处理其他情况下(当我具有小于4级的职位以显示)的部分:

<?php 
    $my_query = new WP_Query($query_args); 
    $count = $my_query->post_count; 
    $i = 1; 
    query_posts($query_args); 
    while (have_posts()) : 
    the_post(); 
     // For 1-4 create a single row 
     if($count == 1)$class = "col s12"; 
     if($count == 2)$class = "col s12 m6 l6"; 
     if($count == 3)$class = "col s12 m4 l4"; 
     if($count == 4)$class = "col s12 m6 l3"; 

     //For 5 videos 
     if($count == 5) { 
      $the_class = array(
       'col s12 m6 l3', 
       'col s12 m6 l6' 
      ); 
     $class = $the_class[array_rand($the_class)]; 
     } 
?> 
<div class="row"> 
    <div class="<?php echo $class; ?> featured-videos-item"> 
     <?php if (has_post_thumbnail()): ?> 
     <div class="featured-videos-item-content featured-videos-low" style="background: url('<?php echo get_thumbnail_url($post->ID); ?>') 50% 50% no-repeat; background-size: cover;"> 
     <?php endif; ?> 

      <div class="featured-videos-item-content--table"> 
       <div class="featured-videos-item-content--cell"> 
        <div class="overlay"></div> 
        <a class="featured-videos-link" href="<?php the_permalink(); ?>"></a> 
         <h3 class="featured-videos-title with-post--meta"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3> 
        </div> 
       </div> 
      </div> 

     </div> 

    </div> 
<?php 
    $i++; 
    endwhile; 
    wp_reset_query(); 
?> 
</div> 

编辑:我已删除了嵌套如果。

编辑2:这里的链接的地方,我发现这个解决方案后Trying to get random array value to echo on element class

编辑3:$rand = array_rand($the_class);似乎并不必要和代码工作没有它,但我仍然不知道如何追查或限制使用“col s12 m4 l6”的时间。

+0

东西在你的。代码是错误的...非常错误,也许链接到你引用的前一个问题?顺便说一下,嵌套的if是不必要的;因为如果它在第一个if中,那么$ count已经是5 – Cunning

+0

You将不得不跟踪列宽以前使用过多少次,如果超过某个阈值(2或4取决于大小),则不要再次选择该值(或将其从可用选项中删除)。 –

+0

'$ rand = array_rand($ the_class)'的意义是什么;'当你不使用'$ rand'时?你在别的地方使用它吗? –

回答

0
  1. 请使用大括号;它使代码86倍以上的可读性和可维护性
  2. 我认为这应该工作:

if($count >= 5){ 

    $l = array(3, 6); 
    $total_cols = 0; 

    echo '<div class="row">'; 
    foreach($posts as $post){ 
     if($total_cols < 9){ 
      $chosen_l = array_rand($l); 
     } 
     else{ 
      $chosen_l = 3; 
     } 

     echo '<div class="col s12 m6 l'.$chosen_l.'"></div>'; 

     $total_cols += $chosen_l; 

     if($total_cols === 12){ 
      $total_cols = 0; 
      echo '</div><div class="row">'; 
     } 
    } 
    echo '</div>'; 
} 
+0

这个选项看起来不错,但是我无法让它与我的代码一起工作,因为我' m没有使用foreach,也没有与其他代码一起工作(当我有4个帖子或更少,因为它们由$ class显示)我已经在我原来的帖子中添加完整的代码。 –

+0

@SwayRaines我看到你接受了我的答案。你能够让你的代码工作吗?我的回答只是作为一种合理的改编,因为我意识到你的实际代码可能与我所展示的不同。 – MonkeyZeus

0

您可以使用此代码(如果我正确地理解你的问题)来实现一个完整的12部分的空间。见this

<?php 
!defined('MAX_LIFE')?define('MAX_LIFE',3):null; 
$classes = array(
    array('life' => MAX_LIFE%4 == 0 ? MAX_LIFE : (MAX_LIFE%4 == 1 ? MAX_LIFE+3 : (MAX_LIFE%4 == 2 ? MAX_LIFE+2 : MAX_LIFE+1)), 'class' => 'col s12 m6 l3', 'space' => 3), 
    array('life' => MAX_LIFE%2 ? MAX_LIFE+1 : MAX_LIFE, 'class' => 'col s12 m6 l6', 'space' => 6), 
); 
$memory = 0; 
do 
{ 
    if ($classes[0]['life'] > 0 && $classes[1]['life'] > 0) 
     $idx = rand(0,1); 
    else if ($classes[0]['life'] > 0) 
     $idx = 0; 
    else if ($classes[1]['life'] > 0) 
     $idx = 1; 
    else 
     break; 
    if ($memory + $classes[$idx]['space'] > 12) 
     continue; 
    else if ($memory + $classes[$idx]['space'] == 12) 
     $memory = 0; 
    else 
     $memory += $classes[$idx]['space']; 
    $classes[$idx]['life']--; 
    echo $classes[$idx]['class'] . "\n"; 
} while(1); 

正如你所看到的,生活必须匹配​​,这样山坳空间填满所有12个(如l3有4个静物的倍数,但l6有2个静物倍数