Я придумал следующий код:
<?php
if (block_rows('option') : while ( block_rows( 'option' ) ) : block_row( 'option' );
if ( !isset($id) ) { // meet only on the first iteration
$a = 1;
}
elseif ( isset($id) && $id == block_sub_value('ID') ) {
$a++;
}
elseif ( isset($id) && $id != block_sub_value('ID') ) {
$a = 2;
}
$id = block_sub_value('ID');
?>
<h1> Option - <?=$id;?> </h1> // prints only the ID
<p> Sub Option - <?=$id . ' - ' . $a;?> <p> prints ID and the $a
<?php endwhile; endif;?>
Логика, которую я пытаюсь построить, такова:
У меня есть список с некоторыми родительскими заголовками с номером $id и дочерним содержимым, имеющим родительский номер $id, а также номер $a. Что-то вроде:
Пункт, который не работает хорошо, на самом деле является первым условием. Самая первая $a начинается с 2, а не с 1, почти как если бы после выполнения первого условия функция продолжала проверять остальные, заменяя значение $a. Я не знаю, почему это происходит.
Не может, потому что, как показано на рисунке, только дочерний элемент первого родителя может иметь 1. Все остальные должны начинаться с 2. Это то, что правило, которое устанавливает $a = 1, только если $id не установлен (первая итерация) это для.
Я неправильно понял вопрос, каков текущий выход и что ожидается?
Первый дочерний элемент уже печатал число 2, несмотря на правило, согласно которому, если $id еще не установлен, $a должен быть равен единице. Почему-то это правило не работало. Но я решил проблему, изменив всю логику.
После того, как вы запустили цикл while и прошли первую итерацию, значение isset($id) равно true и поэтому не будет сброшено до 1.
Следовательно, измените часть:
<?php
if (block_rows('option') : while ( block_rows( 'option' ) ) : block_row( 'option' );
if ( !isset($id) ) { // meet only on the first iteration
$a = 1;
}
// the rest of the code
на что-то вроде:
<?php
// set initial $oldid to be a value which is not possible
$oldid = "-100";
if (block_rows('option') : while ( block_rows( 'option' ) ) : block_row( 'option' );
if ( $oldid !=$id ) { // meet only on the first iteration
$oldid=$id;
$a = 1;
}
// the rest of the code (please further amend if logically requires)
Это только один из способов. Надеюсь, что это даст вам некоторые идеи
Это точное решение по какой-то причине не сработало, но оно дало мне аналогичную идею, которая сработала. Спасибо, брат!
ваше 3-е правило устанавливает $a равным 2, оно должно установить его равным 1