Аватар пользователя B.X

Nascentes morimur...

Nascentes morimur, finisque ab origine pendet. — Рождаясь, мы умираем; конец обусловлен началом.

Top.Mail.Ru Каталог webplus.info Яндекс.Метрика

Пользователей онлайн: 0.

«Они считали чувство вины ошибкой, а угрызения совести — слабостью. Они всегда были практичны и никогда — сентиментальны. Но дружба их не имела границ.»

Темизация пейджера (pager), замена node?page=1 на node/page/1 (6.0) | [Харзах]-[РУ]

Аватар пользователя B.X

Эта тема давнишняя и вопрос я этот поднял ещё с начала ознакомления с Друпал (07/04/2007), больше двух лет назад. Мне подумалось. почему ЧПУ не работает для пейджера нод (трекера и всего остального) в Друпале? Неужели так сложно было сделать? Как оказалось, не сложно. jason32 сделал это фактически на спор, желая посмотреть, заплатят ли ему 30$ за это или нет... Всё работает отлично. В трекере, на главной и везде где надо. Ниже я даю два кода, то, что у меня и тот, что был опубликован на Друпал.Ру.

Если кто попробовал в работе и ему всё понравилось, тот может перечислить денег ("сколько не жалко ™") на счёт разработчика. Его реквизиты можно найти здесь. Лично я за такую хорошую реализацию не пожалею 15$, а если это сделают несколько человек, то сами понимаете, работа наверняка окупится. Код, который ниже, нужно вставить в файл template.php вашей темы:

<?php
/** Убрать ? в pager, реализация jason32  http://drupal.ru/node/4875
 */
function phptemplate_pager_link($text$page_new$element$parameters = array(), $attributes = array()) {
  
$page = isset($_GET['page']) ? $_GET['page'] : '';
  if (
$new_page implode(','pager_load_array($page_new[$element], $elementexplode(','$page)))) {
    
$parameters['page'] = $new_page;
  }
  
$query = array();
  if (
count($parameters)) {
    
$query[] = drupal_query_string_encode($parameters, array());
  }
  
$querystring pager_get_querystring();

  if (
$querystring != '') {
    
$query[] = $querystring;
  }

  
// Set each pager link title
  
if (!isset($attributes['title'])) {
    static 
$titles NULL;
    if (!isset(
$titles)) {
      
$titles = array(
        
t('|←') => t('Go to first page'),
        
t('←') => t('Go to previous page'),
        
t('→') => t('Go to next page'),
        
t('→|') => t('Go to last page'),
      );
    }
    if (isset(
$titles[$text])) {
      
$attributes['title'] = $titles[$text];
    }
    else if (
is_numeric($text)) {
      
$attributes['title'] = t('Go to page @number', array('@number' => $text));
    }
  }
  if(
is_clear_url())
  {
   
$new_q=drupal_get_path_alias($_GET['q']); // использование псевдонимов
   
if (isset($parameters['page']))    $new_q.='/page/'.$parameters['page'];
   return 
l($text$new_q$attributes,NULL NULL,FALSE,TRUE);
   
//return l($text, $new_q, $attributes, count($query) ? implode('&', $query) : NULL, NULL,FALSE,TRUE);
  
}
  else
    return 
l($text$_GET['q'], $attributescount($query) ? implode('&'$query) : NULLNULL,FALSE,TRUE);
}

function 
is_clear_url() {
  return 
true;
}
/** Конец реализации pager
*/
?>

И код с Друпал.Ру (с дополнениями), это нужно, если pager вам надо изменять не везде, а только там, где вы указали. Замените ссылки ниже на свои и вставьте код, в дополнение к тому, что я указал выше, вместо второй одноимённой функции:

