#php #templates #expressionengine
#php #шаблоны #expressionengine
Вопрос:
Хокай, итак. Вот мой встроенный шаблон, охлаждающий:
<? $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 на ВВОД, теги обрабатываются, но $i = 0
каждый раз.
Я добавил echo $i;
после $i=0
, $i
, и $i--
. Если PHP настроен на ВЫВОД, как и раньше, операторы просто выводятся в исходном коде страницы. Если для PHP установлено значение INPUT, я получаю эту строку значений: 0 1 1 1 1 1 01
Итак, мои вопросы к вам, сообщество StackOverflow:
1) Почему PHP в режиме ВЫВОДА просто выводит теги PHP без их обработки?
2) Как я могу вести подсчет количества выводимых родительских продуктов?
Ответ №1:
Я не могу сказать вам, почему ваш PHP не анализируется при переключении на вывод (никогда не видел такого раньше), но я думаю, что есть более простой способ сделать это:
{exp:query sql="SELECT child_entry_id FROM exp_playa_relationships WHERE parent_field_id = 25 AND child_entry_id IN({embed:ids})"}
{exp:playa:parents field_id="25" entry_id="{child_entry_id}" limit="1"}
<!-- product -->
{/exp:playa:parents}
{if no_results}<p>No products found!</p>{/if}
{/exp:query}
Этот запрос вернет только идентификаторы записей, у которых действительно есть родители. Единственное, что вам нужно будет сделать, это изменить переданную ids
вставку с использования каналов на запятые.
Вы также можете попробовать это:
{exp:channel:entries channel="products" entry_id="0{exp:query sql="SELECT parent_entry_id FROM exp_playa_relationships WHERE parent_field_id = 25 AND child_entry_id IN({embed:ids})"}|{parent_entry_id}{/exp:query}" dynamic="no"}
<!-- product -->
{if no_results}<p>No products found!</p>{/if}
{/exp:channel:entries}
Ответ №2:
Я понимаю, что эта тема старая, но я публикую на всякий случай, если у кого-то еще есть похожие проблемы, и он не может следовать удивительному решению Дерека из-за архитектурных проблем.
Мои проблемы были решены с —
- Добавление полных начальных тегов php (с помощью php)
-
Удалите все фигурные скобки и перейдите к альтернативному синтаксису
foreach(items as item): ... endforeach;
-
Изменение разрешений для файла на 755.
-
Изменение владельца группы файла на веб-пользователя по умолчанию
-
Удаление всех записей диспетчера шаблонов (если это не сработает, просто отредактируйте файл в самом диспетчере шаблонов)
Надеюсь, это поможет.