Комменты и публикации в 2 разных блока

По просьбе Encyclopod'a хочу описать как выводить комменты и публикации в 2 разных блока.
По умолчанию у нас есть один блок с возможностью переключать комменты и публикации. Его мы и будем использовать в качестве блока с комментами.

Для этого нам необходимо просто убрать переключалку с публикаций на комменты.

Открываем файл block.stream.tpl (в шаблоне new он находится в templates\skin\new) и убираем следущие строки

<ul class="block-nav">						
<li><strong></strong><a href="#" id="block_stream_topic" onclick="lsBlockStream.toggle(this,'topic_stream'); return false;">{$aLang.block_stream_topics}</a></li>
<li class="active"><a href="#" id="block_stream_comment" onclick="lsBlockStream.toggle(this,'comment_stream'); return false;">{$aLang.block_stream_comments}</a><em></em></li>
</ul>


(строки 8-11)

и для верного заголовка сроку 6

<h1>{$aLang.block_stream}</h1>


заменим на

<h1>{$aLang.block_stream_comments}</h1>


Получаем готовый блок с комментам

Теперь нам необходим блок с публикациями. Для этого создадим новый файл блока только с публикациями в classes\blocks и назовем его BlockStreamTopics.class.php.

Его код:


class BlockStreamTopics extends Block {
      public function Exec() {
                if ($oTopics=$this->Topic_GetTopicsLast(BLOCK_STREAM_COUNT_ROW)) {
                        $this->Viewer_Assign('oTopics',$oTopics);
                        $sTextResult=$this->Viewer_Fetch("block.stream_topic.tpl");
                        $this->Viewer_Assign('sStreamTopic',$sTextResult);
                }
        }

}


(спасибо sidney_yang)

Теперь создадим шаблон нового блока — block.streamtopics.tpl

и его код:


<div class="block stream">
        
        <div class="tl"><div class="tr"></div></div>
                <div class="cl"><div class="cr">
                       
                 <h1>{$aLang.block_stream_topics}</h1>
                       
                                          
        
        <div class="block-content">
                {literal}
                        <script language="JavaScript" type="text/javascript">
                        var lsBlockStream;
                        window.addEvent('domready', function() { 
                                lsBlockStream=new lsBlockLoaderClass();                                                 
                        });
                        </script>
                {/literal}
                {$sStreamTopic}
       </div>
        
                 <div class="right"><a href="{$DIR_WEB_ROOT}/new/">{$aLang.block_stream_comments_all}</a> | <a href="{$DIR_WEB_ROOT}/{$ROUTE_PAGE_RSS}/allcomments/">RSS</a></div>

                                </div></div>
                                <div class="bl"><div class="br"></div></div>
                 </div>



Теперь назначим вывод нового блока в нужных нам экшенах.
Предположим нужно выводить 2 блока только на главной, для этого открываем classes\actions\ActionIndex.class.php

и добавляем наш новый блок streamtopics

$this->Viewer_AddBlocks('right',array('stream','streamtopics','tags','blogs'));


строка 65

Итого: у нас 2 разных блока с комментами и публикациями на главной

17 комментариев

avatar
ошибками стреляет,

Warning: require_once(/home/u193893/dnevnikisnov.ru/www/classes/blocks/BlockStreamtopics.class.php) [function.require-once]: failed to open stream: No such file or directory in /home/u458745/site.ru/www/classes/modules/sys_viewer/plugs/insert.block.php on line 50


Я думаю что этот блок, раз он новый, надо где то еще зарегистрировать.

Попутно подправь пример кода в странице BlockStreamTopics.class.php., завернув в <?php… ?>
avatar
все, разобрался, нужно было просто верхний регистр убрать из названия, вместо BlockStreamTopics.class.php => BlockStreamtopics.class.php.
avatar
Вопрос, а как сделать чтобы выводилось только 10 Публикаций, а то в этом блоке выводятся все публикации
avatar
есть у кого-нибудь идеи?
avatar
дам 100 рублей за помощь
avatar
В config/config.php(0.3.1)

define('BLOCK_STREAM_COUNT_ROW',20);


сколько записей выводить в блоке «Прямой эфир»
avatar
Читай внимательнее, после разделения прямого эфира на Комментарии и Публикации, это работает только на Комментарии, а Публикации выводит все, которые есть на сайте
avatar
Внимательней читать врядли получится, ибо я этот топик писал.

как я уже говорил:

Эта константа

BLOCK_STREAM_COUNT_ROW


