Отправка entry_id для встраивания в ExpressionEngine - PullRequest
0 голосов
/ 17 января 2012

Я пытаюсь найти хорошее решение моих проблем с заголовком страницы.У меня никогда не было идеального решения для их выполнения в EE, и хотя я наконец-то подумал, что совершил прорыв, я ударил кирпичную стену и, надеюсь, один из вас, более опытных специалистов по Expression Engine, сможет помочь.

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

{embed="main/.header" pre_eid="{entry_id}"}

<div id="content">              
    {exp:channel:entries channel="standard-content" url_title="{segment_1}" limit="1"}

        {preload_replace:pre_eid="{entry_id}"}  

        <h1>{title}</h1>
        {content}

    {/exp:channel:entries}
</div>      

Намерение этого состоит в том, что идентификационный номер передается в заголовочный файл, где я могу творить свою магию.Однако происходит то, что как только я вызываю {pre_eid} за пределами этого раздела записей, он выводит непарсированный тег.

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

Ответы [ 2 ]

2 голосов
/ 17 января 2012

A предыдущий ответ на эту тему может быть полезен для вас.

В основном, многие веб-разработчики будут использовать переменную Embed со встроенным шаблоном для передачи{entry_title} к глобальному шаблону встраивания, позволяющему динамический заголовок страницы :

<html lang="en">
<head>
    <meta charset="utf-8" />

    {embed="includes/header"
        title="
            {exp:channel:entries channel="{channel_name}"}
                {title}
            {/exp:channel:entries}
        "
    }
</head>

Если вы используете EE2, модуль SEO Lite позаботитсяиз всей тяжелой работы для вас с одной строкой кода:

<html lang="en">
<head>
    <meta charset="utf-8" />
    {exp:seo_lite url_title="{url_title}"}
</head>

Другое умное решение (/ через Дерек Хогу ) состоит в том, чтобы обернуть большую часть вашей страницы в один {exp:channel:entries} тег для отдельных шаблонов страниц входа, позволяющий избежать затрат на использование нескольких и дорогих запросов записей канала:

{exp:channel:entries channel="channel_name" limit="1"}
    {embed="includes/header" title="{title}"}

    <h1>{title}</h1>
    {page_content}

    {embed="includes/footer"}

    {if no_results}{redirect="404"}{/if}
{/exp:channel:entries}

Другие решения включают в себя плагин с низким заголовком (EE1, EE2) .

1 голос
/ 17 января 2012

Переменная {entry_id} не установлена ​​вне запроса записей канала. Вы должны включить его между открывающими и закрывающими тегами {exp:channel:entries}.

Попробуйте что-то вроде этого:

{exp:channel:entries channel="channel_name" url_title="{segment_1}" limit="1"}
    {embed="main/.header" pre_eid="{entry_id}"}

    {preload_replace:pre_eid="{entry_id}"}
    ...
{/exp:channel:entries}

Между прочим, переменная тега шаблона {preload_replace}, которую вы используете, раньше называлась {assign_variable} в EE1.

Предварительно загруженные замены текста оцениваются ближе к концу синтаксического анализа шаблона , поэтому их нельзя использовать для хранения битов кода EE.

С другой стороны, Фрагменты анализируются рядом с началом синтаксического анализа , так что это может быть полезно для вас другими способами.

Lodewijk Schutte ExpressionEngine Order Parse (PDF, 32 КБ) содержит все мучительные детали.

...