Форум » Вебмастер и вебдизайн » Языки программирования » Переделка ЧПУ с выводом параметра title в URL
Открыть Ответить

Переделка ЧПУ с выводом параметра title в URL

5.00

5.00

1
22.07.2010 15:39:00 23.07.2010 14:07:43

Такой вот вопрос: Как сделать, чтобы PHP скрипт передавал файлу .htaccess правила для преобразования URL?

Вот пример.

Допустим URL страницы с игрой counter-strike выглядит вот так:

index.php?name=Files&op=view_file&lid=123

Смысл в том, чтобы URL выглядел вот так (примерно):

files-viewfile-counter-strike-1-6.html

Как вариант, неплохо было бы сделать, чтобы заголовок (параметр $title) как то передавался ЧПУ. Как такое осуществляют?

PS - да тут даже не в чпу дело, как сделать, чтобы название файла отражалось в заголовке?

SLAED CMS 2.6 Lite
PHP 4
Сервер в интернете
Группа
Посетители
Пункты
729
Регистрация
07.10.2006
Пол
Мужчина
Из
Россия/Москва
Предупреждения
Нет
Goshan
Goshan
3.92

3.92

22.07.2010 17:37:29 22.07.2010 17:38:16

Впринципе, вроде разобрался)

В модуле везде в урлах дописал &ololo=$title, то есть получилось

index.php?name=Files&op=view_file&lid=$lid&ololo=$title

$title прогнал через функцию превращения русских символов в транслит.

Затем настроил ЧПУ, получилось не иначе как:

files/123_Counter_-_Strike_1_6_s_botami_i_chitami.html

Группа
Посетители
Пункты
729
Регистрация
07.10.2006
Пол
Мужчина
Из
Россия/Москва
Предупреждения
Нет
Goshan
Goshan
3.92

3.92

23.07.2010 06:32:13

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

Группа
Супермодераторы
Пункты
1595
Регистрация
18.09.2008
Пол
Мужчина
Из
Россия
Предупреждения
Нет
GRAFLEKX
GRAFLEKX
3.92

3.92

23.07.2010 13:48:46

Ладно, попробуем разобрать на примере модуля Files для 2,5-2,6, т.к. Open Slaed у меня никак не работает, ни на локалхост, ни на сайте ну никак не работает)))

Для начала отключите в настройках ЧПУ. (ПОтом включим по окончанию работы).
Первое.
Открываем файл function/sources.php,
добавляем в самый конец, перед ?> следующий код:


function encodehtml($string) 
{
$table = array('А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'E', 'Ё' => 'YO', 'Ж' => 'ZH', 'З' => 'Z', 
'И' => 'I','Й' => 'J', 'К' => 'K','Л' => 'L', 'М' => 'M','Н' => 'N','О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'H', 'Ц' => 'C', 
 'Ч' => 'CH','Ш' => 'SH', 
'Щ' => 'CSH', 
'Ь' => '', 
'Ы' => 'Y', 
'Ъ' => '', 
'Э' => 'E', 
'Ю' => 'YU', 
'Я' => 'YA', 
'а' => 'a', 
'б' => 'b', 
'в' => 'v', 
'г' => 'g', 
'д' => 'd', 
'е' => 'e', 
'ё' => 'yo', 
'ж' => 'zh', 
'з' => 'z', 
'и' => 'i', 
'й' => 'j', 
'к' => 'k', 
'л' => 'l', 
'м' => 'm', 
'н' => 'n', 
'о' => 'o', 
'п' => 'p', 
'р' => 'r', 
'с' => 's', 
'т' => 't', 
'у' => 'u', 
'ф' => 'f', 
'х' => 'h', 
'ц' => 'c', 
'ч' => 'ch', 
'ш' => 'sh', 
'щ' => 'csh', 
'ь' => '', 
'ы' => 'y', 
'ъ' => '', 
'э' => 'e', 
'ю' => 'yu', 
'я' => 'ya',
' ' => '_',
'*' => '',
'(' => '',
')' => '',
'\'' => '-',
',' => '',
'%' => 'percent',
'!' => '',
'"' => '', );
$output = str_replace( array_keys($table),array_values($table),$string); 
return $output; 
}

Сохраняем, закрываем.

Второе.
Открываем modules/Files/index.php. Смысл здесь прост - дописать к URLам параметр, который будет выводить заголовок в адрес.

Функция mainfiles(). Найти


."<td colspan=\"2\"><table border=\"0\" cellpadding=\"1\" cellspacing=\"0\"><tr><td>$zimg</td><td><a href=index.php?name=$module_name&op=view_file&lid=$lid title=\"$f_title\"><b>$f_title</b></a></td><td>".new_graphic($formatted)."</td></tr></table></td><td align=\"right\">"._ADDDATE.": $fp_data</td></tr>"

заменить на:


