[РЕШЕНО] кто менял node?page=1 (2 и так далее) на более понятное node/page/1

Прислано: B.X

пт, 06/04/2007 - 22:09

Кто-нибудь этим занимался? Посмотрел pathauto, но там вроде только с контентом всё, что связано перерабатывается, остальное - нет...
или это лучше через htaccess организовать? в mod_rewrite чтобы просто заменял и всё?
искал на Друпал.орг похоже этим никто не озадачивался... все и так довольны...

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано Kostya.S в чт, 31/01/2008 - 06:49.

Создайте в директории файл .htaccess и впишите в него:

RewriteEngine On
RewriteRule ^page/([^/]*)$ /node?page=$1 [L]

Страницы будут иметь вид: http://ваш_сайт/page/номер_страницы


Опубликовано B.X в пн, 11/02/2008 - 08:08.

хех, тоже думал, что через htaccess оно проще будет...

но, ничего не меняется...
ведь ссылки на страницы изменяются в движке Друпала...
то есть, доступ по /page/2 будет доступен, но видиться эти ссылки будут всё равно по-прежнему...


Опубликовано PVasili в пн, 11/02/2008 - 08:35.

А чем /admin/settings/clean-urls не подходит?


Опубликовано jason32 в пн, 11/02/2008 - 13:31.

я делал подобное - там возня, но немного - один патч в ядре на пару строк. И плюс работа по перекрытию ссылок в теме и htaccess . Результат налицо - http://liveidea.ru


Опубликовано cascad в вт, 02/06/2009 - 21:02.

Необходимо избавиться от "node?page=1", сделав /page1.

Кто применяет это ещё? Помогите фиксом.


Опубликовано volocuga в вт, 02/06/2009 - 22:17.

"cascad" написал(а):

Кто применяет это ещё? Помогите фиксом.

Применяют все.Включите чистые ссылки и правьте синонимы ссылок


Опубликовано cascad в ср, 03/06/2009 - 12:45.

volocuga, "чистые ссылки" не изменяют адрес "node?page=1", который внизу страницы. В том и дело. Посмотрите хотя бы сюда http://drupal.ru/news?page=1 , а надо http://drupal.ru/page1

Это имеет большое значение для поисковиков


Опубликовано Химический Али в ср, 03/06/2009 - 13:28.

Какой толк менять динамические адреса динамических страниц? Там все равно контент вечно меняется.


Опубликовано Ильич Рамирес Санчес в ср, 03/06/2009 - 14:09.

"cascad" написал(а):

Кто применяет это ещё? Помогите фиксом.

я у себя на блоге применяю. написав свои задокументированные функции.
custom_url_rewrite_inbound и custom_url_rewrite_outbound - для 6ки

Еще раньше тут в блоге на Drupal.ru писал как сделать это для 5ой версии. даже с примером. Правда page=? устранить не совсем тривиально но можно.

"Химический Али" написал(а):

Какой толк менять динамические адреса динамических страниц? Там все равно контент вечно меняется.

да вообще то никакого. просто урлы понтовей выглядят.


Опубликовано jason32 в ср, 03/06/2009 - 16:30.

я вставлял в .htaccess внутренний редирект, паеред последним правилом в файле

  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^((.*)/page/([0-9]+))$ index.php?q=$2&page=$3 [L,QSA]
,
ну и само собой сами ссылки менялись через функции темизации самого пейджера.Для 5-го сработало - сработает и для 6-го.


Опубликовано cascad в ср, 03/06/2009 - 16:56.

«Какой толк менять динамические адреса динамических страниц? Там все равно контент вечно меняется.»
Отчасти вы правы. Но поисковик пессемизируют при конкурентной борьбе,еслие есть "?". К тому же не всегда контент меняется. Мне вот надо сделать архив на друпале - там всё статично.

jason32, спасибо за отклик! Искал, но не нашел твоего фикса для 5-ки.
Я так понимаю, что надо только pager.inc изменить, ну и апач. С htacess умею работать, а вот в php - полный ноль я. Поможешь?

p.s. жалко, что liveidea закрылся... хоть бы каталог сделали из него под сапу и рекламу.


Опубликовано jason32 в ср, 03/06/2009 - 18:57.

