Recent Topics

1 Mar 03, 2011 21:45    

Возникли 2 вопроса, кто силен в веб-программировании, подскажите пожалуйста.

Первый. Есть JS Coda Slider, меняющий рисунок. Хочу его поставить. Но смысл в том, что b2evo мультиблоговая CMS и нужно что бы скрипт использовать для показа слайдером контейнера со всех или определенных блогов. Нужна конкретно замена Headerов. Долго ищу, недавно как раз наткнулся на интересную новую [url=http://forums.b2evolution.net/viewtopic.php?t=21777&start=0&postdays=0&postorder=asc&highlight=coda+slider]тему[/url], спасибо создателю. Это для рисунков там реализовано. А вопрос заключается в том, возможно ли так сделать, как написал выше, без серьезной переработки ядра используя код только лишь в собственной теме, чтобы собирать определенный код(контейнеры) с разных блогов в JS. Рыл этот сборщик summary.php, но что то просто не догоняю что брать в код для контейнера с другого блога и реализуемо ли это вообще в коде скина.

И второй вопрос как раз о затрагивании ядра CMS. Некоторые вещи конечно хотелось бы сделать удобнее, как например имея пост с большим количеством страниц не совсем удобно вывод всей навигации страниц. Хотелось бы что бы они были с сокращенной << перв. <пред стр. след.> посл.>>. И как в собственном скине сделать расширение, что бы подменить код ядра? Это делать через расширение классов? Зараннее спасибо.

2 Mar 08, 2011 03:12

Если я правильно понял первый вопрос, то для изменения <head> и HTTP Headers то можно скопировать файл /skins/_html_header.inc.php в /skins/your-skin/_html_header.inc.php и изменять его.

Некоторые вещи конечно хотелось бы сделать удобнее, как например имея пост с большим количеством страниц не совсем удобно вывод всей навигации страниц. Хотелось бы что бы они были с сокращенной << перв. <пред стр. след.> посл.>>.

Если улучшите ядро, пишите код сюда, я внесу изменения ;)

И как в собственном скине сделать расширение, что бы подменить код ядра? Это делать через расширение классов? Зараннее спасибо.

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

3 Mar 08, 2011 16:27

По первому вопросу, не так я объяснил. Вопрос чисто технический. Можно ли в свой блог, не прибегая к каким-то кардинальным изменениям кода всего движка, а лишь используя самодельную тему, выводить блок (напр. контейнер 'Header') из блога другого пользователя? Желательно и в таком же виде как и в CSS темы блога этого пользователя. Если это технически реализуемо, то буду штудировать, как это сделать. Про _html_header.inc.php я понял, его конечно нужно задействовать, чтоб включить в своей теме JS. Так сказать не замена html_header, а сборка нужного со всех или определенных блогов. Таким образом можно реализовать большое разнообразие возможностей, для создания не только мультиблогового формата, но и хорошо оснащенных сайтов.
По второму вопросу (и первого касаемо), то все конечно наилучшим образом сделать плагином. Спасибо, Александр, за подсказку. Про плагины не подумал сразу. Но в написании плагинов для b2evo пока не силен. :oops: Мануала по физической модели нет на русском))) Модель стандарт MVC, но что откуда берется пока не въезжаю во все тонкости.
Вот код навигации , можно задействовать в _item.class.php стр. 1820 в b2evo 4.0.3

// Проверяем нужны ли страницы назад  
			if ($page != 1) $pervpage = '<a href="'.$url.'?page=1">&lt;&lt; '.T_('First').'</a>&nbsp;<a href="'.$url.'?page='.($page - 1).'"> &lt; '.T_('Back').'</a>';
			// Проверяем нужны ли страницы вперед
			if ($page != $text) $nextpage = '<a href="'.$url.'?page='.($page + 1).'"> '.T_('Next').' &gt; </a>&nbsp;<a href="'.$url.'?page='.$text.'">'.T_('Last').' &gt;&gt;</a> ';  
			
			// Находим три ближайшие страницы с обоих краев, если они есть
			
			if($page - 3 > 0) $page3left = '<a href="'.$url.'?page='.($page - 3).'">'.($page - 3).'</a>';
			if($page - 2 > 0) $page2left = '<a href="'.$url.'?page='.($page - 2).'">'.($page - 2).'</a>';  
			if($page - 1 > 0) $page1left = '<a href="'.$url.'?page='.($page - 1).'">'.($page - 1).'</a>'; 
			
			if($page + 3 <= $text) $page3right = '<a href="'.$url.'?page='.($page + 3).'">'.($page + 3).'</a>';
			if($page + 2 <= $text) $page2right = '<a href="'.$url.'?page='.($page + 2).'">'.($page + 2).'</a>';  
			if($page + 1 <= $text) $page1right = '<a href="'.$url.'?page='.($page + 1).'">'.($page + 1).'</a>'; 
			
			// навигация 
		echo $before;
		echo $pervpage.' '.$page3left.' '.$page2left.' '.$page1left.' '.$page.' '.$page1right.' '.$page2right.' '.$page3right.' '.$nextpage;
		echo $after;

+локализация и оформление в скине.
но грамотно сделать плагин, спрашивал об этом, как сделать чтобы была возможность задействовать отдельно. Просто туплю :D , еще раз спасибо, Александр (надеюсь на подсказку по контейнерам:oops: ). Буду писать и вникать в виджеты .

4 Mar 08, 2011 20:41

За код спасибо.

Список всех plugin events можно найти тут /inc/plugins/model/_plugins_admin.class.php:90 и тут /inc/plugins/_plugin.class.php (весь файл)

Примеры плагинов /plugins/_test.plugin.php и skeleton.plugin.php

Контейнер выводится просто

$params = array(
    'block_start' => '',
    'block_end' => '',
);
$sco_name = NT_('Header');

// Change $Blog->ID to some blog ID

$EnabledWidgetCache = & get_EnabledWidgetCache();
$Widget_array = & $EnabledWidgetCache->get_by_coll_container( $Blog->ID, $sco_name );

if( !empty($Widget_array) )
{
	foreach( $Widget_array as $ComponentWidget )
	{	// Let the Widget display itself (with contextual params):
		$ComponentWidget->display_with_cache( $params, array() );
	}
}

5 Mar 08, 2011 20:57

Спасибо! То что нужно :)

6 Apr 11, 2011 14:14

Спасибо. Мне тоже это информация стала отличным помощником


Form is loading...