This page in: English - Deutsch - Español - Français - Italiano - Lietuvių - Nederlands - Norsk - Polski - Русский - Svenska - Tiếng Việt - عربي - 日本語 简体中文
Тег Content_Dump
Введение
Для версии 0.8.x:
Загрузка тега по адресу: [1]
Обязательных параметров для тега нет, если ни один параметр не указан, то в выдачу будут включены все страницы для сайта. При стандартном использовании тега Smarty не будет обрабатываться или фильтроваться из содержимого страницы.
Для начала работы нужно добавить {content_dump} в шаблон или содержимое страницы. При этом на месте добавления этого тега ничего выведено не будет. Это нормально и говорит скорей всего о том, что тег работает правильно.
Чтобы увидеть выдачу нужно добавить дополнительный код Smarty. Самое простое использование – это обращение к объекту, создаваемому тегом. Например, {$dump[0]->content->title} выдаст заголовок первой страницы. Следовательно, полный пример для выдачи заголовка первой страницы выглядит так: {content_dump} {$dump[0]->content->title}.
Основное
Используя цикл Smarty можно выдать заголовки всех страниц на сайте:
{content_dump}
{foreach from=$dump item=dump}
{$dump->content->title}
{/foreach}
Естественно, заголовок страницы – это не единственная информация, которую может предоставить этот тег. В зависимости от параметров, которые Вы будете использовать в теге, Вы cможете легко получать информацию о родительской странице или об авторе и дате создания страницы. Например, {content_dump this_only=$content_id users=true} позволит получить всю информацию о пользователе, который создал страницу, включая его логин, имя и фамилию, а также адрес почты и его ID.
Автор материала: {$dump[0]->created->by->firstname} {$dump[0]->created->by->firstname}. Если использовать эту строчку в шаблоне под содержимым страницы (после тега {content}), то на каждой странице будет автоматически добавляться полное имя пользователя (не логин!). Вы видите, что Вы можете получить практически всю информацию о странице, а также о компонентах с ней связанных.
Теперь давайте попробуем более сложный пример. Нам нужны заголовки страниц, которые являются дочерними по отношению к одной определенной нами:
{content_dump start_id="17"}
Этот пример включает в себя не только дочерние страницы, но и заголовок родительской страницы. Если родительская страница не нужна, то просто используйте параметр exclude="17", которым можно исключить любые страницы из списка вручную. К примеру, если страница с идентификатором (page_id) 25 также должна быть исключена, то используйте перечисление через запятую в параметре exclude="17,25". Хотите добавить дату создания страницы? Без проблем. Полный пример будет выглядеть так:
{content_dump start_id="17" exclude="17,25"}
{foreach from=$dump item=dump}
{$dump->content->title}
{$dump->created->date}
{/foreach}
Слишком много страниц в выдаче? А Вам нужно, допустим, только 5. Давайте добавим ограничение по количеству страниц, используя параметр limit_count=5. Готово. А если хотите увидеть страницы с 6 по 10, то используйте дополнительно limit_start=6. Все вместе это будет выглядеть так:
{content_dump start_id="17" exclude="17,25" limit_start=6 limit_count=5}
Если нужна определенная сортировка страниц, допустим, по дате создания в обратном порядке, то используйте встроенный механизм управления порядком страниц в выдаче тега. Например, для показа последних 10 страниц, которые являются дочерними страницы с идентификатором 17, используйте этот код:
{content_dump start_id="17" exclude="17" limit_count=10 first_sort="created" first_sort_order="down"}
Теперь добавим ссылки и содержание страниц к выдаче и немного форматирования. Для этого ничего не нужно изменять в самом теге. Мы просто используем HTML (XML, JS или CSS или что-то другое по выбору) вокруг тегов Smarty в шаблоне или странице. Пример:
{content_dump start_id="17" exclude="17,25" block_name="summary"}
<h1>Обзор продукции:</h1>
{foreach from=$dump item=dump}
<h2>{$dump->content->title}</h2>
<span class="date">{$dump->created->date}</span>
{$dump->content_>data}
<a href="{$dump->content->alias}.htm">Подробней: {$dump->content->title}</a>
{/foreach}
В выдаче также может использоваться любой блок контента, который присутствует в шаблоне. Для этого просто перечислите названия нужных Вам блоков в параметре extensions. Пример:
{content_dump start_id="17" exclude="17,25" extensions="summary,image,some_other_block"}
Чтобы после этого показать данные из определенного блока, обращайтесь к нему по его названию, например:
{$dump[0]->extensions->some_other_block->data}
{$dump[0]->extensions->image->data}
{$dump[0]->extensions->summary->data}
Список элементов, доступных через тег
Тег позволяет получить следующую информацию:
$dump [ n ] -> item = Порядковое число элемента в выдаче (integer) $dump [ n ] -> content -> id $dump [ n ] -> content -> alias $dump [ n ] -> content -> title $dump [ n ] -> content -> show $dump [ n ] -> content -> active $dump [ n ] -> content -> data $dump [ n ] -> parents -> id $dump [ n ] -> parents -> alias $dump [ n ] -> parents -> title $dump [ n ] -> created -> date $dump [ n ] -> created -> by -> username $dump [ n ] -> created -> by -> last_name $dump [ n ] -> created -> by -> first_name $dump [ n ] -> created -> by -> email $dump [ n ] -> modified -> date $dump [ n ] -> modified -> by -> username $dump [ n ] -> modified -> by -> last_name $dump [ n ] -> modified -> by -> first_name $dump [ n ] -> modified -> by -> email $dump [ n ] -> extension (будет иметь значение 1 если во всех дополнительных блоках есть содержимое, в противном случае: 0)
Для каждого блока информация забирается при помощи обращения к имени блока в элементе $dump [ n ] -> extensions (обратите внимание на s в конце параметра в отличие от последнего в вышеприведенном списке). Примеры:
$dump [ n ] -> extensions -> summary -> data $dump [ n ] -> extensions -> summary -> length
В этом примере, мы забираем информацию из блока с названием summary.
Используемые параметры (опционально)
Основные параметры для формирования выдачи
Присвоение имени переменной
Параметр assign может использоваться для переименования переменной $dump. Не используя этот параметр, выдача будет по умолчанию записана в переменную $dump. Пример:
{content_dump assign="my_var_name"}
После этого выдача становится доступна через переменную $my_var_name, например: $my_var_name[0]->content->alias Это позволяет использовать тег несколько раз с различными параметрами в контексте одного шаблона или страницы.
Выбор блока контента для выдачи содержимого
Параметр block_name поможет изменить основной блок контента ({content}) на любой другой. В этом случае содержимое этого блока будет доступно через $dump[n]->content->data. По умолчанию сюда записываются данные из поля content_en в базе данных. Но если Вы хотите использовать в теге содержимое из другого блока, например, того, что сохранено в {content block="summary"}, то Вы можете сделать это используя этот параметр. Пример:
{content_dump block_name="summary"}
С какой страницы начать выдачу (корневой элемент)?
Параметр start_id может использоваться для определения стартовой (родительской) страницы для выдачи. Если он не используется, то его значение по умолчанию равно -1 и тегом будут выведены все страницы без ограничения. Один из интересных примеров для динамического использования этого тега, это подстановка переменной в его значение. Если Вы на каждой странице в определенном месте хотите показывать дочерние элементы этой страницы, то используйте start_id=$content_id. Таким образом, на каждой странице будет автоматически подставляться идентификатор просматриваемой страницы. Пример:
{content_dump start_id=$content_id}
Ограничить вывод одной страницей
Параметр this_only ограничит вывод только одной определенной страницей. Пример:
{content_dump this_only=55}
Как сделать постраничную навигацию?
Параметр page может быть использован для создания постраничной навигации. В этом параметре Вы задаете номер страницы. Он сдвигает выдачу на количество элементов, указанных в параметре limit_count. Другими словами, он изменяет параметр limit_start, добавляя к нему в зависимости от номера страницы число элементов заданных в limit_count. Допустим, по умолчанию limit_start равен 0, если же при этом limit_count равен 5 и page равен 2, то тег автоматически изменит limit_start на 6.
Использование этого параметра автоматически генерирует следующую информацию: $pager_info->current, $pager_info->max и $pager_info->size. Эти переменные содержат соответственно номер выбранной страницы, общее число страниц и количество элементов на странице. В сочетании с дополнительными стандартными тегами Smarty Вы можете быстро построить сложную постраничную навигацию на сайте (подробный пример приведен внизу страницы).
{content_dump limit_count=5 page=2}
Включение в выдачу неактивных страниц, или ограничение только на них
Параметр active используется для управления выдачей активных и неактивных страниц. Значение force выдаст все страницы независимо от их статуса. Значение active используется по умолчанию и ограничит выдачу только активными страницами. Значение inactive сделает выдачу только неактивных страниц.
{content_dump active="force"}
Показанный в меню или нет?
Параметр show_in_menu учитывает галочку проставленную на странице редактирования в поле "Показывать в меню". Значение force выдаст все страницы независимо от того, что у них стоит в этом поле. Значение show ограничит показ только страницами, которые показываются в меню и используется по умолчанию. Значение hidden используется для ограничения выдачи страницами, которые не отмечены для показа в меню. Пример:
{content_dump show_in_menu="hidden"}
Фильтры, поиск и работа с префиксами
Фильтры для контента (например, проверка на содержание определенного слова в тексте страницы)
Параметр filter используется для ограничения выдачи теми страницами, в основном содержании (или в блоках) которых присутствуют определенные слова. Его также можно использовать для исключения этих страниц из выдачи. Используйте для поиска булевые операторы, например, filter="-привет" для того, чтобы исключить все страницы, которые содержат в content->data или extensions->[block_name]->data слово "привет". А filter="привет" приведет к обратному, ограничению выдачи только на те страницы, в которых это слово присутствует. Пример:
{content_dump filter="мир -привет"}
Этот параметр передается напрямую в MySQL и работает только с таблицами, для которых задан индекc FULLTEXT. В стандартной установке CMS Made Simple для такого поиска по основному контенту нужно добавить этот индекс к таблице content_props.
Внимание! Если Вы не знаете, что такое индексы и как создавать или изменять их в таблицах непосредственно в базе данных, то лучше ничего не трогайте! Для тех, кто знает что делает, пример для добавления индекса к таблице:
ALTER TABLE cms_content_props ADD FULLTEXT (content)
Параметр filter применяется по умолчанию к тому блоку контента, который задан в параметре block_name. Если Вы хотите применить этот фильтр к другим блокам, то Вы должны изменить значение в параметре block_name на название этого блока. При этом Вам не нужно отказываться от выдачи стандартного блока {content}, просто используйте его дополнительно в параметре extensions. Пример:
{content_dump filter="world -hello" block_name="the_other_block_name" extensions="content_en"}
Исключение или ограничение страниц с определенным префиксом
Параметр prefix может использоваться для ограничения выдачи по префиксу (или префиксам) присутствующему в алиасе страницы, а также для исключения таких страниц из выдачи. Несколько префиксов определяются перечислением, разделенным запятой. Например:
{content_dump prefix="private_,special_"}
Как настроить исключение или ограничение по префиксу
Параметр prefix_mode используется для контроля предыдущего параметра. Допустимые значения: force, neutral или hide. По умолчанию используется значение neutral, которое никак не влияет на выдачу. Значение force ограничит выдачу только страницами, в которых префикс совпадает с перечисленными. Значение hide исключит все страницы с префиксами, заданными в предыдущем параметре. Пример:
{content_dump prefix="private_,special_" prefix_mode="hide"}
Как ограничить выдачу, используя уровни иерархии? ?
Параметр depth используется для контроля количества уровней, которые будут использованы в выдаче. Он требует два значения, которые должны быть разделены запятой (например, depth="-1,3"). Первое значение указывает на уровень, с которого будет начинаться выдача. -1 не ограничивает стартовый уровень, а любое другое положительное число n используется для ограничения стартового уровня (значения 0 и 1 оба начнут выдачу с первого уровня в иерархии).
Второе значение используется для ограничения количества уровней. 0 – без глубины, т. е. выдаст страницы, находящиеся на том же уровне, что и первая страница. Любое другое положительное число n – это указание на количество уровней (глубина по отношению к первой странице в выдаче).
В этом параметре требуется использование двух значений!
{content_dump depth="-1,3"}
Другие методы исключения страниц из выдачи
Пропустить первые X страниц (смещение)
Параметр limit_start позволяет настроить выдачу, начиная с определенной страницы. Задайте число, соответствующее количеству страниц, которые должны быть опущены в начале выдачи. Пример:
{content_dump limit_start=5}
Ограничение количества страниц в выдаче
Параметр limit_count может быть использован для ограничения общего количества страниц, выдаваемых тегом. В комбинации с параметром page он определяет количество элементов на одной странице. Пример:
{content_dump limit_count=10}
Исключить отдельные страницы из выдачи
Параметр exclude позволяет исключить отдельные страницы из выдачи. Его можно использовать, как для исключения одной страницы, так и для списка страниц по их идентификатору. В последнем случае используется перечисление идентификаторов через запятую. Особенно полезно использование этого параметра при одновременно включенной обработке Smarty в содержимом страниц, так как в отдельных случаях это может привести к бесконечному циклу. Пример:
{content_dump exclude="13,23,53,12,32"}
Использование дополнительных данных
Получение информации о родительской странице
Параметр parents используется для получения информации (заголовка и алиаса) родительской страницы. При включении этого параметра у Вас появляются дополнительные поля в выдаче $dump[n]->parents->alias и $dump[n]->parents->title. Поле $dump[n]->parents->id всегда находится в выдаче независимо от использования этого параметра. По умолчанию данные о родительской странице отсутствуют. Пример:
{content_dump parents=true}
Дополнительная информация о пользователях, связанных со страницей
Параметр users используется для получения дополнительной информации о пользователях, которые создали или редактировали страницу. Возможные значения: true или false. По умолчанию $dump[n]->created->by и $dump[n]->modified->by возвращают только идентификатор пользователя. Если поменять значение на true, то тег включит полную информацию о пользователе (имя и фамилию, а также логин). Пример:
{content_dump users=true}
Как получить дополнительные блоки контента в выдаче?
Параметр extensions принимает список названий блоков, которые должны быть добавлены в выдачу. Если каждый из блоков имеет какое-то содержание, то $dump[n]->extension будет 1, при наличии хотя бы одного пустого блока $dump[n]->extension будет 0 (значение по умолчанию). Предыдущую переменную можно использовать для проверки наличия контента в всех блоках. Данные из каждого перечисленного блока контента будут доступны в переменной $dump[n]->extensions, например, {content block="more_text"} дает переменную с содержимым блока $dump[n]->extensions->more_text->data, а также его длиной $dump[n]->extensions->more_text->length. Для того, чтобы не было никаких накладок не используйте в названиях блоков пробелы или тире, заменяйте их на "_". Пример:
{content_dump extensions="summary,image,other_block_name"}
Обработка данных в содержимом страниц
Настройка формата дат/времени
Параметр dateformat используется для форматирования дат, выводимых тегом content_dump. Справку по формату можно найти здесь. По умолчанию используется формат "%A, %e %B %Y" (т. е. Сб, 20 Сентябрь 2008). Форматирование применяется к переменным $dump[n]->created->date и $dump[n]->modified->date, которые всегда доступны в выдаче. Пример:
{content_dump dateformat="%A, %e %B %Y"}
Настройка локальных данных
Параметр cd_locale может быть использован для локальных настроек. К примеру, Ваш сайт может быть настроен на русский язык, но для определенной выдачи, той же генерации канала RSS и его валидности нужно будет изменить локаль на английскую. Пример:
{content_dump cd_locale="en-us"}
Я хочу обработать или удалить Smarty из содержимого страниц
Параметр do_smarty определяет, будет ли обработан код Smarty в содержимом перед его выдачей. Возможны три значения: compile, neutral и strip. Значение compile сделает предварительную обработку содержимого блока посредством Smarty. Значение neutral используется по умолчанию и выдаст код Smarty, как обыкновенный текст. Значение strip удалит код Smarty из содержимого перед его выдачей, при этом испортится любой JS вставленный в содержимое, так как этот параметр удаляет только то, что стоит в фигурных скобках.
Будьте осторожны, применяя обработку Smarty к содержимому. При определенных комбинациях может возникнуть бесконечная рекурсия и, как следствие, перегрузка системы. Если Вы используете тег content_dump с параметром compile только один раз, то проблем не возникает. Но если Вы включите тег в страницу, которая находится в шаблоне, в котором в свою очередь происходит обработка этой же страницы через Smarty, то Вы должны исключить показываемую страницу. То есть попытайтесь исключить "цепную реакцию".
Этот параметр применяется ко всем блокам контентам, которые используются для выдачи. Пример:
{content_dump do_smarty="compile"}
Очистить содержимое от тегов HTML
Параметр html используется для того, чтобы очистить содержимое от кодов HTML, JavaScript и CSS. Разрешены значения strip и neutral. Значение neutral не удаляет теги HTML из контента и выводит содержимое, как есть. Значение strip очищает содержимое от тегов. Пример:
{content_dump html="neutral"}
Порядок (сортировка) элементов
Сортировка данных
Параметр first_sort настроит порядок выдачи по одному из следующих значений: id, alias, title, created, modified, owner, hierarchy (по умолчанию), id_hierarchy, lasteditor, active, show (показ в меню). Для сортировки по времени используйте значения created или modified (чуть ниже показано как можно дополнительно отметить сортировку по убыванию или по возрастанию). Замечание: сортировка по owner использует идентификатор пользователя, а не его имя! Пример:
{content_dump first_sort="owner"}
Задать направление сортировки
Параметр first_sort_order используется для направления сортировки, значение up – это сортировка по возрастанию, а значение down – сортировка по убыванию. Значение up установлено по умолчанию (вчерашняя дата будет показана выше сегодняшней). Пример:
{content_dump first_sort="modified" first_sort_order="up"}
Дополнительная сортировка
Параметр second_sort настроит порядок выдачи по одному из следующих значений: id, alias, title, created, modified, owner, hierarchy (по умолчанию), id_hierarchy, lasteditor, active, show (показ в меню). Для сортировки по времени используйте значения created или modified (чуть ниже показано как можно дополнительно отметить сортировку по убыванию или по возрастанию). Замечание: сортировка по owner использует идентификатор пользователя, а не его имя! Пример:
{content_dump first_sort="owner" second_sort="created"}
Задать направление дополнительной сортировки
Параметр second_sort_order используется для направления дополнительной сортировки, значение up – это сортировка по возрастанию, а значение down – сортировка по убыванию. Значение up установлено по умолчанию (вчерашняя дата будет показана выше сегодняшней). Пример:
{content_dump first_sort="owner" second_sort="created" second_sort_order="down"}
Логика Smarty для создания постраничной навигации
Подготовьте шаблон к использованию постраничной навигации.
{assign var=page_call value=$smarty.get.show_page} {if $page_call == ""}{assign var=page_call value=1}{/if}
Этот кусок кода читает параметр show_page, переданный запросом $_GET. Если данный параметр отсутствует, то значение show_page будет по умолчанию 1.
Предыдущая или следующая страница
{if $page_call > 1 }
<a href="blog.htm?show_page={$pager_info->current-1}">следующая страница</a>
{/if}
{if $pager_info->max > $page_call}
<a href="blog.htm?show_page={$pager_info->current+1}">предыдущая страница</a>
{/if}
Постраничная нумерация
{section name="i" start=1 loop=$pager_info->max+1 step=1}
<a href="blog.htm?show_page={$smarty.section.i.index}">{$smarty.section.i.index}</a>
{/section}
Полезные снипеты для копирования
Создание ссылок на страницы
Использование cms_selflink
Есть несколько методов создания ссылок на страницы. Независимо от индивидуальных настроек сайта Вы всегда можете использовать стандартный тег {cms_selflink}, который преобразует любой алиас в правильную ссылку на страницу.
{cms_selflink page=$dump->content->alias text=$dump->content->title}
Создание ссылок вручную
Вы можете создавать ссылки вручную, если уверены, что настройки сайта (ЧПУ, расширение, иерархия) не будут изменяться. Пример:
<a href="{$dump->content->alias}.htm">далее</a>
или
<a href="index.php?page={$dump->content->alias}">далее</a>
Хотя этот способ менее прожорливый, что касается ресурсов, Вы должны учитывать, что он не подойдет Вам, если Вы используете более чем 2 уровня в структуре страниц и ЧПУ. Дело в том, что тег {content_dump} содержит в себе только алиас страницы, а также (при использовании параметра parents) алиас родительской страницы. Получить отсюда алиас более высокого уровня для ручного создания ссылки не удастся. В крайнем случае, Вы можете использовать вот такой вариант, если первый уровень остается неизменным:
<a href="ALIAS/{$dump->parents->alias}/{$dump->content->alias}">далее</a>
Небольшая заметка к SEO: использование слова "далее" для анкора это далеко не лучший вариант. Идеальным было бы использовать заголовок страницы для перелинковки, а также использовать атрибут title в теге HTML. Посмотрите, как это может выглядеть:
<a href="{$dump->content->alias}" title="{$dump->content->title}">Перейти к {$dump->content->title}</a>
Показать все доступные элементы
{content_dump ... }
{foreach from=$dump item=dump}
{$dump->content->data}
{/foreach}
10 новых страниц со всего сайта
{content_dump limit_count=10 first_sort="created" first_sort_order="down"}
<ul>
{foreach from=$dump item=dump}
<li>{cms_selflink page=$dump->content->alias text="$dump->content->title"}</li>
{/foreach}
</ul>
10 страниц с последними изменениями со всего сайта
{content_dump limit_count=10 first_sort="modified" first_sort_order="down"}
<ul>
{foreach from=$dump item=dump}
<li>{cms_selflink page=$dump->content->alias text="$dump->content->title"}</li>
{/foreach}
</ul>
Показать блогоподобный список страниц
{content_dump block_name="page_summary" start_id=$content_id}
{foreach from=$dump item=dump }
<div class="entry">
<h3>{$dump->content->title}</h3>
<span class="date">{$dump->created->date}</span>
<p>{$dump->content->data}<br />
{cms_selflink page=$dump->content->alias text="Подробней: $dump->content->title"}
</p>
</div>
{/foreach}
Использование параметра extensions
Подготовка
При использовании параметра extensions Вы можете создавать сложные портфолио, обзоры или каталоги аудио, видео, фото или любой другой информации. Используйте следующий код для вывода структурированной информации, основанной на различных блоках, на странице с обзором.
Давайте представим, что у Вас есть два шаблона "деталь" и "обзор". Шаблон "Деталь" содержит в себе различную информацию, разбросанную в разные поля, посредством использования различных блоков контента. При этом все страницы с деталями на этом шаблоне являются дочерними страницы с идентификатором 57.
{content block="profit" oneline=true}
{content block="summary"}
Создание обзора
На странице с обзором Вы можете использовать следующий код
{content_dump block_name="summary" extensions="profit" start_id=57}
{foreach from=$dump item=dump}
{$dump->content->data}
{$dump->extensions->profit->data}
<a href="{$dump->content->alias}">подробней...</a>
{/foreach}
Используем Smarty для дальнейшей модификации
В примере выше, если в блоке контента profit заданы цифры, то мы можем образовать из них общую сумму при помощи Smarty:
{assign var=$profit_sum value = 0}
{content_dump block_name="summary" extensions="profit" start_id=57}
{foreach from=$dump item=dump}
{$dump->content->data}
{$dump->extensions->profit->data}
{assign var=$profit_sum value = $profit_sum + $dump->extensions->profit->data}
<a href="{$dump->content->alias}">подробней</a>
{/foreach}
Общая сумма: {$profit_sum}
Информация
Вопросы по использованию тега задавайте в форуме. Автор не отвечает на почтовые сообщения с просьбой о поддержке по трем причинам. Первая, если Вы задаете вопросы в форуме, то Вам может помочь не только сам автор, но и другие участники форума. Вторая, ответ на Ваш вопрос в форуме поможет не только Вам, но и другим участникам форума, у которых возникнет такой же вопрос. Третья, банальная, у автора нет времени оказывать бесплатную индивидуальную поддержку всем желающим.
This page in:
English -
Deutsch -
Español -
Français -
Italiano -
Lietuvių -
Nederlands -
Norsk -
Polski -
Česky -
Русский -
Svenska -
Tiếng Việt -
عربي -
日本語
简体中文