liveidea был не мой, хозяева закрыли почему то, я просто разработчик. Ищи функции с началом theme_ в файле pager.inc и подобных. Как темизировать - описано неоднократно, куда копировать эти функции и как переименовывать


Опубликовано Ильич Рамирес Санчес в ср, 03/06/2009 - 19:30.

"jason32" написал(а):

,
ну и само собой сами ссылки менялись через функции темизации самого пейджера.Для 5-го сработало - сработает и для 6-го.

твоя идея к теме привязана... хотя да. по алгоритмам и нагрузке она легче. да


Опубликовано cascad в чт, 04/06/2009 - 14:23.

jason32, я не нашел тут на сайте, где описан механизм изменения pager.inc для 5-ки. То есть нужной темизации для чпу. Знаешь линки?


Опубликовано cascad в чт, 04/06/2009 - 15:29.

Этот код ответственен за формирование урла.

<?php
function theme_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;
  }
?>

Сейчас у меня урл /node/?page=1

этот код, где "node"

<?php
return l($text$_GET['q'], array('attributes' => $attributes'query' => count($query)));
}
?>

всё в pager.inc

Задача: Избавиться от "/node/?page=", и привести отображение урла к такому виду "/page1"

Совсем чуть местами поменять в указанном коде, но не получается...


Опубликовано Ильич Рамирес Санчес в чт, 04/06/2009 - 16:13.

"cascad" написал(а):

Совсем чуть местами поменять в указанном коде, но не получается...

если тебе так приспичило - всего за $30 я готов предоставить готовое решение. :)


Опубликовано cascad в чт, 04/06/2009 - 19:01.

Ilya1st, шантаж не прокатит. Я 30 отдал бы тому, кто бесплатно предложил бы, чем такому навязчевому как вы.


Опубликовано Ильич Рамирес Санчес в чт, 04/06/2009 - 19:24.

"cascad" написал(а):

шантаж не прокатит

где?

"cascad" написал(а):

30 отдал бы тому, кто бесплатно предложил бы

исходя из опыта я могу сказать что вы врете.
есть простое слово. жлобство :-)
у нас оно, увы, распространено. вы не исключение. :)
потому бесплатно я редко что предлагаю.


Опубликовано cascad в чт, 04/06/2009 - 21:53.

"Ilya1st" написал(а):

исходя из опыта я могу сказать что вы врете.

Мне плевать на ваш опыт. Вы не авторитет. Здесь если кто-то помогает, то оно для всех. Я в php ноль, но я рисую дизайн, делаю валидную вёрстку xhtml. Я помогу своими знаниями, а другие - своими, если хотят. А вы умеете только бабки кляньчить за то, что другие делают бесплатно, так как они считаю важным делать вклад в базу знаний по друпалу.

"Ilya1st" написал(а):

потому бесплатно я редко что предлагаю

И кто тут жлоб? - тот, кто бабки просит. А если уж выбирать кому давать, то только тому, кто вызывает доверие. Это не вы. Хватит заниматься саморекламой! Больше на ваш флуд не буду отвечать.


Опубликовано gor в чт, 04/06/2009 - 23:33.

Пару копеек , аль рубль в поддержку Ильи.
Во-первых, он спец. причем хороший.
Во-вторых, то что он испросил за свою помошь - еще дешево (знания необходимые для реализации данной вещи не сравнятся с знанием свойст тега div).
В третих, будьте добры оставаться в границах вежливого общения и не переходить на личности. (касается всех сторон диалога)


Опубликовано cascad в пт, 05/06/2009 - 00:32.

gor, во-первых, я рад за него, что он спец. Во-вторых, 30 баксов - не деньги. Согласен. Тут дело принципа,т.к. если бы все помогали тут за деньги, то...
В-третьх, делать вёрстку правильную не все умеют. Я редко встречаю чистый xhtml,кот. во всех браузерах идентично выглядит. В-четвёртых, тут дела на две строчки, просто я принципиально пока не учу php. В-пятых, мы все тут вежливые, а вы масло в огонь подлеваете. Мы с Ильёй уже лучшие друзья почти! Будете с нами дружить? )) в-шестых, давайте писать только по теме топика, прошу вас.


