Как встраивать блоки данных в ExpressionEngine, не используя много каналов - PullRequest
1 голос
/ 13 марта 2012

Я использовал Drupal и думаю, что делаю это неправильно с EE. Я хочу создать много блоков встроенных записей, созданных пользователем, в некоторых шаблонах, но не хочу создавать канал для каждого из них. В Drupal я мог бы создать блок, соответствующий потребностям клиента, но я в тупик от того, как это сделать в EE. Например, у меня есть три разных области контента на главной странице: верхняя / средняя и нижняя. Клиент не хочет развертывать записи в блоге, он хочет, чтобы в каждую из них помещался конкретный контент Единственный способ, который я вижу - мне нужно создать три разных канала и встраивать их как таковые для верха, меняя канал на середину и низ для каждого блока. Есть ли лучший способ?

{exp:channel:entries channel="top" disable="categories|member_data|pagination" limit="1"
sort="desc" dynamic="no" }

Буду ли я использовать группу категорий и категории для этого? То есть я бы создал верхнюю, среднюю и нижнюю категории для вызова этих записей в моем "домашнем" канале?

Ответы [ 3 ]

0 голосов
/ 19 марта 2012

Менее чем за 1 час оплачиваемой работы вы получите сотни, если не тысячи часов усилий, собранных для работы.Кто-то всегда платит за код, почему бы вам не на этот раз?:)

0 голосов
/ 19 марта 2012

Обычно мы создаем канал, называемый чем-то вроде «общего содержимого», с одним полем, которое может иметь любой тип собственного форматирования (в основном, ни один или xhtml), а затем используем его для одноразовых битов, которые не подходят в другие каналы. Клиенту трудно найти эти записи в CP для редактирования, поэтому мы создаем внешние ссылки «edit», которые открывают правильную запись в CP и видимы только для групп пользователей с разрешениями на редактирование контента.

Это станет волосатым, только если вам действительно нужно несколько настраиваемых полей для этого использования.

Я никогда не использовал Low Variables, но у меня сложилось впечатление, что это может быть полезно здесь.

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

0 голосов
/ 13 марта 2012

Решение, которое вы нашли, работает, но я обнаружил, что в конечном итоге оно не обеспечивает гибкости, необходимой многим клиентам.

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

1) Определите данные своего блока как каналы.Например, у меня часто есть Sidbar Ad, сценарии боковой панели и текстовые каналы боковой панели.

2) Используйте тип поля playa (или другой тип реляционного поля) для создания отношений из родительской записи (страницы)к этим типам субконтента.

Обычно это выглядит примерно так:Вам, конечно, нужно будет перенести все эти данные в ваши шаблоны следующим образом:

<div id="right-side">
{exp:playa:children}

    {if channel_short_name == 'sidebar_javascript'}
        {cf_sidebar_js}
    {/if}

    {if channel_short_name == 'sidebar_videos'}
        {exp:channel_videos:videos entry_id="{entry_id}" embed_width="300" embed_height="238"}
        <h4>{title}</h4>
        {video:embed_code}
        <p class="caption">{video:title}</p>
        {/exp:channel_videos:videos}

    {/if}

    {if channel_short_name == 'sidebar_ads'}

     {exp:adman:show group="{cf_sidebar_adman_block}" order="RANDOM" limit="{cf_sidebar_adman_block_number_of}"}
         <a href="{ad_url}" target="_blank">
            <img src="{ad_image}" alt="{ad_alt}" />
         </a>
     {/exp:adman:show}    
    {/if}

{/exp:playa:children}
</div>
...