Ситуация:
Уходишь с утра из дому, умылся, поел, уже оделся, в куртке стоишь, тут вспоминаешь, что забыл что-то сделать (закрыть окно, кому-то позвонить, что-то купить, покормить собаку, …). Решаешь оставить записку жене, или сестре, или дом. работнице, или ещё кому-либо. Записка сама небольшая, нужно передать 1-2 мысли, но оставить записку нужно быстро и на видном месте. Берёшь стикер, пишешь 3 слова, цепляешь на зеркало в коридор - и вперёд!
Думаю, многие не раз бывали в аналогичной ситуации.
Теперь представим, что дом - это Ваш блог, жена и сестра - это гости Вашего блога, а зеркало в коридоре - это боковая колонка блога, тогда вот этот кусочек стикера будет мини-постом.
В моём понимании, мини-пост - маленькая заметка, пара слов, возможно предложений, которые автор хочет оставить для кого-либо быстро и удобно. Чаще всего на видном месте.
Совсем недавно мне был необходим интерфейс для публикации на блог кратких новостей. Новости должны составляться в админке и отображаться в отдельно выделенном блоке на домашней странице блога.
Задача осложнялась тем, что для публикации новостей нельзя было использовать стандартный интерфейс добавления постов WP. Было ясно, что нужен отдельный, пусть хоть и маленький, но раздел админки.
Около часа я подбирал возможные подходы к решению данной задачи. Пришёл к выбору из 3 вариантов.
Вариант 1:
- Создаём категорию “Новости”
- Создаём дубликат стандартного интерфейса написания постов WP (post-new.php и post.php).. например, news-new.php и news.php, убираем из этих темплейтов всё лишнее, добавляем их в меню и надеемся, что результат работы будет работать.
- Работаем с новостями через новый интерфейс
- На страницах блога цепляем заглушки, чтобы предотвратить отображение постов из нашей категории вместе с остальными постами.
- В необходимом месте руками выбираем посты из нашей категории и отображаем.
Вариант 2:
- Используем плагин “Miniposts2” - выглядит живым, но, к моему сожалению, использует стандартный интерфейс WP.
- Приходим к необходимости опять же создания дубликатов стандартных страниц WP.
Вариант 3:
- Используем плагин Miniblog, о котором писал Delchyve. Плагин был задуман неплохо, имел отдельную страницу для добавления и редактирования постов, посты удобно извлекались в темплейты, даже умел генерировать RSS ленту…
- Но после установки и запуска на WP 2.2.3 стало очевидно, что плагин не поддерживается и попросту не работает на новых версиях WP.
Варианты 1 и 2 я отсёк, как громоздкие и ненадёжные. Не было никакой уверенности, что дубликаты страниц post-new и post админки WP продолжат успешно работать. Принял решение привести плагин Miniblog в чувства и использовать.
Процесс оказался не сложным. Ставил я его на WP 2.2.3, с локализацией от mywordpress.ru.
Опишу действия:
- Во-первых, в плагине повсюду использовалась локализация, через локализацию проходили даже данные мини-постов и внутренние переменные. Скорее всего, если использовать стандартную, не локализованную версию WP - проблем не будет заметно, но с русской локализацией плагин начинал выдавать баги.
В проблемных местах я менял вывод типа:
<?php _e($_alt); ?>
На:
<?=$_alt; ?> - Во-вторых, ссылки и actions в плагине указывали на файл post.php, функционал которого, видимо, изменился со времен WP 1.5, и теперь плагин этим файлом просто не запускался.
Я заменил все ссылки и actions на post-new.php. Заработало. - Изменил кодировку таблицы, которую создал плагин в БД на кодировку остальных таблиц моего блога utf8_general_ci. В большинстве случаев это не потребуется, но, если кириллица в постах не сохраняется - проблема именно здесь.На этом этапе плагин ожил и багов я уже не замечал. Но решил пойти дальше и внести некоторые изменения, дабы расширить функциональность интерфейса.
- Подключил TinyMCE:
Закомментировал поле ввода поста в плагине, вместо этого сделал вызов
the_editor($post_text);
Добавил инициализацию JS файлов TinyMCE, подключеним к hook-у вызова:
wp_enqueue_script('wp_tiny_mce'); - Заставил плагин учитывать настройку временных поясов при сохранении поста:
$time_adj = time() + (get_option( 'gmt_offset' ) * 3600 );
$posttime=gmdate('Y-m-d H:i:s',$time_adj); - Добавил стандартный интерфейс заливки файлов WP:
<?
$temp_ID=-1 * time();
$uploading_iframe_ID = $temp_ID;
$uploading_iframe_src = wp_nonce_url("upload.php?style=inline&tab=upload&post_id=$uploading_iframe_ID", 'inlineuploading');
$uploading_iframe_src = apply_filters('uploading_iframe_src', $uploading_iframe_src);
if ( false != $uploading_iframe_src )
echo '<iframe id="uploading" frameborder="0" src="' . $uploading_iframe_src . '">' . __('This feature requires iframe support.') . '</iframe>';
?>
К сожалению, в данной реализации залитые файлы не привязываются к определенному мини-посту. Складываются все в одну кучу, но это не мешает их успешно использовать в мини-постах.
Если кто-то решит эту проблему - буду рад об этом узнать
- Закомментировал поля “Blog ID” и “URL” при добавлении мини-поста.
Просто посчитал их не нужными.
В результате получилась сыроватая, но работающая версия плагина Miniblog. На идеальность кода и алгоритмов не претендую, некоторые решения могут показаться грубоватыми
В добавок, скажу, что извлечение мини-постов в нужное место темплейтов - процесс очень простой и удобный.
Вот такой код:
<?
// NEWS BLOCK
$news=miniblog_return_entries();
if (count($news)>0):
?>
<div class="post_meta" id="post-news">
<div class="post_top"></div>
<div class="post_index">
<div class="post_title">
<div class="post_info">
<h1><a href="<?=get_bloginfo('wpurl') ?>/news" rel="bookmark" title="Новости">Последние Новости</a></h1>
</div>
</div>
<div class="post_content newsBlock">
<?
foreach ($news as $item){
echo '<h2>'.$item->title.'<span class="newsDate">Опубликовано '.mysql2date("j F Y",$item->date)($item->date).'</span></h2>'."\n";
echo $item->text;
echo "\n<hr />\n";
}
?>
</div>
</div>
<div class="post_bottom"></div>
</div>
<div class="clear_content"></div>
<?
endif; // END NEWS BLOCK
?>
Привел меня к вот такому результату:

Перед написанием статьи, протестировал плагин на WP 2.4-bleeding. Всё в порядке. На WP 2.3.1 проблем быть не должно.
Код результата работы можно забрать здесь: Измененный плагин Miniblog.


0 responses so far ↓
There are no comments yet...Kick things off by filling out the form below.
Leave a Comment