Тема: Как сделать новости на главной?

Как лучше реализовать «новости» на главной сайта?

Пробовал сделать чтобы на главной отображались последние 3-5 постов из блога по тегу «Новости», но тоже не разобрался как.

2

Re: Как сделать новости на главной?

Я специально не делал ничего похожего на новости, потому что это не очень хорошая практика:
http://www.artlebedev.ru/kovodstvo/sections/129/

Если новости всё же нужны, их лучше всего делать вручную, вдумчиво удаляя неактуальные записи (а не по принципу «выводим последние N записей»).

Для вставки последнего поста блога есть метка <!-- s2_blog_last_post -->. Могу сделать что-то похожее для вставки нескольких постов подряд. Специально делать метку для вывода постов с некоторым ключевым словом считаю избыточным. Тем не менее, если нужна именно такая функциональность, могу привести соответствующий код.

Re: Как сделать новости на главной?

Я бы и сам лучше апишку Твиттера туда засунул, но заказчик требует.

Было бы здоровою, такой код увидеть.

4

Re: Как сделать новости на главной?

Сначала вам нужно взять самую свежую версию расширения s2_blog (я там один запрос подправил): http://s2cms.ru/downloads/development/extensions/

Я сделал расширение из одного манифеста, которое добавляет метку <!-- s2_blog_news -->. Поместите ее в шаблоны. Вам осталось подобрать правильный идентификатор ключевого слова (в строчке ' AND pt.tag_id = 1') и количество последних постов в вызове s2_blog_news_last(5).

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">
<!--
/**
 * Blog News
 *
 * @copyright (C) 2012 Roman Parpalak
 * @license http://www.gnu.org/licenses/gpl.html GPL version 2 or higher
 * @package s2_blog_news
 */
-->

<extension for="S2" engine="1.0">
    <id>s2_blog_news</id>
    <title>Blog news</title>
    <version>1.0a</version>
    <description>Adds a placeholder for blog posts with a tag specified.</description>
    <author>Roman Parpalak</author>

    <minversion>1.0b3</minversion>
    <maxtestedon>1.0b3</maxtestedon>

    <dependencies>
        <dependency>s2_blog</dependency>
    </dependencies>

    <hooks>
        <hook id="fn_s2_blog_last_posts_array_pre_get_ids_qr"><![CDATA[
if (isset($GLOBALS['s2_blog_news_enabled']) && $GLOBALS['s2_blog_news_enabled'])
{
    $query['WHERE'] .= ' AND pt.tag_id = 1';
    $query['JOINS'] =  array(
        array(
            'INNER JOIN'    => 's2_blog_post_tag AS pt',
            'ON'            => 'pt.post_id = p.id'
        )
    );
}
        ]]></hook>

        <hook id="idx_pre_get_queries"><![CDATA[
if (strpos($template, '<!-- s2_blog_news -->') !== false)
{
    if (!defined('S2_BLOG_FUNCTIONS_LOADED'))
        include $ext_info['path'].'/../s2_blog/blog_functions.php';

    function s2_blog_news_last ($num_post)
    {
        $posts = s2_blog_last_posts_array($num_post);
        if (!count($posts))
            return '';

        $html = '<h2 class="preview">%1$s<a href="%2$s">%3$s</a></h2>'."\n".
            '<div class="preview time">%5$s</div>'."\n".
            '<div class="post body">%6$s</div>'."\n";

        ($hook = s2_hook('fn_s2_blog_news_last_start')) ? eval($hook) : null;

        $output = '';
        foreach ($posts as $post)
        {
            $link = S2_BLOG_PATH.date('Y/m/d/', $post['create_time']).urlencode($post['url']);
            $tag_prefix = $post['tags'] ? '<small>'.str_replace('<a ', '<a class="preview_section" ', $post['tags']).' &rarr;</small> ' : '';

            ($hook = s2_hook('fn_s2_blog_last_post_pre_post_merge')) ? eval($hook) : null;

            $output .= sprintf($html,
                $tag_prefix,
                $link,
                s2_htmlencode($post['title']),
                s2_date($post['create_time']),
                s2_date_time($post['create_time']),
                $post['text']
            );
        }

        return $output;
    }

    $GLOBALS['s2_blog_news_enabled'] = true;
    $replace['<!-- s2_blog_news -->'] = s2_blog_news_last(5);
    $GLOBALS['s2_blog_news_enabled'] = false;
}
        ]]></hook>

    </hooks>
</extension>

Этот код нужно поместить в файл _extensions/s2_blog_news/manifest.xml (в кодировке UTF-8 без метки порядка байт, BOM), потом установить это расширение.

Про разработку расширений я написал в документации: http://s2cms.ru/docs/extensions

Re: Как сделать новости на главной?

Круто, но что-то не работает.

09.10.2012 06:03:47. Текст был изменен (@GlebVelikanov).

6

Re: Как сделать новости на главной?

Вы хоть симптомы напишите, я же не обладаю телепатическими способностями :)

Есть какие-нибудь сообщения об ошибках (возможно, в логе ошибок веб-сервера)?

Точно метка в шаблонах написана именно так, без лишних пробелов?

<!-- s2_blog_news -->

Очевидно, если хотите новости на главной, нужно эту метку добавить в шаблон mainpage.php.

Посмотрите последний абзац про отладку: http://s2cms.ru/docs/extensions
Вы удаляли и заново устанавливали это расширение s2_blog_news после изменений в манифесте?

Re: Как сделать новости на главной?

Ни ошибок, ни работы — никаких симптомов не вижу. Про лог ошибок веб-сервера, не слышал.

Метка точно правильно. Удалял, устанавливал заново — не помогает.

8

Re: Как сделать новости на главной?

Можете сделать аккаунт для меня и прислать логин и пароль по почте или в личных сообщениях? Я сам попробую разобраться.

Re: Как сделать новости на главной?

Так не охота другую cms искать только из-за новостей.

Возможно, я идентификатор ключевого слова не могу правильный подобрать. Как посмотреть какой id у какого тега?

На мой взгляд, по названию, было бы удобнее чем по id указывать тег, или чтоб вообще по-умолчанию этот тег «новости» назывался.