Изменение ссылок дополнительных полей dle
Как вы знаете ссылка поиска по дополнительным полям выглядит имеет вид:
/xfsearch/искомое слово/
Данный хак позволяет изменить вид ссылки на
/латинское название доп.поля/искомое слово/
Например мы имеем дополнительные поля:
Для примера привожу свой файл engine/data/xfields.txt
brands|бренды||select|тойота__NEWL__BMV__NEWL__AUDI__NEWL__porshe|0|1|0|0|0
firms|фирмы||select|Позавод__NEWL__нокия__NEWL__самсунг|0|1|0|0|0
produser|продюсер фильма||text||1|0|0|0|0
После установки скрипта ссылки вида
/brands/BMV/
/produse/rocksmart/
/firms/нокия/
/year/1980/
будут работать также как и ссылки
/xfsearch/искомое слово/
Установка:
1. Сделать копию вашего .htaccess
2 Открываем файл .htaccess
После строк очень важно именно после этих строк:
# поиск по доп полям
RewriteRule ^xfsearch/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^xfsearch/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]
Вставить следующий код:
#<custom-rule>
#</custom-rule>
Открываем файл engine/inc/include\init.php:
После строки
$action = totranslit ( $action, false, false );
Вставить:
//####################################################################
// Перезаписываем .htaccess для пользовательского вида ссылок
//######################################################################
$customhtacces = get_vars ( "customhtacces" );
if (! $customhtacces) {
$htaccess = @file_get_contents('.htaccess');
$xfields = xfieldsload();
$keyfields = array();
$keyhtacces = array();
$newaddhtacces = array();
if (strpos ($htaccess, "<key" ) !== false) {preg_match_all("#\#<key=(.+?)>(.+?)</key>#is",$htaccess, $key);}
$xtrue = count($xfields)>0 ? true : false; //доп поля
$ktrue = count($key)>0 ? true : false; // ключи ссылок
if($xtrue){foreach($xfields as $x)$keyfields[] = $x[0];/* Получаем ключи (лат. названия) доп.полей */
if($ktrue){
foreach($key[1] as $h)$keyhtacces[] = $h;/* Получаем ключи из файла .htaccess*/
foreach($keyfields as $f){
if (in_array($f, $keyhtacces, true)) {continue;}
$newaddhtacces[] = "#<key=".$f.">\r\nRewriteRule ^".$f."/([^/]*)(/?)+\$ index.php?do=xfsearch&xf=\$1 [L]\r\nRewriteRule ^".$f."/([^/]*)/page/([0-9]+)(/?)+\$ index.php?do=xfsearch&xf=\$1&cstart=\$2 [L]\r\n#</key>\r\n";}
}else{
foreach($keyfields as $f){
$newaddhtacces[] = "#<key=".$f.">\r\nRewriteRule ^".$f."/([^/]*)(/?)+\$ index.php?do=xfsearch&xf=\$1 [L]\r\nRewriteRule ^".$f."/([^/]*)/page/([0-9]+)(/?)+\$ index.php?do=xfsearch&xf=\$1&cstart=\$2 [L]\r\n#</key>\r\n";
}}
if(count($newaddhtacces)>0){
$newrule = "#<custom-rule>\r\n".implode("\n",$newaddhtacces)."\r\n#</custom-rule>";
preg_match("#\#<custom-rule>(.+?)\#</custom-rule>#si",$htaccess, $oldrule );
$htaccess = str_replace( $oldrule[0] ,$newrule ,$htaccess);
file_put_contents('.htaccess',$htaccess);}}
set_vars ( "customhtacces", array('yes') );
}
Еще один важный фактор:
1. Создавая дополнительные поля убедитесь что латинское название поля не совпадает с латинским названием ваших категорий
2. После изменений доп.полей очистите кеш на главной странице админ панели
Установка закончена:
В файлах: show.short.php, show.full.php, show.custom.php
Заменить
$value3[] = "<a href=\"" . $config['http_home_url'] . "xfsearch/" . urlencode( $value2 ) . "/\">" . $value2 . "</a>";
На
$value3[] = "<a href=\"" . $config['http_home_url'] . "".$preg_safe_name."/" . urlencode( $value2 ) . "/\">" . $value2 . "</a>";
Дополнение: Уникальный заголовок для каждого дополнительного поля
в файле engine.php
Заменить строку:
elseif ($do == 'xfsearch') $nam_e = $xf;
На эту
elseif ($do == 'xfsearch'){
$xftitle =array(
'year' => 'Все фильмы {xf} года',
'actors' => 'Все фильмы c актером {xf}',
);
$xfName = explode('/',$_SERVER['REDIRECT_URL']);
$nam_e = (isset($xftitle[$xfName[1]])) ? str_replace('{xf}',$xf,$xftitle[$xfName[1]]) : $xf;
}
Где ключи year, actors - латинское название дополнительного поля
В массив $xftitle можно добавить свои доп.поля по аналогии