Здравствуйте.
Подскажите, как можно сделать индекс по алфавиту в модуле Biblio не на латинице, как здесь: http://liiscience.org/biblio?sort=author&order=desc
а на кириллице, как, например, здесь http://www.freelib.info/
Кстати, может автор этого сайта и подскажет? (http://www.drupal.ru/node/17386)
Заранее спасибо.
Комментарии
Написал модуль на основе node_browser.
Только на freelib.info работает не biblio, а достаточно сильно переделанный bookreview.
Спасибо за ответ. Тогда может кто-то знает, как сделать индекс на кириллице в модуле biblio?
Попахивает некропостингом, но тем не менее.
Я кириллический индекс сделал через патч. В файле biblio_theme.inc я следующий фрагмент кода
<?php
function theme_biblio_alpha_line($type = 'author',$current = NULL, $path = NULL) {
$options = array();
$base = variable_get('biblio_base', 'biblio');
$all = '';
switch ($type){
case 'authors':
case 'keywords':
$path = (ord(substr($_GET['q'],-1)) > 97) ? $_GET['q'] . "/" : substr($_GET['q'], 0, -1);
$all = '['.l(t('Show ALL'), substr($_GET['q'], 0, -2)).']' ;
break;
case 'keyword':
$options['query'] = array('sort' => 'keyword');
$path = "$base/keyword/";
$all_query['query'] = array('sort' => 'keyword', 'order' => $_GET['order']);
$all = '['.l(t('Show ALL'), $base,$all_query).']' ;
break;
case 'author':
$options['query'] = array('sort' => 'author');
$path = "$base/ag/";
$all_query['query'] = array('sort' => 'author', 'order' => $_GET['order']);
$all = '['.l(t('Show ALL'), $base,$all_query).']' ;
break;
case 'title':
$options['query'] = array('sort' => 'title');
$path = "$base/tg/";
$all_query['query'] = array('sort' => 'title', 'order' => $_GET['order']);
$all = '['.l(t('Show ALL'), $base,$all_query).']' ;
break;
default:
if (!isset ($_GET['sort']) || $_GET['sort'] == 'year' || $_GET['sort'] == 'type')
return;
$inline = $inline ? "/inline" : "";
if (isset ($_GET['sort'])) {
$options['query']['sort'] = $_GET['sort'];
if ($_GET['sort'] == 'author')
$path = "$base/ag/";
if ($_GET['sort'] == 'title')
$path = "$base/tg/";
}
}
$_GET['order'])) {if (isset (
$options['query']['order'] = $_GET['order'];
}
$output = '<div class="biblio-alpha-line">';
for ($i = 65; $i <= 90; $i++) {
if ($i == ord(strtoupper($current))){
$output .= '<b>['.chr($i).']</b> ';
}
else{
$output .= l(chr($i), $path. chr($i), $options) .' ';
}
}
if($current) $output .= ' '.$all;
$output .= '</div>';
return $output;
}
?>
заменил на
<?php
function theme_biblio_alpha_line($type = 'author',$current = NULL, $path = NULL) {
$options = array();
$base = variable_get('biblio_base', 'biblio');
$all = '';
$lat = array(A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z);
$cyr = array(А, Б, В, Г, Д, Е, Ё, Ж, З, И, Й, К, Л, М, Н, О, П, Р, С, Т, У, Ф, Х, Ц, Ч, Ш, Щ, Э, Ю, Я);
switch ($type){
case 'authors':
case 'keywords':
$path = (ord(substr($_GET['q'],-1)) > 97) ? $_GET['q'] . "/" : substr($_GET['q'], 0, -1);
$all = '['.l(t('Show ALL'), substr($_GET['q'], 0, -2)).']' ;
break;
case 'keyword':
$options['query'] = array('sort' => 'keyword');
$path = "$base/keyword/";
$all_query['query'] = array('sort' => 'keyword', 'order' => $_GET['order']);
$all = '['.l(t('Show ALL'), $base,$all_query).']' ;
break;
case 'author':
$options['query'] = array('sort' => 'author');
$path = "$base/ag/";
$all_query['query'] = array('sort' => 'author', 'order' => $_GET['order']);
$all = '['.l(t('Show ALL'), $base,$all_query).']' ;
break;
case 'title':
$options['query'] = array('sort' => 'title');
$path = "$base/tg/";
$all_query['query'] = array('sort' => 'title', 'order' => $_GET['order']);
$all = '['.l(t('Show ALL'), $base,$all_query).']' ;
break;
default:
if (!isset ($_GET['sort']) || $_GET['sort'] == 'year' || $_GET['sort'] == 'type')
return;
$inline = $inline ? "/inline" : "";
if (isset ($_GET['sort'])) {
$options['query']['sort'] = $_GET['sort'];
if ($_GET['sort'] == 'author')
$path = "$base/ag/";
if ($_GET['sort'] == 'title')
$path = "$base/tg/";
}
}
if (isset ($_GET['order'])) {
$options['query']['order'] = $_GET['order'];
}
$output = '<div class="biblio-alpha-line">';
//for ($i = 65; $i <= 90; $i++) {
foreach ($cyr as $i){
if ($i == $current){
$output .= '<b>['.$i.']</b> ';
}
else{
$output .= l($i, $path. $i, $options) .' ';
}
}
$output .= ' | ';
foreach ($lat as $i){
if ($i == $current){
$output .= '<b>['.$i.']</b> ';
}
else{
$output .= l($i, $path. $i, $options) .' ';
}
}
if($current) $output .= ' '.$all;
$output .= '</div>';
return $output;
}
?>
Патч актуален для версии biblio 1.15 (drupal 6).
Вот что в итоге получилось.