Свежие мысли и подход к Интернет бизнесу

Видим Web своими глазами, делаем своими руками!

Opera and Ballet Theater, Odessa, Ukraine

Мини-посты и ничего лишнего

November 22nd, 2007 · No Comments

Ситуация:

Уходишь с утра из дому, умылся, поел, уже оделся, в куртке стоишь, тут вспоминаешь, что забыл что-то сделать (закрыть окно, кому-то позвонить, что-то купить, покормить собаку, …). Решаешь оставить записку жене, или сестре, или дом. работнице, или ещё кому-либо. Записка сама небольшая, нужно передать 1-2 мысли, но оставить записку нужно быстро и на видном месте. Берёшь стикер, пишешь 3 слова, цепляешь на зеркало в коридор - и вперёд!

Думаю, многие не раз бывали в аналогичной ситуации.

Теперь представим, что дом - это Ваш блог, жена и сестра - это гости Вашего блога, а зеркало в коридоре - это боковая колонка блога, тогда вот этот кусочек стикера будет мини-постом.

В моём понимании, мини-пост - маленькая заметка, пара слов, возможно предложений, которые автор хочет оставить для кого-либо быстро и удобно. Чаще всего на видном месте.

Совсем недавно мне был необходим интерфейс для публикации на блог кратких новостей. Новости должны составляться в админке и отображаться в отдельно выделенном блоке на домашней странице блога.

Задача осложнялась тем, что для публикации новостей нельзя было использовать стандартный интерфейс добавления постов WP. Было ясно, что нужен отдельный, пусть хоть и маленький, но раздел админки.

Около часа я подбирал возможные подходы к решению данной задачи. Пришёл к выбору из 3 вариантов.

Вариант 1:

  1. Создаём категорию “Новости”
  2. Создаём дубликат стандартного интерфейса написания постов WP (post-new.php и post.php).. например, news-new.php и news.php, убираем из этих темплейтов всё лишнее, добавляем их в меню и надеемся, что результат работы будет работать.
  3. Работаем с новостями через новый интерфейс
  4. На страницах блога цепляем заглушки, чтобы предотвратить отображение постов из нашей категории вместе с остальными постами.
  5. В необходимом месте руками выбираем посты из нашей категории и отображаем.

Вариант 2:

  1. Используем плагин “Miniposts2” - выглядит живым, но, к моему сожалению, использует стандартный интерфейс WP.
  2. Приходим к необходимости опять же создания дубликатов стандартных страниц WP.

Вариант 3:

  1. Используем плагин Miniblog, о котором писал Delchyve. Плагин был задуман неплохо, имел отдельную страницу для добавления и редактирования постов, посты удобно извлекались в темплейты, даже умел генерировать RSS ленту…
  2. Но после установки и запуска на WP 2.2.3 стало очевидно, что плагин не поддерживается и попросту не работает на новых версиях WP.

Варианты 1 и 2 я отсёк, как громоздкие и ненадёжные. Не было никакой уверенности, что дубликаты страниц post-new и post админки WP продолжат успешно работать. Принял решение привести плагин Miniblog в чувства и использовать.

Процесс оказался не сложным. Ставил я его на WP 2.2.3, с локализацией от mywordpress.ru.

Опишу действия:

  1. Во-первых, в плагине повсюду использовалась локализация, через локализацию проходили даже данные мини-постов и внутренние переменные. Скорее всего, если использовать стандартную, не локализованную версию WP - проблем не будет заметно, но с русской локализацией плагин начинал выдавать баги.
    В проблемных местах я менял вывод типа:
    <?php _e($_alt); ?>
    На:
    <?=$_alt; ?>
  2. Во-вторых, ссылки и actions в плагине указывали на файл post.php, функционал которого, видимо, изменился со времен WP 1.5, и теперь плагин этим файлом просто не запускался.
    Я заменил все ссылки и actions на post-new.php. Заработало.
  3. Изменил кодировку таблицы, которую создал плагин в БД на кодировку остальных таблиц моего блога utf8_general_ci. В большинстве случаев это не потребуется, но, если кириллица в постах не сохраняется - проблема именно здесь.На этом этапе плагин ожил и багов я уже не замечал. Но решил пойти дальше и внести некоторые изменения, дабы расширить функциональность интерфейса.
  4. Подключил TinyMCE:
    Закомментировал поле ввода поста в плагине, вместо этого сделал вызов
    the_editor($post_text);
    Добавил инициализацию JS файлов TinyMCE, подключеним к hook-у вызова:
    wp_enqueue_script('wp_tiny_mce');
  5. Заставил плагин учитывать настройку временных поясов при сохранении поста:
    $time_adj = time() + (get_option( 'gmt_offset' ) * 3600 );
    $posttime=gmdate('Y-m-d H:i:s',$time_adj);
  6. Добавил стандартный интерфейс заливки файлов 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>';
    ?>

    К сожалению, в данной реализации залитые файлы не привязываются к определенному мини-посту. Складываются все в одну кучу, но это не мешает их успешно использовать в мини-постах.
    Если кто-то решит эту проблему - буду рад об этом узнать :)
  7. Закомментировал поля “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
?>

Привел меня к вот такому результату:

Новости с помощью Miniblog

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

Код результата работы можно забрать здесь: Измененный плагин Miniblog.

Tags: Технологии

0 responses so far ↓

  • There are no comments yet...Kick things off by filling out the form below.

Leave a Comment