2016-11-21 1 views
1

stackoverflow에 게시 된 다음 코드를 수정하여 임의의 클래스를 내 div에 할당 할 수있었습니다. 지금 직면하고있는 문제는 무작위 적이기 때문에 부분적으로는 물질적으로 작용한다는 것입니다.임의의 클래스를 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; 

그리고 나는 클래스 에코 : 무작위 배정 3 회를 제공하는 경우

<?php echo $class; ?> 

을 "COL S12 M6 L6"그것은 완벽하지만 더 때 또는 작동하지 않는 것보다 적습니다. array_rand가이 작업을 수행하는 가장 좋은 방법은 아닐지도 모르겠지만 지금까지는 가장 쉬운 방법이었습니다.

표시 할 항목이 6 개인 경우 수정 코드가 동일하게 사용됩니다. 나는 "col s12 m6 l6"의 2 배나 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> 

편집 :

은 여기 (I 표시 할 미만 4 개 게시물이있을 때) 나는 다른 상황을 처리 부분을 포함하는 전체 코드입니다 나는 경우 중첩 제거했습니다.

편집 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

이 옵션은 좋은 것으로 보이지만 나는 내 코드로 작업 할 수 없습니다. foreach를 사용하지 않고 나머지 코드와도 작동하지 않습니다 (4 개의 게시물 또는 $ 클래스로 표시된 이후의 게시물 수가 4 개 미만인 경우). 원래 게시물에 전체 코드를 추가했습니다. –

+0

@SwayRaines 내 대답을 받아 들였습니다. 코드를 작동시킬 수 있었습니까? 내 대답은 실제 코드가 내가 보여준 것과 다를 가능성이 높기 때문에 논리적 인 적응으로 사용하기위한 것일뿐입니다. – MonkeyZeus

0

당신은 (내가 제대로 질문을 이해 한 경우)이 코드를 사용할 수 있습니다 전체 (12) 부분을 달성하기 위해 col 공간의. 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); 

당신이 볼 수 있듯이, 생명 그 COL 공간을 채우기 때문에 일치하는 모든 (12) (예를 들어 l3 4 정물화의 배수를 가지고, 아직 l6 2 정물화의 배수로

관련 문제