."<td colspan=\"2\"><table border=\"0\" cellpadding=\"1\" cellspacing=\"0\"><tr><td>$zimg</td><td><a href=\"index.php?name=$module_name&op=view_file&lid=$lid&title=".encodehtml($f_title)."\" title=\"$f_title\"><b>$f_title</b></a></td><td>".new_graphic($formatted)."</td></tr></table></td><td align=\"right\">"._ADDDATE.": $fp_data</td></tr>"


Находим:


."<td width=\"33%\"><a href=index.php?name=$module_name&op=view_file&lid=$lid#$lid title=\"$f_title\">"._FILECOMMENTS.": $comment</a></td><td width=\"34%\" align=\"right\">"._FILEREITING.": ".vote_graphic($votes, $totalvotes)."</td></tr>";


заменяем на:


."<td width=\"33%\"><a href=\"index.php?name=$module_name&op=view_file&lid=$lid&title=".encodehtml($f_title)."#$lid\" title=\"$f_title\">"._FILECOMMENTS.": $comment</a></td><td width=\"34%\" align=\"right\">"._FILEREITING.": ".vote_graphic($votes, $totalvotes)."</td></tr>";


Функция cat(). Найти


."<td colspan=\"2\"><table border=\"0\" cellpadding=\"1\" cellspacing=\"0\"><tr><td>$zimg</td><td><a href=index.php?name=$module_name&op=view_file&lid=$lid title=\"$f_title\"><b>$f_title</b></a></td><td>".new_graphic($formatted)."</td></tr></table></td><td align=\"right\">"._ADDDATE.": $fp_data</td></tr>"

заменить на:


."<td colspan=\"2\"><table border=\"0\" cellpadding=\"1\" cellspacing=\"0\"><tr><td>$zimg</td><td><a href=\"index.php?name=$module_name&op=view_file&lid=$lid&title=".encodehtml($f_title)."\" title=\"$f_title\"><b>$f_title</b></a></td><td>".new_graphic($formatted)."</td></tr></table></td><td align=\"right\">"._ADDDATE.": $fp_data</td></tr>"


Находим:


."<td width=\"33%\"><a href=index.php?name=$module_name&op=view_file&lid=$lid#$lid title=\"$f_title\">"._FILECOMMENTS.": $comment</a></td><td width=\"34%\" align=\"right\">"._FILEREITING.": ".vote_graphic($votes, $totalvotes)."</td></tr>";


заменяем на:


."<td width=\"33%\"><a href=\"index.php?name=$module_name&op=view_file&lid=$lid&title=".encodehtml($f_title)."#$lid\" title=\"$f_title\">"._FILECOMMENTS.": $comment</a></td><td width=\"34%\" align=\"right\">"._FILEREITING.": ".vote_graphic($votes, $totalvotes)."</td></tr>";


Проверяем каталог файлов. Ссылки должны принять вид:

<br /> http://site.ru/index.php&#063;name=Files&op=view_file&lid=123&title=Skachat_besplatno_igru_GTA_4_s_kryakom_i_dopolneniyami<br />


Проблем с переходами по каталогу файлов возникать не должно (Если возникают, пишем в эту тему).

Третье.
Мы должны отстроить ЧПУ.

Делаем так:
Открываем .htaccess, находим:

<br /> ### Файлы<br /> RewriteRule ^files-view-([0-9]*)-([0-9]*).html$ index.php&#063;name=Files&op=view_file&lid=$1&pagenum=$2 [NC]<br /> RewriteRule ^files-getfile-([0-9]*).html$ index.php&#063;name=Files&op=getit&lid=$1 [NC]<br /> RewriteRule ^files-new.html$ index.php&#063;name=Files&new [NC]<br /> RewriteRule ^files-print-([0-9]*).html$ index.php&#063;name=Files&op=printe&id=$1 [NC]<br /> RewriteRule ^files-view-([0-9]*)-([0-9]*).html$ index.php&#063;name=Files&op=view&id=$1&num=$2 [NC]<br /> RewriteRule ^files-view-([0-9]*)-word-(.*).html$ index.php&#063;name=Files&op=view&id=$1 [NC]<br /> RewriteRule ^files-view-([0-9]*).html$ index.php&#063;name=Files&op=view_file&lid=$1 [NC]<br /> RewriteRule ^files-broken-([0-9]*).html$ index.php&#063;name=Files&op=broken&id=$1 [NC]<br /> RewriteRule ^files-list-([0-9]*).html$ index.php&#063;name=Files&op=liste&num=$1 [NC]<br /> RewriteRule ^files-list.html$ index.php&#063;name=Files&op=liste [NC]<br /> RewriteRule ^files-add.html$ index.php&#063;name=Files&op=add_file [NC]<br /> RewriteRule ^files-best-([0-9]*).html$ index.php&#063;name=Files&best=1&num=$1 [NC]<br /> RewriteRule ^files-best.html$ index.php&#063;name=Files&best=1 [NC]<br /> RewriteRule ^files-hits-([0-9]*).html$ index.php&#063;name=Files&hits=1&num=$1 [NC]<br /> RewriteRule ^files-hits.html$ index.php&#063;name=Files&hits [NC]<br /> RewriteRule ^files-([0-9]*).html$ index.php&#063;name=Files&num=$1 [NC]<br /> RewriteRule ^files-cat-([0-9]*)-([0-9]*).html$ index.php&#063;name=Files&op=cat&id=$1&pagenum=$2 [NC]<br /> RewriteRule ^files-cat-([0-9]*).html$ index.php&#063;name=Files&op=cat&id=$1 [NC]<br /> RewriteRule ^files.html index.php&#063;name=Files [NC]<br />


