创建循环遍历块的块构建器按顺序拉出表单数据库。
if( loop_blocks()) {
while( loop_blocks()) {
if( have_block('standard-content-block')) {
echo 'standard-content-block';
}
elseif( have_block('executive-intro-block')) {
echo 'executive intro block';
}
}
}
我的函数loop_blocks按顺序从数据库中提取块并将数组设置为全局变量:
function loop_blocks() {
global $db;
$page_id = get_page_id();
$GLOBALS['loop_position'] = 0;
$loop_position = $GLOBALS['loop_position'];
$stm = $db->prepare("SELECT * FROM page_blocks WHERE page_id = :id ORDER BY `block_order` ASC");
$stm->execute(array(':id' => $page_id));
$res = $stm->fetchAll();
$GLOBALS['block_loop'] = $res;
if(!$res) {
return false;
} elseif(!$GLOBALS['block_loop'][$loop_position]) {
return false;
} else {
return true;
}
}
函数has_block获取当前循环位置并确定名称是否确定,是否存在于数组中并增加循环位置:
function have_block($block_name) {
$loop_position = $GLOBALS['loop_position'];
if(!$GLOBALS['block_loop'][$loop_position]) {
return false;
} elseif(!$GLOBALS['block_loop'][$loop_position][block_name] = $block_name) {
return false;
} else {
$GLOBALS['loop_position'] = $loop_position+1;
return true;
}
}
这会返回一个无限循环但是我无法找到将while循环移动到下一步的方法吗?
编辑我正在使用while循环,因为函数has_block将为当前块id设置一个全局变量。然后,这将在名为the_element的函数中使用。如:
if( loop_blocks()) {
while( loop_blocks()) {
if( have_block('standard-content-block')) {
the_element('heading');
}
}
}
如果我不使用函数has_block来设置它,那么我需要将foreach循环中的块id作为第二个参数传递给每个元素。
答案 0 :(得分:0)
我修正了这个,因为@Jim,注意到我在loop_blocks()中重新设置了loop_position,这就是while循环无限重复的原因。这是一个简单的输入错误的情况:
} elseif(!$GLOBALS['block_loop'][$loop_position][block_name] = $block_name) {
return false;
应该是:
} elseif($GLOBALS['block_loop'][$loop_position][block_name] != $block_name) {
return false;
请注意,我在不正确的地方有感叹号。 这现在可以完美地满足我的需要。