Пример реализации блока «Самые лучшие пользователи»

22
Отвечая на вопрос, хочу привести небольшой пример того, как создать блок, который будет выводить список лучших пользователей.

За основу я взял блок classes/block/BlockBlogs.class.php. Он выводит топ блогов на сайт.
Немного поправив его получаем следующий код. И сохраняем как classes/block/BlockUserTop.class.php
<?php
class BlockUserTop extends Block {
	public function Exec() {
		        
        if ($aResult=$this->User_GetUsersRating('good',1,10) ) {
			$aUserTop=$aResult['collection'];
            
			$this->Viewer_Assign('aUserTop',$aUserTop);
			$sTextResult=$this->Viewer_Fetch("block.user_top.tpl");
			$this->Viewer_Assign('sUserTop',$sTextResult);
		}
	}
}
?>
Все, блок готов к работе. Осталось добавить два шаблона.

block.usertop.tpl
<div class="block-user-top">
{$sUserTop}
</div>

block.user_top.tpl
{foreach from=$aUserTop item=oUser}
{$oUser->getLogin()}<br />
{/foreach}


И подключить его в требуемое место в конфиге.
'usertop'=>array('priority'=>1),

Как вставлять блоки в конфиг описывать не буду.
____
Извините за неточности, потому как времени нет особо расписывать.
  • +6
  • 15 марта 2011, 12:14
  • skif

Комментарии (19)

RSS свернуть / развернуть
если я правильно все понял то в config.php добавляем сюда (правило для главной и страниц)

$config['block']['rule_index_blog'] = array(
	'path' => array( 
		'___path.root.web___/blog$',
		'___path.root.web___/blog/*$',
		'___path.root.web___/blog/*/page\d+$',
		'___path.root.web___/blog/*/*\.html$',
		'___path.root.web___/blog/*\.html$',
	),
	'action'  => array(
			'index', 'new'
		),
	'blocks'  => array(
			'right' => array('stream'=>array('priority'=>100),'tags'=>array('priority'=>50),'blogs'=>array('params'=>array(),'priority'=>1))
		),
	'clear' => false,

'usertop'=>array('priority'=>1),

);


шаблоны просто кинуть в папку скина?
а выводить в нужном месте как?

эх, грохнут меня тут за тупые вопросы)
0
'usertop'=>array('priority'=>1),
нужно добавить перед
'stream'=>array('priority'=>100)
0
это будет означать, что блок usertop будет выводится в сайдбаре right с приоритетом 1.
0
вообще, он нужен сразу после хедера, над меню навигации «все», «коллективные»… +)

я на эту тему пытался прикруть блок Кто онлайн из плагина aceblockmanager
но так и не понял, как там поменять расположение

собственно, поэтому и была мысть просто целиковым кодом вставить в нужном месте
0
в этом случае нужно будет действовать так:
$config['block']['rule_index_blog'] = array(
        'path' => array( 
                '___path.root.web___/blog$',
                '___path.root.web___/blog/*$',
                '___path.root.web___/blog/*/page\d+$',
                '___path.root.web___/blog/*/*\.html$',
                '___path.root.web___/blog/*\.html$',
        ),
        'action'  => array(
                        'index', 'new'
                ),
        'blocks'  => array(
                        'right' => array('stream'=>array('priority'=>100),'tags'=>array('priority'=>50),'blogs'=>array('params'=>array(),'priority'=>1)),
                        'top' = array('usertop'=>array('priority'=>1))
                        
                ),
        'clear' => false,

'usertop'=>array('priority'=>1),

);


А в нужное место на странице вставить
{if isset($aBlocks.top)}
	{foreach from=$aBlocks.right item=aBlock}
    		{insert name="block" block=`$aBlock.name` params=`$aBlock.params`}
	{/foreach}
{/if}
Что-то в этом духе, но это конечно не финальный результат.
0
да, кстати, 'usertop'=>array('priority'=>1), внизу надо убрать, она не нужна
0
поправочка
{if isset($aBlocks.top)}
        {foreach from=$aBlocks.top item=aBlock}
                {insert name="block" block=`$aBlock.name` params=`$aBlock.params`}
        {/foreach}
{/if}
0
куда этот код встаить, да и вообще кто может последовательно описать что куда ставить.
надеюсь не убьют за такие вопросы )) просто я нуб, простите и спс кто откликнется
0
сейчас покажу наглядно
вот тут внизу на самом дне vidnoegorod.ru/people/

нужно такое же наверху на всех страницах перед меню
0
создать новый тип блоков, не?
0
у вас у всех тут мания что-то создать новое наверно+)

умел бы, давно бы
0
ну смотрите
в сайдбаре вот так сделано
{if isset($aBlocks.right)}
				{foreach from=$aBlocks.right item=aBlock}
					{if $aBlock.type=='block'}
						{insert name="block" block=`$aBlock.name` params=`$aBlock.params`} 
					{/if}
					{if $aBlock.type=='template'}						 
						{include file=`$aBlock.name` params=`$aBlock.params`}
					{/if}	
				{/foreach}			
			{/if}	

а вы возьмите, поменяйте .right на ваше название (например .top), засуньте в шаблон и в блокменеджере его же юзайте
0
я не понимаю, где физически прописывается значение места расположения блока
0
куда в шаблон засунете, там и будет
0
А как сделать, чтобы созданный блок выводился только на главной странице (ну и страницы 2,3,4,5...), а остальные блоки остались как есть?
0
Зашёл на сайт с мыслью найти этот блок. Бац! А он на главной уже. Прямо чудо =)
0
Полезная инфа. Спасибо громаднейшее.
0
На сайте vidnoegorod.ru/people/ выводится блок с аватарками пользователей, а у меня просто логины, причем не кликабельные, так и должно быть, нужно дорабатывать или я что то не так сделал?
0
Народ подскажите плиз как сделать, если можно подробнее. Где и как и что создать куда вставить и все такое ))) спс
-1
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.