1

Тема: Странное поведение mt:EntryTitle

Разбирался на днях с шаблонами и вот что обнаружил.
Вставил запись в HTML Head:
<title><$mt:EntryTitle encode_html="1"$> - <$mt:BlogName encode_html="1"$></title>
что должно было дать <title>EntryTitle - BlogName</title>
билдер выдал ошибку, что mt:EntryTitle не входит в контейнер mt:Entries, но если тег поместить в контейнер

<mt:Entries>
<mt:EntryTitle>
</mt:Entries>

то будут выведены все EntryTitle  (Заголовки записей) страницы, что мне НЕ нужно. С другой стороны абсолютно та же строчка нормально парсится в шаблоне "Запись" и там тег не включен в контейнер mt:Entries.

<head>
    <$mt:Include module="HTML Head"$>
    <$mt:Var name="comments_per_page" value="50"$>
    <mt:EntryPrevious><link rel="prev bookmark" href="<$mt:EntryPermalink$>" title="<$mt:EntryTitle encode_html="1"$>" /></mt:EntryPrevious>
    <mt:EntryNext><link rel="next bookmark" href="<$mt:EntryPermalink$>" title="<$mt:EntryTitle encode_html="1"$>" /></mt:EntryNext>
    <$mt:EntryTrackbackData$>
    <mt:If tag="EntryCommentCount" gt="$comments_per_page">
        <script type="text/javascript">
         MT.entryID = <$mt:EntryID$>;
         MT.commentsPerPage = <$mt:Var name="comments_per_page"$>;
         MT.entryCommentCount = <$mt:EntryCommentCount$>;
         MT.commentIds = [<mt:Comments sort_order="ascend" glue=","><mt:CommentID></mt:Comments>];
        </script>
      </mt:If>
   
<title><$mt:EntryTitle encode_html="1"$> - <$mt:BlogName encode_html="1"$></title>
</head>

Вопрос это ошибка билдера или особенности шаблонов ? И соответственно как вывести тогда в теге <title> текущий тайтл  и название блога в HTML Head?



2

Re: Странное поведение mt:EntryTitle

То, что тег EntryTitle нормально обрабатывается в этом месте только в архивах записей — нормально. А в остальных случаях будет вне контекста.

У вас в шаблон инклюдится модуль HTML Head, что в нём?



3

Re: Странное поведение mt:EntryTitle

<meta http-equiv="Content-Type" content="text/html; charset=<$mt:PublishCharset$>" />
<meta name="generator" content="<$mt:ProductName version="1"$>" />
<link rel="stylesheet" href="<$mt:Link template="styles"$>" type="text/css" />
<link rel="start" href="<$mt:BlogURL$>" title="Home" />
<link rel="alternate" type="application/atom+xml" title="Recent Entries" href="<$mt:Link template="feed_recent"$>" />
<script type="text/javascript" src="<$mt:Link template="javascript"$>"></script>
<$mt:CCLicenseRDF$>



4

Re: Странное поведение mt:EntryTitle

А почемы вы хотите изменить title через HTML Head? Насколько я знаю, в стандартных шаблонах title содержится почти в каждом шаблоне.



5

Re: Странное поведение mt:EntryTitle

ну а почему бы нет, тайтл должен быть в HTML Head и 1 раз, но действительно, почему то он почти в каждом шаблоне, это не разумно имхо, нарушает принцип DRY

а в чем проблема все же ? не поясните ?

Отредактировано fell (16:12:2009 23:32:09)



6

Re: Странное поведение mt:EntryTitle

На мой взгляд, это как раз наиболее оптимально. Его можно сделать в одном файле, но тогда это будет куча условий if-else, чтобы при публикации определялся тип шаблона и не возникало проблем.
А так можно для каждого типа шаблонов сделать свой, индивидуальный title.



7

Re: Странное поведение mt:EntryTitle

Пример для управления title из одного шаблона

1. Необходимо во всех шаблонах (индексных, архивных), в которых должен быть тег title, добавить установку переменной. Примеры:
— Для поста:

<mt:Var name="my_template_type" value="entry" />

— Для списка постов (архивов):

<mt:Var name="my_template_type" value="entries_list" />

— Для страницы:

<mt:Var name="my_template_type" value="page" />

— Для главной страницы:

<mt:Var name="my_template_type" value="home_page" />

То есть необходимо задать шаблонам собственные типы.

2. Далее в HTML Head нужно добавить примерно следующее:

<mt:If name="my_template_type" eq="entry">
    <title>Запись: <mt:EntryTitle /></title>
<mt:ElseIf name="my_template_type" eq="page">>
    <title>Страница: <mt:PageTitle /></title>
<mt:ElseIf name="my_template_type" eq="entries_list">>
    <title>Архив: <mt:ArchiveTitle /></title>
<mt:ElseIf name="my_template_type" eq="home_page">>
    <title><mt:BlogName /></title>
</mt:If>

3. И затем удалить все предыдущие теги title, которые остались от стандартных шаблонов.