Как использовать переменные PHP в моем шаблоне ExpressionEngine для подсчета? - PullRequest
0 голосов
/ 12 октября 2011

Хоккей, так. Вот мой встроенный шаблон, пугающий:

<? $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) Как вести учет количества выводимых родителей продукта?

Ответы [ 2 ]

0 голосов
/ 07 мая 2013

Я понимаю, что эта ветка старая, но я публикую сообщение на тот случай, если у кого-то еще возникнут аналогичные проблемы, и он не сможет следовать замечательному решению Дерека из-за архитектурных проблем.

Мои проблемы были решены с помощью -

  1. Добавление полных стартовых тегов php (с php)
  2. Удаление всех скобок и использование альтернативного синтаксиса

    foreach(items as item):
    
        ...
    
    endforeach;
    
  3. Изменениеразрешений для файла 755.

  4. Изменение владельца группы файла на веб-пользователя по умолчанию

  5. Удаление всех записей менеджера шаблонов (еслиэто не работает, просто отредактируйте файл в самом менеджере шаблонов)

Надеюсь, это поможет.

0 голосов
/ 12 октября 2011

Я не могу сказать вам, почему ваш 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}
...