[РЕШЕНО] кто менял node?page=1 (2 и так далее) на более понятное node/page/1
Прислано: B.X
пт, 06/04/2007 - 22:09
Кто-нибудь этим занимался? Посмотрел pathauto, но там вроде только с контентом всё, что связано перерабатывается, остальное - нет...
или это лучше через htaccess организовать? в mod_rewrite чтобы просто заменял и всё?
искал на Друпал.орг похоже этим никто не озадачивался... все и так довольны...
- B.X's blog
- Для комментирования войдите или зарегистрируйтесь
Создайте в директории файл .htaccess и впишите в него:
RewriteEngine On
RewriteRule ^page/([^/]*)$ /node?page=$1 [L]
Страницы будут иметь вид: http://ваш_сайт/page/номер_страницы
- Для комментирования войдите или зарегистрируйтесь
хех, тоже думал, что через htaccess оно проще будет...
но, ничего не меняется...
ведь ссылки на страницы изменяются в движке Друпала...
то есть, доступ по /page/2 будет доступен, но видиться эти ссылки будут всё равно по-прежнему...
- Для комментирования войдите или зарегистрируйтесь
А чем /admin/settings/clean-urls не подходит?
- Для комментирования войдите или зарегистрируйтесь
я делал подобное - там возня, но немного - один патч в ядре на пару строк. И плюс работа по перекрытию ссылок в теме и htaccess . Результат налицо - http://liveidea.ru
- Для комментирования войдите или зарегистрируйтесь
Необходимо избавиться от "node?page=1", сделав /page1.
Кто применяет это ещё? Помогите фиксом.
- Для комментирования войдите или зарегистрируйтесь
Кто применяет это ещё? Помогите фиксом.
Применяют все.Включите чистые ссылки и правьте синонимы ссылок
- Для комментирования войдите или зарегистрируйтесь
volocuga, "чистые ссылки" не изменяют адрес "node?page=1", который внизу страницы. В том и дело. Посмотрите хотя бы сюда http://drupal.ru/news?page=1 , а надо http://drupal.ru/page1
Это имеет большое значение для поисковиков
- Для комментирования войдите или зарегистрируйтесь
Какой толк менять динамические адреса динамических страниц? Там все равно контент вечно меняется.
- Для комментирования войдите или зарегистрируйтесь
Кто применяет это ещё? Помогите фиксом.
я у себя на блоге применяю. написав свои задокументированные функции.
custom_url_rewrite_inbound и custom_url_rewrite_outbound - для 6ки
Еще раньше тут в блоге на Drupal.ru писал как сделать это для 5ой версии. даже с примером. Правда page=? устранить не совсем тривиально но можно.
Какой толк менять динамические адреса динамических страниц? Там все равно контент вечно меняется.
да вообще то никакого. просто урлы понтовей выглядят.
- Для комментирования войдите или зарегистрируйтесь
я вставлял в .htaccess внутренний редирект, паеред последним правилом в файле
RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^((.*)/page/([0-9]+))$ index.php?q=$2&page=$3 [L,QSA]
ну и само собой сами ссылки менялись через функции темизации самого пейджера.Для 5-го сработало - сработает и для 6-го.
- Для комментирования войдите или зарегистрируйтесь
«Какой толк менять динамические адреса динамических страниц? Там все равно контент вечно меняется.»
Отчасти вы правы. Но поисковик пессемизируют при конкурентной борьбе,еслие есть "?". К тому же не всегда контент меняется. Мне вот надо сделать архив на друпале - там всё статично.
jason32, спасибо за отклик! Искал, но не нашел твоего фикса для 5-ки.
Я так понимаю, что надо только pager.inc изменить, ну и апач. С htacess умею работать, а вот в php - полный ноль я. Поможешь?
p.s. жалко, что liveidea закрылся... хоть бы каталог сделали из него под сапу и рекламу.
- Для комментирования войдите или зарегистрируйтесь
liveidea был не мой, хозяева закрыли почему то, я просто разработчик. Ищи функции с началом theme_ в файле pager.inc и подобных. Как темизировать - описано неоднократно, куда копировать эти функции и как переименовывать
- Для комментирования войдите или зарегистрируйтесь
,
ну и само собой сами ссылки менялись через функции темизации самого пейджера.Для 5-го сработало - сработает и для 6-го.
твоя идея к теме привязана... хотя да. по алгоритмам и нагрузке она легче. да
- Для комментирования войдите или зарегистрируйтесь
jason32, я не нашел тут на сайте, где описан механизм изменения pager.inc для 5-ки. То есть нужной темизации для чпу. Знаешь линки?
- Для комментирования войдите или зарегистрируйтесь
Этот код ответственен за формирование урла.
<?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], $element, explode(',', $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"
Совсем чуть местами поменять в указанном коде, но не получается...
- Для комментирования войдите или зарегистрируйтесь
Совсем чуть местами поменять в указанном коде, но не получается...
если тебе так приспичило - всего за $30 я готов предоставить готовое решение. :)
- Для комментирования войдите или зарегистрируйтесь
Ilya1st, шантаж не прокатит. Я 30 отдал бы тому, кто бесплатно предложил бы, чем такому навязчевому как вы.
- Для комментирования войдите или зарегистрируйтесь
шантаж не прокатит
где?
30 отдал бы тому, кто бесплатно предложил бы
исходя из опыта я могу сказать что вы врете.
есть простое слово. жлобство :-)
у нас оно, увы, распространено. вы не исключение. :)
потому бесплатно я редко что предлагаю.
- Для комментирования войдите или зарегистрируйтесь
исходя из опыта я могу сказать что вы врете.
Мне плевать на ваш опыт. Вы не авторитет. Здесь если кто-то помогает, то оно для всех. Я в php ноль, но я рисую дизайн, делаю валидную вёрстку xhtml. Я помогу своими знаниями, а другие - своими, если хотят. А вы умеете только бабки кляньчить за то, что другие делают бесплатно, так как они считаю важным делать вклад в базу знаний по друпалу.
потому бесплатно я редко что предлагаю
И кто тут жлоб? - тот, кто бабки просит. А если уж выбирать кому давать, то только тому, кто вызывает доверие. Это не вы. Хватит заниматься саморекламой! Больше на ваш флуд не буду отвечать.
- Для комментирования войдите или зарегистрируйтесь
Пару копеек , аль рубль в поддержку Ильи.
Во-первых, он спец. причем хороший.
Во-вторых, то что он испросил за свою помошь - еще дешево (знания необходимые для реализации данной вещи не сравнятся с знанием свойст тега div).
В третих, будьте добры оставаться в границах вежливого общения и не переходить на личности. (касается всех сторон диалога)
- Для комментирования войдите или зарегистрируйтесь
gor, во-первых, я рад за него, что он спец. Во-вторых, 30 баксов - не деньги. Согласен. Тут дело принципа,т.к. если бы все помогали тут за деньги, то...
В-третьх, делать вёрстку правильную не все умеют. Я редко встречаю чистый xhtml,кот. во всех браузерах идентично выглядит. В-четвёртых, тут дела на две строчки, просто я принципиально пока не учу php. В-пятых, мы все тут вежливые, а вы масло в огонь подлеваете. Мы с Ильёй уже лучшие друзья почти! Будете с нами дружить? )) в-шестых, давайте писать только по теме топика, прошу вас.
- Для комментирования войдите или зарегистрируйтесь
ок, посмотрим на правдивость слов о 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], $element, explode(',', $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'], $attributes, count($query) ? implode('&', $query) : NULL, NULL,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>
Должно всё работать. Данные в профиле.
- Для комментирования войдите или зарегистрируйтесь
Не работает. Пишет "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
- Для комментирования войдите или зарегистрируйтесь
функцию is_clear_url() туда же добавить надо - код приведен
- Для комментирования войдите или зарегистрируйтесь
Только не исчезло "node" линк стал "node/page/1/", а желательно именно так "/page1/", и без node в линке...
- Для комментирования войдите или зарегистрируйтесь
Только не исчезло "node" линк стал "node/page/1/", а желательно именно так "/page1/", и без node в линке...
Так на всем сайте станет page1 - и куда ему вести? Нужно же какое то определение, на какой странице этот пейджер? Подставьте всесто node что-нибудь, но совсем убирать всё, кроме page нельзя. Или вам надо, чтобы на главной только было? У вас счас что, адреса вида "www.example.com?page=2" есть? Да и название темы - кто менял node?page=1 (2 и так далее) на более понятное node/page/1
- Для комментирования войдите или зарегистрируйтесь
Нужно же какое то определение, на какой странице этот пейджер
так это определение же можно через апач задать.
то есть если ссылка 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/. Но может я ошибаюсь.
- Для комментирования войдите или зарегистрируйтесь
то есть если ссылка 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 и любого списка, но Друпалу надо знать, на страницу какого списка надо перейтии единственный способ узнать - взять из ссылки перехода.
- Для комментирования войдите или зарегистрируйтесь
Не стоит нервничать, это просто чел пытается сказать что ты не прав, код не работает как ему надо, а значит он тебе не должен $30.
А в целом спасибо за код, молодец. Если потребуется кому из клиентов, включу твои $30 в бюджет). Твои контакты у меня есть.
- Для комментирования войдите или зарегистрируйтесь
У меня везде идёт "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/
- Для комментирования войдите или зарегистрируйтесь
gor, вы что такое говорите.Сказать, что не прав, - бред какой-то... Мне не жалко денег, абсолютно! Но хочется платить за то, что работает, а там чпу ломается в словарях (смотри мой пост выше - я описал косяк). "/taxonomy/term/1/page/1/" вместо "/news/page/1/". Пусть оставит координаты - я напишу,а то инфо пустое.
- Для комментирования войдите или зарегистрируйтесь
с pathauto работу никто и не обещал, нигде это не указывалось и не делалось
- Для комментирования войдите или зарегистрируйтесь
Фигово, что там такие сложности. jason32, отправьте координаты в лс. я всё-таки хотел бы найти решение вопроса с чпу. Потом выложу для всех.
- Для комментирования войдите или зарегистрируйтесь
Фигово, что там такие сложности.
исправил пост с функцией, добавил псевдонимы ссылок, проверил - работает.
- Для комментирования войдите или зарегистрируйтесь
Теперь просто появлятся www.site.ru/node/ и всё. Версия 6.1.1 , кэш очищал.
- Для комментирования войдите или зарегистрируйтесь
Спасибо jason32, всё работает... два года ждал реализации... от меня 15$, хех, хотя я и не обещал... подробности здесь...
Теперь просто появлятся www.site.ru/node/ и всё. Версия 6.1.1 , кэш очищал.
используйте
<?php function is_clear_url() {
return true;
} ?>и всё заработает... в тексте же написано, что надо делать "по аналогии"... там всё видно, как...
- Для комментирования войдите или зарегистрируйтесь








Комментарии