Индекс в модуле Biblio на кириллице

Главные вкладки

Аватар пользователя perfectsense perfectsense 8 ноября 2009 в 13:30

Здравствуйте.
Подскажите, как можно сделать индекс по алфавиту в модуле Biblio не на латинице, как здесь: http://liiscience.org/biblio?sort=author&order=desc
а на кириллице, как, например, здесь http://www.freelib.info/

Кстати, может автор этого сайта и подскажет? (http://www.drupal.ru/node/17386)
Заранее спасибо.

Комментарии

Аватар пользователя Strelok Strelok 28 июня 2011 в 12:18

Попахивает некропостингом, но тем не менее.

Я кириллический индекс сделал через патч. В файле 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/";
      }

  }
  if (isset (

$_GET['order'])) {
    
$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>&nbsp;';
    }
    else{
      
$output .= l(chr($i), $pathchr($i), $options) .'&nbsp;';
    }
  }
  if(
$current$output .= '&nbsp;&nbsp;'.$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(ABCDEFGHIJKLMNOPQRSTUVWXYZ);
  
$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>&nbsp;';
    }
    else{
      
$output .= l($i$path$i$options) .'&nbsp;';
    }
  }  
  
$output .= '&nbsp;|&nbsp;';    
  foreach (
$lat as $i){
    if (
$i == $current){
      
$output .= '<b>['.$i.']</b>&nbsp;';
    }
    else{
      
$output .= l($i$path$i$options) .'&nbsp;';
    }
  }
  if(
$current$output .= '&nbsp;&nbsp;'.$all;
  
$output .= '</div>';
  return 
$output;
}
?>

Патч актуален для версии biblio 1.15 (drupal 6).

Вот что в итоге получилось.