tpl->addValue('Blogroll',array('tplBlogroll','blogroll')); $core->tpl->addValue('BlogrollXbelLink',array('tplBlogroll','blogrollXbelLink')); $core->url->register('xbel','xbel','^xbel(?:/?)$',array('urlBlogroll','xbel')); class tplBlogroll { public static function blogroll($attr) { $category='

%s

'; $block=''; $item='%1$s'; if (isset($attr['category'])) { $category = addslashes($attr['category']); } if (isset($attr['block'])) { $block = addslashes($attr['block']); } if (isset($attr['item'])) { $item = addslashes($attr['item']); } $only_cat = 'null'; if (!empty($attr['only_category'])) { $only_cat = "'".addslashes($attr['only_category'])."'"; } return ''; } public static function blogrollXbelLink($attr) { $f = $GLOBALS['core']->tpl->getFilters($attr); return 'blog->url.$core->url->getBase("xbel")').'; ?>'; } public static function getList($cat_title='

%s

',$block='',$item='
  • %s
  • ',$category=null) { $blogroll = new dcBlogroll($GLOBALS['core']->blog); try { $links = $blogroll->getLinks(); } catch (Exception $e) { return false; } $res = ''; $hierarchy = $blogroll->getLinksHierarchy($links); if ($category) { if (!isset($hierarchy[$category])) { return ''; } $hierarchy = array($hierarchy[$category]); } foreach ($hierarchy as $k => $v) { if ($k != '') { $res .= sprintf($cat_title,html::escapeHTML($k))."\n"; } $res .= self::getLinksList($v,$block,$item); } return $res; } private static function getLinksList($links,$block='',$item='%1$s') { $list = ''; # Find current link item if any $current = -1; $current_size = 0; $self_uri = http::getSelfURI(); foreach ($links as $k => $v) { if (!preg_match('$^([a-z][a-z0-9.+-]+://)$',$v['link_href'])) { $url = http::concatURL($self_uri,$v['link_href']); if (strlen($url) > $current_size && preg_match('/^'.preg_quote($url,'/').'/',$self_uri)) { $current = $k; $current_size = strlen($url); } } } foreach ($links as $k => $v) { $title = $v['link_title']; $href = $v['link_href']; $desc = $v['link_desc']; $lang = $v['link_lang']; $xfn = $v['link_xfn']; $link = ''. html::escapeHTML($title). ''; $current_class = $current == $k ? ' class="active"' : ''; $list .= sprintf($item,$link,$current_class)."\n"; } return sprintf($block,$list)."\n"; } # Widget function public static function linksWidget($w) { global $core; if ($w->homeonly && $core->url->type != 'default') { return; } $links = self::getList('

    %s

    ','','%1$s',$w->category); if (empty($links)) { return; } return ''; } } class urlBlogroll extends dcUrlHandlers { public static function xbel($args) { $blogroll = new dcBlogroll($GLOBALS['core']->blog); try { $links = $blogroll->getLinks(); } catch (Exception $e) { self::p404(); return; } if ($args) { self::p404(); return; } http::cache($GLOBALS['mod_files'],$GLOBALS['mod_ts']); header('Content-Type: text/xml; charset=UTF-8'); echo ''."\n". ''."\n". ''."\n". ''.html::escapeHTML($GLOBALS['core']->blog->name)." blogroll\n"; $i = 1; foreach ($blogroll->getLinksHierarchy($links) as $cat_title => $links) { if ($cat_title != '') { echo ''."\n". "".html::escapeHTML($cat_title)."\n"; } foreach ($links as $k => $v) { $lang = $v['link_lang'] ? ' xml:lang="'.$v['link_lang'].'"' : ''; echo ''."\n". ''.html::escapeHTML($v['link_title'])."\n"; if ($v['link_desc']) { echo ''.html::escapeHTML($v['link_desc'])."\n"; } if ($v['link_xfn']) { echo "\n". ''.$v['link_xfn']."\n". "\n"; } echo "\n"; } if ($cat_title != '') { echo "\n"; } $i++; } echo ''; } } ?>