Отвечает за количество выводимых записей в блок. Она же и указанна в коде отдельного блока с публикациями. А именно в качестве входного параметра для метода GetTopicsLast объекта Topic.

Отсуда вывод:
Либо у Вас в конфиге указанно большое значение этой константы, либо были сделаны изменения в методе GetTopicsLast в недрах движка.
avatar
Внимательней читать врядли получится, ибо я этот топик писал.

упс, бывает:)
ничего не менял в движке, все стандартное.
avatar
а версия?
avatar
пробовал на денвере — 0.4.2.
avatar
Дык, там же вовсем все по другому :)
avatar
все работает, только выводит все новости, что-то надо прописать в конфиге, наподобие вывода кол-ва комментарий и публикаций в прямом эфире.
avatar
Личкой отписал решение проблемы
Сто рублеф не получил :)
несправедливость… рррр…
avatar
о_О ща проверю, если работает скину:)
avatar
Работает, когда прописываешь в ActionIndex.class вывод конкретных блоков:
$this->Viewer_AddBlocks('right',array('stream','streamtopics','tags','blogs'));


Это все здорово, но пропадают блоки плагинов. К примеру, блок виджета от Фейсбука.

И как настроить вывод блоков внутри топика?

Буду очень признателен за помощь.
avatar
Нашел альтернативный ход — плагин управления блоками — livestreet.ru/blog/4478.html

Конфиг выглядит как-то вот так:
<?php
/*---------------------------------------------------------------------------
* @Plugin Name: aceBlockManager
* @Plugin Id: aceblockmanager
* @Plugin URI: 
* @Description: Custom Block Manager for LiveStreet/ACE
* @Version: 1.0.108
* @Author: Vadim Shemarov (aka aVadim)
* @Author URI: 
* @LiveStreet Version: 0.4.1
* @File Name: config.php
* @License: GNU GPL v2, http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*----------------------------------------------------------------------------
*/

if (defined('BLOCKMANAGER_VERSION')) return array();

define('BLOCKMANAGER_VERSION', '1.0');
define('BLOCKMANAGER_VERSION_BUILD', '108');

$config = array('version' => BLOCKMANAGER_VERSION.'.'.BLOCKMANAGER_VERSION_BUILD);

/***
 * Параметры модуля
 */

/***
 * Сброс блоков - сбрасывать/не сбрасывать установку блоков, которая 
 * задается во actions
 * 
 * Например:
 *   $config['clear_blocks'] = true; // Сбросить все блоки
 *
 *   $config['clear_blocks'] = false; // Не сбрасывать блоки
 *
 

 *
 *   $config['clear_blocks'] = array('exclude'=>'admin, people, profile');
 *     // Cбрасывать блоки во всех actions, кроме admin и profile
 */
 $config['clear_blocks'] = array('include'=>'index,blog');
 
// Cбрасывать блоки, которые заданы в actions index и blog



$config['blocks'][]=array(
        'block'=>'greetings', // название блока
        'position'=>'right', // позиционирование блока
        'priority'=>0,
        'params'=>array(
            'plugin'=>'greetings', //
            ),
'exclude'=>array('admin', 'settings', 'profile', 'talk', 'people', 'office'),
);

$config['blocks'][]=array(
        'block'=>'similarTopics', // название блока
        'position'=>'right', // позиционирование блока
        'priority'=>0,
        'params'=>array(
            'plugin'=>'similar', 
            ),
'exclude'=>array('admin', 'settings', 'profile', 'talk', 'people', 'office'),
);


$config['blocks'][]=array(
        'block'=>'streamtopics', // название блока
        'position'=>'right', // позиционирование блока
        'priority'=>0,
        'params'=>array(
            ),
'exclude'=>array('admin', 'settings', 'profile', 'talk', 'people', 'office'),
);

$config['blocks'][]=array(
        'block'=>'stream', // название блока
        'position'=>'right', // позиционирование блока
        'priority'=>0,
        'params'=>array(
            ),
'exclude'=>array('admin', 'settings', 'profile', 'talk', 'people', 'office'),
);

$config['blocks'][]=array(
        'block'=>'facebook', // название блока
        'position'=>'right', // позиционирование блока
        'priority'=>0,
        'params'=>array(
            'plugin'=>'facebook', 
            ),
'exclude'=>array('admin', 'settings', 'profile', 'talk', 'people', 'office'),
);

return $config;
// EOF


Но теперь «Похожие темы» не выводит :-)
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.