Автонаполняемый контент — плагин feedwordpress
августа 7, 2009
Никогда не думал, что у меня будут проекты с автонаполняемым контентом. Но ради познания и опыта решил сделать один такой, тем более у меня всегда в запасе есть парочка ненужных доменов.
Выбрал тему seo, так как обычно у таких блогов всегда есть полные rss ленты и особо с их поиском заморачиваться не потребуется. Поставил свой любимый движок, правда базу на хостинге под этот «проект» жалко было, но раз уж решил, то не отступлю. Начал поиск плагинов, к своему удивлению нашел только 3 бесплатных, хотя казалось бы что сложного парсить из rss ленты ? Платные я не рассматриваю, так как не собираюсь тратить деньги ради гс.
Попробовал SmartRss, слишком простой и малонастраиваемый. Поставил Wp-o-matic, но он автоматически парсит только по крону. Остановился на feedwordpress.
Итак, возможности плагина:
— отлично работает с FeedBurner’ом;
— есть распределение по категориям;
— возможность автообновления без crona;
— можно сохранять записи как черновики или сразу публиковать их, разрешать исходящие ссылки на источник, либо заменять их... и многое другое.
С установкой тоже проблем не возникло. Стандартно копируем файлы feedwordpress.php и syndication-options.php в папку wp-content/plugins/feedwordpress. Затем файлы rss-functions.php и rss.php в директорию wp-includes, заменяем их. Активируем плагин и в меню появляется новый раздел «синдикация» (если вы скачали переведенный вариант). Дальше разберетесь.
Кстати, можно такой модуль использовать с какими-либо плагинами-синонимайзерами.
InTerra и Sape
мая 24, 2009
А вы пробовали вставлять код Sape на этот движок ? По вашим унылым лицам вижу, что пробовали. Не знаю как сейчас, но раньше я видел несколько тем на серче и форуме сапы, но никто похоже не нашел решения. Предлагаю свое.
Создаем файл function.sape.php:
<?php
function smarty_function_sape($params,&$smarty)
{
$a=$_SERVER['REQUEST_URI'];
define('_SAPE_USER', 'ваши буквы и цифры');
require_once($_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
$pageurl = explode(«?», $a);
$o['request_uri'] = $pageurl[0];
$o['force_show_code'] = true;
$sape = new SAPE_client($o);
return $sape->return_links();
}
?>
Строки $pageurl = explode(«?», $a); и $o['request_uri'] = $pageurl[0]; нужны нам для того, чтобы при введении адреса сайта со знаком вопроса на конце ссылки не исчезали со страницы.
Далее закидываем этот файл в /lib/smarty/plugins/ и в /templates/ваш_шаблон/index.htm пишем в нужном месте страницы вызов функции {sape}.
В этом же файле метатег robots приводим к такому виду — <meta name="ROBOTS" content="{if $template != 'main.htm' and $template != 'entry.htm' and $template != 'page.htm'}noindex, follow{else}index, follow{/if}" />
Именно в этой строчке и заключалась вся проблема. Дело в том, что робот Sape, заходя на сайт, не мог проследовать от главной страницы (main.htm) к следующим.
Кто не боится может зарегистрироваться по моей партнерской ссылке — http://www.sape.ru
Пишем плагины для InTerra
мая 23, 2009
Как вы могли заметить, плагинов для InTerra практически нет. Я решил исправить это.
1. Самое популярное
В файл /templates/ваш_шаблон/index.htm добавляем такие строки:
{entries sortby=comments items=5 var=topcomm}
<h3>Самые обсуждаемые</h3>
<div class="left-box">
<ul class="sidemenu">
{foreach from=$topcomm item=mytopEntry}
<li><a href="{$mytopEntry.url}">{$mytopEntry.subject}</a>
({$mytopEntry.commentcount})</li>
{foreachelse}
<li>Ни одного обсуждаемого поста за три месяца...</li>
{/foreach}
</ul>
</div>
И модифицируем их под себя.
2. Последние записи
{entries sortby=modified items=5 var=topent format=1}
<h3>Последние записи</h3>
<div class="left-box">
<ul class="sidemenu">
{foreach from=$topent item=myEntry}
<li><a href="{$myEntry.url}">{$myEntry.subject}</a></li>
{foreachelse}
<li>Ни одного поста за три месяца...</li>
{/foreach}
</ul>
</div>
Здесь я ввел дополнительный параметр format, для того, чтобы те страницы, которые не показываются на главной, также не отображались и здесь.
Теперь открываем /lib/smarty/plugins/function.entries.php и добавляем, например, в начало функции function smarty_function_entries($params, &$smarty) следующее:
//format
if(!empty($params['format'])){
$format = «AND format = '» . (string)$params['format'] . «'»;
}else{
$format = null;
}
Далее переписываем sql запрос
$data = $db->getAll(«SELECT
subject,
content_p AS content,
commentcount,
intime,
„.PREFIX.“entry.entryid AS id,
urlcache AS url
FROM „.PREFIX.“entry
WHERE
$intime $section $format ORDER BY $sortBy $sortPref „.($itemsToGet?“ LIMIT $itemsToGet»:"«));
Ну вот и все.
3. Последние комментарии
<ul>
{comments items=5 admin=true}
{foreach from=$comments item=topcomment}
<li><a href=»{$topcomment.url}#{$topcomment.id}">
{if $topcomment.senderName=="mail@domen.ru"}Ответ автора
{else}
{$topcomment.senderName}{/if}</a>:
{$topcomment.content|@strip_tags|truncate:100:"..."}</li>
{foreachelse}
<li>no comments...</li>
{/foreach}
</ul>
4. Похожие материалы
В файл /templates/ваш_шаблон/entry.htm добавляем перед строкой {include file="comments.htm"}
<br><br> Схожие по тематике материалы:<br>
{entries var=en items=5 section=$data.section.id sortby=random}
<ul>
{foreach from=$en item=entry}
{if $data.subject!=$entry.subject}<li><a href="{$entry.url}">{$entry.subject}</a> {if $entry.comments}({$entry.commentcount}){/if} <span class="kdatetime"> {$entry.intime|date_format:'%d.%m.%Y // %H:%M'}</span></li>{/if}
{/foreach}
</ul>
5. Статистика
Для отображения общего количества статей и комментариев:
В конце файла /lib/smarty/plugins/function.entries.php перед строками
//give data to smarty and terminate
$smarty->assign(«TOTALDBQUERIES»,$db->totq);
$smarty->assign($variableName,$data);
return;
добавляем:
$cEntries = $db->getOne(«SELECT count(*) FROM „.PREFIX.“entry»);
$smarty->assign(«ce»,$cEntries);
$cnEntries = $db->getOne(«SELECT count(*) FROM „.PREFIX.“entry WHERE format = '0'»);
$smarty->assign(«cn»,$cnEntries);
$cComments = $db->getOne(«SELECT count(*) FROM „.PREFIX.“comment WHERE deleted = '0'»);
$smarty->assign(«cc»,$cComments);
Далее в наш любимый templates/ваш_шаблон/index.htm вставляем:
<h3>Статистика</h3>
<div class="left-box">
<ul class="sidemenu">
<font color=#003366>
<li><b>статей на сайте: {$ce}</b></li>
<li><b>комментариев: {$cc}</b></li>
</font>
</ul>
</div>
6. Ссылки назад и вперед по нажатию <-- CTRL -->
Открываем templates/ваш_шаблон/pagers.htm
В нем каждую ссылку дополняем до:
<a href="{$SERVER_ROOT}{$sectionLink}skip/{$smarty.const.PER_PAGE}/">{#back#}</a>
<br>← Ctrl
<a href="{$SERVER_ROOT}{$sectionLink}skip/{$skipBack}/">{#back#}</a> | <a href="{$skipForward}">{#forward#}</a>
<br>← Ctrl →
<a href="{$skipForward}">{#forward#}</a>
<br>Ctrl →
соответственно.
Затем пишем JavaScript:
<script language="JavaScript" type="text/javascript">
<!--
document.onkeydown = function(e) {ldelim}
e = e || window.event;
if (e.ctrlKey && e.keyCode == 37) {ldelim}
{if !$smarty.get.skip}
window.location.href="{$SERVER_ROOT}{$sectionLink}skip/{$smarty.const.PER_PAGE}/"
{else}
{if $smarty.get.skip + $smarty.const.PER_PAGE lt $pagerTotal — $cn}
window.location.href="{$SERVER_ROOT}skip/{$skipBack}/";
{else}
{/if}
{/if}
{rdelim}
else if (e.ctrlKey && e.keyCode == 39) {ldelim}
{if $smarty.get.skip}
window.location.href="{$skipForward}";
{/if}
{rdelim}
return true;
{rdelim}
//-->
</script>
7. Аналог All in SEO Pack
В файле templates/ваш_шаблон/index.htm заменяем ваши метатеги с ключевыми словами и описанием на
<meta name="keywords" content="{if $data.keywords}{foreach from=$data.keywords item=keyword name=myKeys}{if not $smarty.foreach.myKeys.last}{$keyword.word}, {else}{$keyword.word}{/if}{/foreach}{else}ваши ключевые слова для главной страницы{/if}" />
<meta name="description" content="{if $data.content}{$data.content|strip_tags|truncate:255}{else}ваше описание для главной страницы{/if}" />
И не забываем рекомпилировать
Оптимизация InTerra Blog Machine
мая 22, 2009
Возможно вы когда-нибудь слышали об InTerra. Нет ? Если говорить в кратце, то это CMS для блогов, очень легкая и быстрая. Ее автор считает, что 80% пользователей используют только 20% возможностей движков. Но зато эти 20% в Интерре отточены до совершенства (на самом деле это не так). Помню пару месяцев назад, когда я был молодым и неопытным, я поставил ее на 3 своих проекта. В то время я думал, что главное это контент, а все остальное придет. В принципе так и есть и плевать что у движка практически нет документации, тем оформления, плагинов. Да и то, что уже реализовано, оставляет желать лучшего. Над этим мы сейчас и поработаем.
1. Заключаем комментарии в noindex.
Для этого находим в вашем шаблоне /templates/название_шаблона/ файл comments.htm и перед строкой
{foreach from=$comments item=comment name=myComments}
ставим тег <noindex>, после завершающего {/foreach} закрываем </noindex>.
2. Ссылка в имени отправителя комментария
В теге <h3> заменяем
{if $comment.admin}{#authorReply#}{else}{$comment.senderName}{/if}
на {if $comment.admin}{#authorReply#}{elseif $comment.senderURL}<a href="{$comment.senderURL}" rel="nofollow" target="_blank">{$comment.senderName}</a>{else}{$comment.senderName}{/if}
3. Скрытие удаленных комментариев
Ищем {if $comment.deleted}
{#comDeleted#}
{else}
и заменяем на {if $comment.deleted=='0'}
4. Открытие картинок в новом окне
Открываем файл /lib/add.js и вместо кода ссылки <a href="'+fullImage+'" rel="lightbox"> ставим <a href="'+fullImage+'" target="_blank" rel="lightbox">
5. Вывод заголовков статей при открытии категории
Переписываем файл /templates/название_шаблона/section.htm
{* load lang file *}
{config_load file="lang.txt" section="section"}
{foreach from=$data item=entr items=all}
{/foreach}
<h2>Список материалов, категория «{$entr.section.fullName}»</h2>
{if $entr.section.name=="ludi"}{entries var=en items=all section=$entr.section.id sortby=subject sortpref=asc intime=null}{else}{entries var=en items=all section=$entr.section.id intime=null}{/if}
{section name=e loop=$en}
<h4><a href="{$en[e].url}">{$en[e].subject}</a></h4><br>
{/section}
Строки {if $entr.section.name=="ludi"}{entries var=en items=all section=$entr.section.id sortby=subject sortpref=asc intime=null}{else}{entries var=en items=all section=$entr.section.id intime=null}{/if}
нужны для того, чтобы категория «ludi» сортировалась по алфавиту, все остальные выводились без сортировки.
Чтобы выводились все статьи замените в файле /lib/smarty/plugins/function.entries.php эти строки
}else{
$intime = " intime > ".(int)(NOW — 90 * 60 * 60 * 24);
}
на
}else{
$intime = " intime > ".(int)(0);
}
Не забываем рекомпилировать шаблоны.
И еще, я бы посоветовал отредактировать robots.txt:
User-Agent: *
Disallow: /templates
Disallow: /keyword
Disallow: /skip
Disallow: /rss
Во избежании путаницы при индексировании блога.
Думаю на сегодня хватит. На самом деле при использовании движка я менял в нем очень многое, половину сейчас уже и не вспомнить.