我需要了解如何创建一个公式,根据显示的div数确定要添加到div
元素的类。
目前我正在使用ACF创建一个转发器字段,该字段将有一个子字段链接到基于管理员选择的页面。这些字段将基于while循环显示在它们自己的div中。我正在使用诸如col-sm-12
,col-sm-6
和col-sm-4
之类的Bootstrap类。
while( have_rows( 'project_repeater' ) ): the_row();
$post_object = get_sub_field( 'project_type' );
$count = count( get_field('project_repeater') ); // Output 4
$mod = $count % 3; // Output 1
if( $post_object ):
$post = $post_object;
setup_postdata( $post );
$classname = '';
if( $mod == 1 ) {
if( $count == 1 ) {
$classname .= 'col-sm-12';
} elseif( $count == 4 ) {
$classname .= 'col-sm-6';
} else { // $count == 7
$classname .= 'col-sm-4';
}
} elseif( $mod == 2 ) {
if( $count == 2 ) {
$classname .= 'col-sm-6';
} elseif( $count == 5 ) {
// $classname .= 'col-sm-12';
} else { // $count == 8
// $classname .= 'col-sm-4';
}
} else { // $mod == 0
$classname .= 'col-sm-4';
}
?>
<div class="project-cat <?php echo $classname; ?>">
<a href="<?php the_permalink( $post ); ?>">
<h5><?php the_title(); ?></h5>
<p><?php the_excerpt(); ?></p>
</a>
</div>
<?php
wp_reset_postdata();
endif;
endwhile;
现在$count == 5
,我需要它将前3个div设置为col-sm-4
,然后将最后2个div设置为col-sm-6
(这将按此顺序显示div彼此重叠:3,2)。
当$count == 7
时,它需要与$count == 5
时相似,但前3个为col-sm-4
,后4个为col-sm-6
(3,2,2) )
$count == 8
时,如果我将前6个作为col-sm-4
,将后2作为col-sm-6
(3,3,2),则会略有不同。
不是在if语句之后使用if
语句,而是必须有更好的方法来创建一个公式,该公式将根据显示的div
元素的数量来确定要使用的类。
答案 0 :(得分:1)
这是更多的数学和逻辑问题,而不是编码问题。
为什么不1.获得元素数量。
除以3并将结果置于最低点。所以你可以知道你将拥有多少行col-xx-4。
假设您共有14个项目。比拳头12元素应该有col-md-4。 如果你绕14/3 = 4 剩下的是14 - (3 * 4)= 2所以如果剩下的是1而不是你可以使用col-md-12类,如果它是2而不是col-md-6。
所以在输出时你将class col-md-4分配给前12个元素(round 14/3 = 4)然后根据它们的数量为其余元素(14 - (3 * 4)= 2)分配合适的类(1或2)
你觉得它对你有用吗?
设置一些变量
$ total =项目总数。您只需使用计数器运行循环即可。
$md4-limit = floor($total/3)*3;
$remaining = $total - $md4-limit;
然后当你运行循环时,使用$ i并为每个元素增加该值并在输出检查时
if ($i <= $md4-limit) {
$class = ' col-md-4 ';
} else {
if($remaining == 1) { $class = ' col-md-12 '; }
if($remaining == 2) { $class = ' col-md-6 '; }
}
然后将类调用到列html中,类应为:)
另一个选项是将行宽选项添加到ACF转发器字段,并在后端构建网格。
答案 1 :(得分:0)
感谢你,尼克,你帮我解决了很多问题,我确实发现了我做错了什么以及为什么它没有像你说的那样展示。我没有正确定义$i
。但这里是代码,一切正常!再次感谢你尼克!
$count = count( get_field('project_repeater') );
$limit = floor( $count / 3 ) * 3;
$remaining = $count - $limit;
$i = 0;
while( have_rows( 'project_repeater' ) ): the_row();
$post_object = get_sub_field( 'project_type' );
if( $i < $limit ) {
$classname = 'col-sm-4';
} else {
if( $remaining == 1 ) {
$classname = 'col-sm-12';
}
if( $remaining == 2 ) {
$classname = 'col-sm-6';
}
}
if( $post_object ):
$post = $post_object;
setup_postdata( $post );
?>
<div class="project-cat <?php echo $classname; ?>">
<a href="<?php the_permalink( $post ); ?>">
<h5><?php the_title(); ?></h5>
<p><?php the_excerpt(); ?></p>
</a>
</div>
<?php
wp_reset_postdata();
endif;
$i++;
endwhile;