Опубликовано jason32 в пн, 08/06/2009 - 16:59.

ок, посмотрим на правдивость слов о 30 баксах.
Следующую функцию добавить в код используемой темы оформления.

<?php 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('|&larr;') => t('Go to first page'),
        
t('&larr;') => t('Go to previous page'),
        
t('&rarr;') => t('Go to next page'),
        
t('&rarr;|') => 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);
}
?>

Функция is_clean_url для того, чтобы не глючило в админской части и чтобы чистый пейджер был только там где нужно. Если нужно везде - напишите просто в ней <?php return true;?>

<?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. Привожу его полный текст, за вычетом каментов, во избежание.
 <FilesMatch "(\.(engine|inc|info|install|module|profile|po|sh|.*sql|theme|tpl(\.php)?|xtmpl)|code-style\.pl|Entries.*|Repository|Root|Tag|Template)$">
  Order allow,deny
</FilesMatch>
 
# Don't show directory listings for URLs which map to a directory.
Options -Indexes
 
# Follow symbolic links in this directory.
Options +FollowSymLinks
 
# Customized error messages.
ErrorDocument 404 /index.php
 
# Set the default handler.
DirectoryIndex index.php
 
# PHP 4, Apache 1.
<IfModule mod_php4.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>
 
# PHP 4, Apache 2.
<IfModule sapi_apache2.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>
 
# PHP 5, Apache 1 and 2.
<IfModule mod_php5.c>
  php_value magic_quotes_gpc                0
  php_value register_globals                0
  php_value session.auto_start              0
  php_value mbstring.http_input             pass
  php_value mbstring.http_output            pass
  php_value mbstring.encoding_translation   0
</IfModule>
 
# Requires mod_expires to be enabled.
<IfModule mod_expires.c>
  # Enable expirations.
  ExpiresActive On
  # Cache all files for 2 weeks after access (A).
  ExpiresDefault A1209600
  # Do not cache dynamically generated pages.
  ExpiresByType text/html A1
</IfModule>
 
# Various rewrite rules.
<IfModule mod_rewrite.c>
  RewriteEngine on
  # new code-----------------------------------
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^((.*)/page/([0-9]+))$ index.php?q=$2&page=$3 [L,QSA]
 
  # Rewrite current-style URLs of the form 'index.php?q=x'.
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</IfModule>

Должно всё работать. Данные в профиле.


Опубликовано cascad в сб, 06/06/2009 - 08:24.

Не работает. Пишет "Call to undefined function is_clear_url()

Добавлял код в bluemarine\template.php, в phptemplate.engine и pager.inc пробовал заменять.

Там вроде только в "$parameters['page/'] = $new_page;" надо править и в "return l($text, $_GET['q'], array('attributes' => $attributes, 'query' => count($query)));", что добавит к page/ ещё цифру, то есть будет page/1


Опубликовано jason32 в сб, 06/06/2009 - 11:01.

функцию is_clear_url() туда же добавить надо - код приведен


Опубликовано cascad в сб, 06/06/2009 - 12:06.

Только не исчезло "node" линк стал "node/page/1/", а желательно именно так "/page1/", и без node в линке...


Опубликовано jason32 в сб, 06/06/2009 - 12:37.

"cascad" написал(а):

Только не исчезло "node" линк стал "node/page/1/", а желательно именно так "/page1/", и без node в линке...

Так на всем сайте станет page1 - и куда ему вести? Нужно же какое то определение, на какой странице этот пейджер? Подставьте всесто node что-нибудь, но совсем убирать всё, кроме page нельзя. Или вам надо, чтобы на главной только было? У вас счас что, адреса вида "www.example.com?page=2" есть? Да и название темы - кто менял node?page=1 (2 и так далее) на более понятное node/page/1


Опубликовано cascad в сб, 06/06/2009 - 13:40.

"jason32" написал(а):

Нужно же какое то определение, на какой странице этот пейджер

так это определение же можно через апач задать.
то есть если ссылка www.sitе.ru/page1/ , то будет RewriteRule ^/page([0-9]+))$ index.php?q=$2&page=$3

В том и дело, что надо www.sitе.ru/page1/ или www.sitе.ru/1/

