블록을 반복하는 블록 작성기를 작성하면 양식 데이터베이스를 순서대로 가져옵니다. While 루프를 통해 배열
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;
}
}
함수 have_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;
}
}
이 반환 및 I는 t에 while 루프를 이동하는 방법을 알아낼 수 없다 그 다음 단계?
EDIT have_block 함수는 현재 블록 id에 대한 전역 변수를 설정하므로 while 루프를 사용하고 있습니다. 그런 다음 the_element라는 함수 내에서 사용됩니다. 예를 들면 : 나는이를 설정하는 기능 have_block를 사용하지 않는 경우
if(loop_blocks()) {
while(loop_blocks()) {
if(have_block('standard-content-block')) {
the_element('heading');
}
}
}
, 나는 두 번째 인수로 모든 요소에 foreach 루프에서 블록 ID를 전달해야 할 것입니다.
왜 도대체 while 루프가 필요합니까? –
'foreach' 루프를 사용하여 전체 배열을 살펴볼 수 있습니다. 'foreach ($ res as $ item) {// 물건을해라}' –
'loop_blocks()'에서'loop_position'을 0으로 재설정 할 때마다 루프를 반복합니다. 글로벌 변수는 일반적으로 좋지 않지만이 경우에는 완전히 필요하지 않습니다. – Jim