27.04.14, 09:01
1 комментарий
  DLE Хаки

Изменеие ссылок дополнительных полей 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/includeinit.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.">rnRewriteRule ^".$f."/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]rnRewriteRule ^".$f."/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]rn#</key>rn";}

}else{

foreach($keyfields as $f){

$newaddhtacces[] = "#<key=".$f.">rnRewriteRule ^".$f."/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]rnRewriteRule ^".$f."/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]rn#</key>rn";

}}

if(count($newaddhtacces)>0){

$newrule = "#<custom-rule>rn".implode("n",$newaddhtacces)."rn#</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>";

Комментарии

  1. Shnapik 7 ноября 2014 00:16                    

    Не работает.

Напишите своё мнение