"node" из админки не убирается, а где в файлах не нашел, где этот node отображает себя в ссылках. Мне кажется, что его надо убирать в pager.inc.

Мне кажется, что достаточно просто в строчке return l($text, $_GET['q'], array('attributes' => $attributes, 'query' => count($query)));
задать последовательность . 'page' . и прикрутить "$", который номер выводит. Это вроде count($query)
будет сразу sitе.ru/page1/. Но может я ошибаюсь.


Опубликовано jason32 в сб, 06/06/2009 - 13:58.

"cascad" написал(а):

то есть если ссылка www.sitе.ru/page1/ , то будет RewriteRule ^/page([0-9]+))$ index.php?q=$2&page=$3

Блин, вы что, хотите переделать логику работы CMS? Посмотрите внимательно на ваш пример - где указания, на какую страницу переходить? Что будет в переменной q=$2( да и $3 тоже непонятно, ибо там $1 максимум )? Какое значение там ? По вашему реврайту - никакого, потому что в изначальной ссылке нету никакого - www.sitе.ru/page1/ - есть только указание на номер страницы неизвестно где. В курсе вообще, что в Друпале можно главной любую страницу поставить, а не только node ? Как системе определить, на пейджер какой страницы ей перейти? Код работает для любого Views и любого списка, но Друпалу надо знать, на страницу какого списка надо перейтии единственный способ узнать - взять из ссылки перехода.


Опубликовано gor в сб, 06/06/2009 - 15:02.

Не стоит нервничать, это просто чел пытается сказать что ты не прав, код не работает как ему надо, а значит он тебе не должен $30.
А в целом спасибо за код, молодец. Если потребуется кому из клиентов, включу твои $30 в бюджет). Твои контакты у меня есть.


Опубликовано cascad в сб, 06/06/2009 - 15:15.

У меня везде идёт "node", т.е. index.php?q=node&page=1, значит можно сократить до /page1/ или /page/1/ а в htacess тогда RewriteRule ^/page([0-9]+))$ index.php?q=node&page=$1

Кстати, ваш код не работает со словарями - у меня показывается /node/page/1/, а вот на словаре таксономии вместо /news/page/1/ появлятся /taxonomy/term/1/page/1/ то есть ужасс, а ведь надо /news/page/1/ ,но так не показывает...

Это вообще реально сделать? (эти два пункта)
1) /news/page1/ вместо /taxonomy/term/1/page/1/ как сейчас получается.
но при этом
2) избавиться от /node/ в корне сайта, т.е. site.ru/page1/


Опубликовано cascad в сб, 06/06/2009 - 15:22.

gor, вы что такое говорите.Сказать, что не прав, - бред какой-то... Мне не жалко денег, абсолютно! Но хочется платить за то, что работает, а там чпу ломается в словарях (смотри мой пост выше - я описал косяк). "/taxonomy/term/1/page/1/" вместо "/news/page/1/". Пусть оставит координаты - я напишу,а то инфо пустое.


Опубликовано jason32 в пн, 08/06/2009 - 10:01.

с pathauto работу никто и не обещал, нигде это не указывалось и не делалось


Опубликовано cascad в пн, 08/06/2009 - 13:55.

Фигово, что там такие сложности. jason32, отправьте координаты в лс. я всё-таки хотел бы найти решение вопроса с чпу. Потом выложу для всех.


Опубликовано jason32 в пн, 08/06/2009 - 17:13.

"cascad" написал(а):

Фигово, что там такие сложности.

исправил пост с функцией, добавил псевдонимы ссылок, проверил - работает.


Опубликовано cascad в пн, 08/06/2009 - 19:59.

Теперь просто появлятся www.site.ru/node/ и всё. Версия 6.1.1 , кэш очищал.


Опубликовано B.X в вт, 23/06/2009 - 12:08.

Спасибо jason32, всё работает... два года ждал реализации... от меня 15$, хех, хотя я и не обещал... подробности здесь...

Цитата:

Теперь просто появлятся www.site.ru/node/ и всё. Версия 6.1.1 , кэш очищал.

используйте

<?php function is_clear_url() {
  return 
true;
}    
?>

и всё заработает... в тексте же написано, что надо делать "по аналогии"... там всё видно, как...


Новое на сайте

Ссылки партнёров