Шаблон ссылок на страницы и админка трекера поисковых фраз
20.09.2009В этом обновлении добавил новый тег для шаблона записи - dateformat. Его следует использовать в файлах *.tml следующим образом
{$post->dateformat->m}
Фигурные скобки являются обязательными, а иначе php в строках заикается. В данном примере выводится название месяца, вместо буквы m следует использовать любые буквы для форматирования даты, описанные в документации по php к функции date. Дата переводится на текущий язык, то есть для сайта на русском даты будут на русском (месяцы, недели в полном и кратком варианте).
Следующее изменение - переработан шаблон навигационных ссылок - ссылки с цифрами на страницы. Теперь его можно задавать в секции navilinks файла theme.ini текущей темы - следует не забывать, что после редактирования этого файла необходимо переключится между темами, чтобы новые значения вступили в силу.
Исправлены мелкие недочеты в админке к трекеру поисковых фраз: сейчас все нормально сохраняется. Так что смело редактируйте блоки ссылок. Также немного оптимизирован класс TTemplate.
Комментарии (30) на запись “Шаблон ссылок на страницы и админка трекера поисковых фраз”
Оставить комментарий
Обязательно разбей запись на краткую и полную таким тегом:
<!--more-->
или таким:
<!--more текст для линка-->
еще можно в зайти в админку->настройки и снять галочку "Создавать анонс, если отсутствует тег more"
Пропущена s в стандартной теме
link = "<a href='%1$s'>%2$s</a>"
Все навигационные ссылки ведут на главную страницу.
В ru.ini:
toomany = "сллишком много комментариев"
hold = "(Ваш комментарий ожидает потдверждения)" надо подтверждения
сделать с большой буквы:
monday = "Понедельник"
tuesday = "Вторник"
Изменить падеж месяцев: января, февраля
Осталось изменить формат даты у виджетов записей и комментариев.
Насчет падежа я не уверен, ведь фразу с датой можно построить по разному, понятно, что хочется типа 1 января, но вот например "Опубиковано в январе", или "Дата публикации январь", и т.п.
Виджеты уже давно настраиваются, для ппостов шаблон должен быть в секции
[widget]
recentpost = "...."
для комментариев что то не нашел, значит сейчас добавлю. Если нет значений в theme.ini используются по умолчанию, то есть такие, как сейчас
Виджеты-то настраиваются, я спрашиваю как изменить ФОРМАТ ДАТЫ у виджета свежие записи и свежих комментов. Чтобы было так:
<li>ссылка_на_запись<br>Понедельник, 1 января</li>
Приведи рабочий пример для стандартной темы.
По умолчанию используется следующее для свежих постов:
[widget]
recentposts = "<li><strong><a href='$Options->url$post->url' rel='bookmark' title='Permalink to $post->title'>$post->title</a></strong><br /> <small>$post->localdate</small></li>"
и следовательно надо заменить $post->localdatна необходимое тебе, в частности {$post->dateformat->F} и так далее в соответствии с документацией по функции date в php. e
recentposts= "<div class='footer-recent-posts'><h4>%s</h4><ul>"
Поэтому я и подумал что можно редактировать только шапку виджета.
Что-то у меня не работает. Для стандартной темы [sitebar2] ==[widget]? Как вставлять твой код? Заменять существующий recentposts= "<div..</ul>" или добавитьк нему
recentposts= "<div class='footer-recent-posts'><h4>%s</h4><ul><li><strong><a href='$Options->url$post->url' rel='bookmark' title='Permalink to $post->title'>$post->title</a></strong><br /> <small>$post->localdate</small></li>" или еще как-то? То, что я сейчас привел не работает.
Что то сервер у меня подвись - хостер делал ребут. Про виджеты и шаблоны, я ошибся в одной букве, а именно, чтобы задать шаблонссылки в виджете свежих записей надо использовать
[widget]
recentpost = ".."
когда как
recentposts = ".."
относится к шапке виджета, симметрично и для комментов сделаю.
Да, все заработало.
Что же ты не рассказал что можно использовать эти теги:
<!--nextpage-->
[bloglink]
<code>
[more]
[cut]
[prevpost]
Правда [cut] и [prevpost] не работают.
Может здесь ошибка?
if (strpos($s, '[prevpost]')) {
$posts = &TPosts::Instance();
$last = $posts->GetRecent(1);
$post = &TPost::Instance($last[0]);
$link = "<a href=\"$Options->url$post->url\">$post->title</a>";
$s = str_replace('[lastpost]', $link, $s);
}
Может в начале записи поставить <p>, в конце </p> и сделать замену str_replace \n на <br />, а \n\n на </p><p>? Так можно будет реально знать как будет выглядеть запись, а то откроется/закроется где-нибудь <p> и отступ внизу не сделается, да и <br /> пришлось вручную проставлять. Я так и не понял в чем проблема при использовании html.
Долго мучался пока не нашел верный вариант - лезу в старые записи, где теги срабатывали, копирую оттуда туже строку с img-тегом, прописіваю имя файла и такой вариант прокатывает. Тоже самое бывает и с другими тегами..Пробовал строку с тегом сохранять и в utf и в Ansi -кодировке..толку никакого..только копирование из старых записей..чертовщина какаято..
во первых все же правильно писать тег:
img src=
второе - правильно указывать путь к файлу на сервере, а именно у тебя должна быть в корне папка images если следовать твоему тегу, и т.д. Блоголёт по минимуму трогает исходники
Я недоработал теги на внутренние ссылки в посте - все эти [prevpost] не работают, но зато отлично обрабатывается любой текст внутри <code> </code> заменяется html псевдонимами, я часто пользуюсь для цитирования php кода, особено удобно когда много угловых скобок, а также подойдет для цитирования html кода и т.д. cut это аналог more.
проблема с фильтрацией есть - о ней писали неоднократно и я каждый раз объясняю какие недостатки в предложениях поменятть фильтр. ННапример твое предложение перевод строки заменить <br> - а если в конце строки заканчивается тег? например
<form name='form' method='post>
<input...>
то по твоей логике проставить везде <br>? Твой совет сработал бы только в одном случае - если в тексте вообще отсутствовали какие нибудь теги.
Почему в одном? например:
текст
<b>еще текста</b>
<h2>заголовок</h2>
продолжение
тут <br> не поставился бы? Сейчас нужно вручную ставить, потому что нужен именно <br>.
Есть только проблема с тегами, которые написаны в несколько строк, но их ведь можно и в одну написать, или в тег <code> засунуть. Да и кому эти формы нужны, разве что на странице контактов. А если в конце сделать ссылку и div, то перед ним еще надо ручками <p> поставить, потому что в конце </p> уже есть.
Да, еще в диве и code придется строку не оставлять.
Думаю есть 2 способа решения проблемы:
1. Сделать, как я предлагаю и определить теги после которых br не ставится.
Добавить к существующему фильтру:
$result = preg_replace('/\n<(a|img|div)(.)>/im', "<br />\n<$1$2>", $result);
$result = preg_replace('/<img src=(.)>\n/im', "<img src=$1><br />\n", $result);
$result = preg_replace('/\n<(b|i|u)>/im', "<br />\n<$1>", $result);
$result = preg_replace('/<\/(a|b|i|u|div)>\n/im', "</$1><br/>\n", $result);
Для праграфа:
$result = str_replace("\n\n", "</p>\n<p>", $result);
В CallbackReplaceCode($found) добавить:
$code = str_replace("</p>\n<p>", "\n\n", $code);
Как думаешь, так можно сделать?
public static function GetExcerpt($content, $len) {
$result = strip_tags($content);
if (strlen($result) <= $len) return $content;
замена return $result на return $content
Без вырезания тегов никак нельзя - текст идет в description, надо для гарантии еще и сделать htmlspecialchars и дополнительно заменить кавычки с апострофами. Для тега code - зачем? Я не знаю точно, но разве code допускает вложенные теги?
блок с preg_replace добавил, но пока без тестов - тестироваться будет по живому с новой версией (может быть сегодня с импортером).
Конечный код фильтра:
$result = str_replace("\r\n", "\n", $result);
$result = str_replace("\r", "\n", $result);
$result = preg_replace('/\n<(a|img|div)(.)>/im', "<br />\n<$1$2>", $result);
$result = preg_replace('/<img src=(.)>\n/im', "<img src=$1><br />\n", $result);
$result = preg_replace('/\n<(b|i|u)>/im', "<br />\n<$1>", $result);
$result = preg_replace('/<\/(a|b|i|u|div)>\n/im', "</$1><br/>\n", $result);
$result = preg_replace('/\>(\s?)?\n/',">\n", $result);
$result = preg_replace('/(?<!\>)\n(?!\s\<)/im', "<br />\n", $result);
$result = str_replace("\n\n", "</p>\n<p>", $result);