Хоккей, так. Вот мой встроенный шаблон, пугающий:
<? $i=0; ?>
{exp:channel:entries
channel="products"
dynamic="no"
entry_id="{embed:ids}"
}
<? $i++; ?>
{exp:playa:parents
field_id="25"
limit="1"
}
<!-- product -->
{if no_parents}
<? $i--; ?>
{/if}
{/exp:playa:parents}
{if no_results}
No results!
{/if}
{/exp:channel:entries}
<? if ($i === 0 ) { echo 'No products found!'; } ?>
Логика для этой переменной $i
заключалась в том, чтобы получить точное показание того, были ли получены какие-либо результаты. «Результат» в этом смысле относится к тому, что получает продукция от Playa.
Тест exp_channel_entries
no_results
запускается только в том случае, если {embed:ids}
пусто или встроенные идентификаторы не соответствуют записям в канале. Если метод entries
возвращает записи, но ни у одного из результатов нет родительской записи, ничего не выводится - и мне нужен был способ определить это, и я подумал: «Хм, PHP должен быть в состоянии сделать это, верно?»
Желаемый результат: 'No products found!'
выводится, когда $i = 0
, но по какой-то причине $i
всегда 0
независимо от того, какие записи выплевываются.
Да, и прежде чем вы спросите: ДА, PHP действительно включен. Пример: ниже, {embed:ids} = 41|78|79|80|81|87|106
. Когда установлено значение OUTPUT, теги PHP просто печатаются в источнике:
<? $i=0; ?>
<? $i++; ?>
<!-- product -->
<? $i++; ?>
<!-- product -->
<? $i++; ?>
<!-- product -->
<? $i++; ?>
<!-- product -->
<? $i++; ?>
<? $i--; ?>
<? $i++; ?>
<!-- product -->
<? if ($i === 0 ) { echo 'No products found!'; } ?>
Если я переключу синтаксический анализ PHP на INPUT, теги будут обработаны, но $i = 0
каждый раз.
Я добавил echo $i;
после $i=0
, $i++
и $i--
. С PHP, установленным в OUTPUT, как и раньше, операторы просто получают вывод в исходном коде страницы С PHP, установленным на INPUT, я получаю эту строку значений: 0 1 1 1 1 1 01
Итак, мои вопросы к вам, сообщество StackOverflow:
1) Почему PHP в режиме OUTPUT просто выводит теги PHP без их обработки?
2) Как вести учет количества выводимых родителей продукта?