После ###Файлы вставляем:

<br /> RewriteRule ^files-([0-9]*)-([%&;/:|\s\-\'{}().&_a-zA-Zа-яА-Я0-9+=-]*)$ index.php&#063;name=Files&op=view_file&lid=$1&title=$2 [NC]<br />


Сохраняем, закрываем.

Открываем config/config_rewrite.php, находим:

<br /> // Файлы<br /> "files-view-\\1-\\2.html",<br /> "files-getfile-\\1.html",<br /> "files-new.html",<br /> "files-print-\\1.html",<br /> "files-view-\\1-\\2.html",<br /> "files-view-\\1.html",<br /> "files-view-\\1.html",<br /> "files-broken-\\1.html",<br /> "files-list-\\1.html",<br /> "files-list.html",<br /> "files-add.html",<br /> "files-best-\\1.html",<br /> "files-best.html",<br /> "files-hits-\\1.html",<br /> "files-hits.html",<br /> "files-\\1.html",<br /> "files-cat-\\1-\\2.html",<br /> "files-cat-\\1.html",<br /> "files.html",<br />


После ###Файлы вставляем:

<br /> "files-\\1-\\2",<br />


Далее, находим:

<br /> // Файлы<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=view_file&lid=([0-9]*)&pagenum=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=getit&lid=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&new'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=printe&id=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=view&id=([0-9]*)&num=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=view&id=([0-9]*)&word=([%&;/:|\s\-\'{}().&_a-zA-Zа-яА-Я0-9+=-]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=view_file&lid=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=broken&id=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=liste&num=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=liste'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=add_file'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&best=1&num=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&best=1'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&hits=1&num=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&hits'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&num=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=cat&id=([0-9]*)&pagenum=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=cat&id=([0-9]*)'",<br /> "'(&#063;<!/)index.php\&#063;name=Files'",<br />


После ###Файлы вставляем:

<br /> "'(&#063;<!/)index.php\&#063;name=Files&op=view_file&lid=([0-9]*)&title=([%&;/:|\s\-\'{}().&_a-zA-Zа-яА-Я0-9+=-]*)'",<br />


Готово, включаем ЧПУ, проверяем.

Проверялось мною на совершенно голой SLAED 2.6.

SLAED CMS 2.6 Lite
PHP 4
Локальный сервер
Группа
Посетители
Пункты
729
Регистрация
07.10.2006
Пол
Мужчина
Из
Россия/Москва
Предупреждения
Нет
Goshan
Goshan
3.92

3.92

23.07.2010 14:10:00 23.07.2010 14:32:36

Goshan, прекрасное решение, спасибо за подробное описание.
Прикреплю эту тему в разделе, чтобы не затерялась.
ps: только я у себя не применял функцию транслитерации, а сделал проще:

iconv("UTF-8", "ISO-8859-1//TRANSLIT", $title);

Группа
Супермодераторы
Пункты
1595
Регистрация
18.09.2008
Пол
Мужчина
Из
Россия
Предупреждения
Нет
GRAFLEKX
GRAFLEKX
3.92

3.92

23.07.2010 15:09:37 23.07.2010 15:19:04

Спасибо, учтем)

Группа
Посетители
Пункты
729
Регистрация
07.10.2006
Пол
Мужчина
Из
Россия/Москва
Предупреждения
Нет
Goshan
Goshan
3.92

3.92

23.07.2010 18:38:48

нормалды... , только есть вопрос,
медод типа

$text = str_replace(array('1', '2', '3'), array('один', 'два', 'три'), $text);

разве не будет работать быстрее ?

Группа
Посетители
Пункты
772
Регистрация
01.06.2006
Пол
Мужчина
Из
Моздок
Предупреждения
Нет
sam07
sam07
3.91

3.91

23.07.2010 18:42:01

Goshan, знакомый код транслита. Смайл - 06.

Группа
Клиент
Пункты
2121
Регистрация
02.11.2008
Пол
Мужчина
Из
Пермь
Предупреждения
Нет
ra55551
ra55551
3.75

3.75

23.07.2010 22:46:47 23.07.2010 22:49:37

да уж))

sam07, может вы и правы, можно так.

Группа
Посетители
Пункты
729
Регистрация
07.10.2006
Пол
Мужчина
Из
Россия/Москва
Предупреждения
Нет
Goshan
Goshan
3.92

3.92

Открыть Ответить
Хотите опробовать SLAED CMS в действии?
Идеи и предложения
Обратная связь
Подтверждение

Поделиться
QR-код