Хуки
Теперь нам нужно связать представление ноды и шестеренку управления избранным. Как было сказано ранее, вывод нода состоит из трех частей. Нас интересует последняя, которая отвечает за отображение дополнительной информации. Отправляемся читать код модели node шестеренки nodes. Смотрим, как строится отображение дополнительной информации.
Добавляем ссылку на «Избранные» ноды пользователя. Смотрим как реализован вывод навигации на странице пользователя (модель user шестеренки user).
Хукаем компиляцию вывода модели информационной панели.
Все созданные хуки располагаем в файле "/gears/favorites/_hooks.php".
function _show(&$node,$type = 'full',$return = FALSE){
...
$info =& $this->breadcrumb;
$avatar = reset(make_icons($node->avatar));
//'!/gears/nodes/img/icon/time.png! '
$info->set('node_info')->data($node)
->add('<span>'.df($node->created_date).'</span>')
->add('<a href="'.l('/blogs/'.$node->author_url_name).'">
<img class="avatar" src="'.$avatar.'">
<a href="'.l('/user/'.$node->author_url_name).'">'.$node->author.'</a>');
$node->info = $info->compile();
...
}
Исходя из полученной информации пишем хук./**
* Add link-icon to node_info breadcrumb
*
* @param object $Breadcrumb
* @return void
*/
function favorites_breadcrumb_compile_(&$Breadcrumb){
if($Breadcrumb->name == 'node_info' && acl('favorites manage')){
$status = empty($Breadcrumb->data->favorite) ? 'add' : 'remove';
$Breadcrumb->add(' <a href="javascript:void(0)">
<img class="favorite-action" id="node-'.$Breadcrumb->data->id.'"
src="/gears/favorites/img/icon/'.$status.'.png" title="'.t('!favorites '.$status).')"/>
</a> ',0);
}
}
// ------------------------------------------------------------------------
Добавляем ссылку на «Избранные» ноды пользователя. Смотрим как реализован вывод навигации на странице пользователя (модель user шестеренки user).
/**
* Show head panel with userinfo
*
* @param object
* @param string
* @return void
*/
function head($user,$active = 'profile'){
d('user');
$CI =& get_instance();
$CI->breadcrumb->set('userinfo_panel')->wrapper();
$CI->breadcrumb->data($user);
$CI->breadcrumb->add('<a href="'.$user->avatar['original'].'" target="_blank">
<img src="'.$user->avatar['64x64'].'" border="0" class="avatar"/></a>
<h1><a href="'.l('/user/'.$user->url_name).'">'.$user->name.'</a></h1>');
if($CI->user->get('user_group') == 1 OR $CI->user->get('id') == $user->id){
$CI->breadcrumb->add('<a href="'.l('/user/'.$user->url_name.'/edit/').'">
<img src="/gears/global/img/icon/edit.png"/></a>');
}
$CI->breadcrumb->compile(4);
$CI->userinfo_tabs = new Panel('userinfo_tabs',FALSE,FALSE,'tabs');
$CI->userinfo_tabs->data =& $user;
$CI->userinfo_tabs->set_title = FALSE;
$CI->userinfo_tabs->links_base = '/user/'.$user->url_name.'/';
$CI->userinfo_tabs->add(array('name'=>'profile','text'=>t('!user Profile'),'index'=>TRUE));
$CI->userinfo_tabs->set_active($active);
$CI->userinfo_tabs->compile(5);
d();
}
// ------------------------------------------------------------------------
Хукаем компиляцию вывода модели информационной панели.
/**
* Add userinfo_tabs tab for favorites link
*
* @param object
* @return void
*/
function favorites_panel_compile_(&$Panel){
$CI =& get_instance();
if($Panel->name == 'userinfo_tabs'){
$count = $CI->db->where(array('uid'=>$Panel->data->id))
->count_all_results('favorites');
$count = $count > 0 ? ' ('.$count.')' : '';
$CI->userinfo_tabs->add(array('name'=>'favorites',
'text'=>fc_t('!favorites favorite').$count,
'link'=>l('/favorites/'.$Panel->data->url_name)));
if($CI->name == 'favorites') {
$Panel->set_active('favorites');
}
}
}
// ------------------------------------------------------------------------
Все созданные хуки располагаем в файле "/gears/favorites/_hooks.php".
