每3次迭代后包裹Div,并计算里面的每个Div



嘿,伙计们,我下面有一段代码,它在一个div中进行3次迭代后包装项目。然而,我对如何计算该div中的项目感到困惑,因为我将其称为自定义类的条件。

因此,对于可视化,它应该看起来像这个

项目行项目项计数-3

  • 项目_项目
  • 项目_项目
  • 项目_项目

项目行项目项计数-3

  • 项目_项目
  • 项目_项目
  • 项目_项目

项目行项目项计数-2

  • 项目_项目
  • 项目_项目

我该如何处理?

这就是我到目前为止提出的

if( ($i % 3) == 0 ) { $griditemcounter = 1; }

// If is the first post, third post etc.
( ( $i % 3 ) == 0 ) ?  $html .= '<div class="project_row projectcount-'.$projectCounter.' grid-'.( ( $griditemcounter % 2 ) == 0 ? 'second' : 'first' ).'">'  :  $html .= '';                                  
$html .= '<div class="project_item grid'.$griditemcounter.'" style="background-image:url('.( $url ? $url : 'https://via.placeholder.com/940x1260').') ">';
$html .= '<a href="'.get_the_permalink().'">';
$html .= '<div class="project_item_img"><img src="'.( $url ? $url : 'https://via.placeholder.com/768x375').'" alt=""/></div>';
$html .= '<div class="et_pb_text_inner project_item_content">';
$html .= '<h3>'.get_the_title().'</h3>';
$terms = get_the_terms( get_the_ID(), $taxonomy ); 
foreach($terms as $term) {
$html .= '<p>'. $term->name. '</p>';
}
$html .= '</div>';
$html .= '</a>';
$html .= '</div>';  

( $i == ( $post_count - 1 ) || ( ++$i % 3 ) == 0 )  ? $html .=  '</div>'  : $html .= ''; 
$griditemcounter++;

我会添加一个名为Count或Tracker的变量,并在此循环之外将其设置为1。一旦你的代码迭代了一次并完成了这个过程:

projectrow projectitemcount-(在此处添加变量(

  • 项目_项目
  • 项目_项目

然后您可以在循环之外的变量中添加一个。这样,当循环再次运行时,它将在项目计数上添加2,并将其添加到名称上。

事先计算一下:这里有8个项目,所以整数除以3,得到2,再乘以3,得到6——这是你要放入的元素数量;"满";div,每个包含3个项目。

只要循环计数器变量$i是<6,输出3作为类后缀。

之后,对于最后一个div,输出8模3,在本例中也是2,作为后缀——这是将进入最后一个容器的剩余元素的数量。

快速&举例说明原理:

$data = range('A', 'H'); // array of fake data
$limit = 3;
$numberFull = floor(count($data) / $limit) * $limit;
$remainder = count($data) % $limit;
for($i=0, $l=count($data); $i<$l; ++$i) {
echo $data[$i], ' - ',
($i % $limit == 0 ? ($i < $numberFull ? $limit : $remainder) : ''), "n";
}

生成以下输出:

A - 3
B - 
C - 
D - 3
E - 
F - 
G - 2
H - 

我真的不知道你的项目项的结构,但我认为它只是一个普通的数组,比如:

$items = [
['name' => 'Project 1'],
['name' => 'Project 2'],
['name' => 'Project 3'],
['name' => 'Project 4'],
['name' => 'Project 5'],
['name' => 'Project 6'],
['name' => 'Project 7'],
['name' => 'Project 8'],
];

如果你有上面的结构,你可以array_chunk获得最多3个项目的包,然后迭代这些包来处理你的显示:

<?php
$itemsChunks = array_chunk($items, 3);
?>
<?php foreach($itemsChunks as $itemsChunk): ?>
<div class="project_row projectcount-<?= count($itemsChunk); ?>">
<?php foreach($itemsChunk as $item): ?>
<p><?= $item['name']; ?></p>
<?php endforeach; ?>
</div>
<?php endforeach; ?>

然后输出:

<div class="project_row projectcount-3">
<p>Project 1</p>
<p>Project 2</p>
<p>Project 3</p>
</div>
<div class="project_row projectcount-3">
<p>Project 4</p>
<p>Project 5</p>
<p>Project 6</p>
</div>
<div class="project_row projectcount-2">
<p>Project 7</p>
<p>Project 8</p>
</div>

你可以在线试用!

最新更新