<?php function is_clear_url() {
    
$dinamic_q=array();
    
$dinamic_q[]='^blogs/groups(/(.*))?';
    
$dinamic_q[]='^blogs/projects(/(.*))?';
    
$dinamic_q[]='^blogs/private(/(.*))?';
    
$dinamic_q[]='^blogs/talk(/(.*))?';
  
$dinamic_q[]='^all(/(.*))?';
  
$dinamic_q[]='^blogs(/(.*))?';  
  
$dinamic_q[]='^groups(/(.*))?';
  
$dinamic_q[]='^projects(/(.*))?';
    
$matches=array();
    foreach (
$dinamic_q as $v ) {
       if (
ereg($v$_GET['q'])) return true;
  }
  return 
false;
}    
?>

А этот код, нужно вставить в файл .htaccess в обоих (вышеуказанных) случаях:

# сразу после RewriteEngine on RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^((.*)/page/([0-9]+))$ index.php?q=$2&page=$3 [L,QSA]
Аватар пользователя Гость

Здравствуйте!

Я не очень разбираюсь в пхп. Прошу помощи.
Подскажите, пожалуйста вот что.
1. Мне нужно изменить текст "следующая ›" на "› "
"последняя »" на " » "
"‹ предыдущая" на " ‹ "
"« первая" на " « "
На сайте есть русский язык, далее предполагается и английский. Хотелось бы, чтобы такие изменения были для каждого языка свои.
2. Хотелось бы изменить "следующая ›", "последняя »", "‹ предыдущая", "« первая" на картинки с соответствующими рисунками.
Буду очень признателен.
Спасибо.

Аватар пользователя B.X

http://forum.drupal.ru/node/31699

Вот здесь объясняется, как это сделать... просто установите специальный модуль, который можно скачать со страницы проекта.

Аватар пользователя Гость

Интересный модуль, спасибо, хотя он истользует javascript.

Все таки я хочу переопределить стандартную функцию.

Аватар пользователя Гость

кроме того выводит какие-то двоеточия под стрелками :(

http://zen.hddigitalworks.com/drpager?page=0%2C154%2C4

Аватар пользователя B.X

так в этом модуле и есть переопределение стандартной функции... сделайте по аналогии, да и всё...
поменяйте то, что вам не нравится, на своё... двоеточия можно убрать с помощью css...

вообще же, то что вы хотите, можно сделать с помощью css, добавить классам соответствующий рисунок, убрать текст, и нет проблемы...

Аватар пользователя Гость

с помощью цсс я знаю как добавить фоновый рисунок, изменить существующий текст, но не знаю как убрать текст. Подскажите, пож, как это сделать?

Аватар пользователя B.X

display:none; - если для выделения ссылок присутствует какой-нибудь идентификатор или класс...
или просто измените цвет ссылки, чтобы он был таким же, как цвет фона...

Аватар пользователя Гость

Спасибо, хотя спорно...
цвет ссылки на однородном фоне - да, но там же рисунок!
на какой цвет попадут точки - неизвестно...

Аватар пользователя B.X

ну и что, что рисунок? цвет ссылок задаётся a:hover, a:link и font для точек...
а рисунок, как картинка, будет выглядеть обычным образом...
можно и font size сделать в 1px.

Аватар пользователя Гость

да, пожалуй, если размер текста сделать 1px, это поможет. тогда, может сделать уже 0?

А display:none; разве не уберет все, включая и нужный фоновый рисунок?

Аватар пользователя B.X

0, скорее всего, не подойдёт, будут просто шрифты по-умолчанию...

если описание шрифтов отнести к классу ниже, чем рисунок, то шрифт пропадёт, а рисунок - нет... впрочем, это слишком сложно... проще поиграть с настройками шрифтов...

вот учебник хороший, я им всё время пользуюсь: http://www.htmlbook.ru/css/

Аватар пользователя Гость

да, классы выше-ниже, это уже копать шаблон надо...
учебник-класс, уже оценил.
Спасибо за ответы. Удачи!

Аватар пользователя B.X

не за что... хех...
всегда рад помочь...

Аватар пользователя Гость

О а я тут видел хороший сайт по этой статье (...)

B.X:
Ну это же просто прекрасно...