» » » Дополнительные поля по категориям [DLE ALL]

Дополнительные поля по категориям [DLE ALL]

Название: Дополнительные поля по категориям
Автор: DomiTori
CMS: любая версия DLE

Описание:
На днях пришла в голову такая идея. Сделать хак, позволяющий разделить в ссылках дополнительные поля вида гиперссылки на категории. Поколдовав пол ночи мне удалось вдохнуть жизнь в этот хак. Он будет полезен как кино-порталам, варезникам, кулинарным сайтам так и прочим.
Что же делает этот хак.

На тестовом сайте для экспериментов я создал два дополнительных поля

genre|Жанр произведения||text||1|1|0|0
year|Год выпуска||text||1|1|0|0


Изначально cms DLE позволяет сортировать по этим дополнительным полям по общей ссылке

сайт.ру/xfsearch/боевик
сайт.ру/xfsearch/2014


В хаке Меняем в адресе надоедливый xfsearch на более логичное слово я описал как изменить xfsearch на любое другое слово, которое вам по душе.
Теперь же идея вот в чём:
Подменить xfsearch на латинское название дополнительного поля, разделив их таким образом на категории.

Теперь наглядно.
Выше я описал данные из xfields.txt. Как видите у меня два дополнительных поля, назвал я их genre и year. Сейчас покажу как подменить ссылку сайт.ру/xfsearch/ на сайт.ру/genre/ и сайт.ру/year/.

Приступим к установке.
1. Ищем в файлах engine/modules/show.short.php, engine/modules/show.custom.php и два раза engine/modules/show.full.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>";

Это заменит xfsearch на латинское название дополнительного поля.
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]

Вставляем ниже

RewriteRule ^genre/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^genre/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]
RewriteRule ^year/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^year/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]


Этим мы делаем редирект.

Понятное дело что у вас отличаются дополнительные поля от моих, у когото их больше. Вам нужно в .htaccess на каждое дополнительное поле отдельно вставлять

RewriteRule ^латинское название доп поля/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^латинское название доп поля/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]


Вот и всё. Правдо легко и просто?)

Вы можете посмотреть демо, доказывающее работоспособность. Зайдите в любую новость и убедитесь.



Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии

4
Все это сделал давно rocksmart, я специально поднял его умерший сайт в архиве.
Установка:
1. Открываем файл .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>


2) Открываем файл engine/inc/include/init.php и после строки :
$action = totranslit ( $action, false, false );

Вставить:
$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",$htacce
ss, $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",$hta
ccess, $oldrule ); $htaccess = str_replace( $oldrule[0] ,$newrule ,$htaccess); file_put_contents('.htaccess',$htaccess);}} set_vars ( "customhtacces", array('yes') ); }
Влюблённая Офелия плыла себе вдаль
Сияла ночь, звенела земля.
4

Shnapik

Посетители 8 ноября 2014 11:11
rocksmart давненько делал подобное, хотя по сути через редирект можно изменить любой адрес, только тут уже удобство играет роль....
4
В файлах: 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>";


Ссылка web.archive.org/web/20140629104451/http://pro-script.ru/index.php?name=news&op=v
iew&id=520

Видешь ли, тот код что вставляется в init.php, автоматически записывает данные с доп полей так как ты написал, но ты взял посмотрел и просто написал вручную. Ну да, ты будешь отрицать что сам написал. Кто не верит, может проверить этот код, он в точку будет таким же как и "написал" ДомиТори
Влюблённая Офелия плыла себе вдаль
Сияла ночь, звенела земля.
4

DooMDiM

Посетители 8 ноября 2014 15:55
Цитата: Gameer
Все это сделал давно rocksmart, я специально поднял его умерший сайт в архиве.

Спасибо за груду нерабочего и безсмысленного кода. Мой в точности идентичный этому. И мистика, я просто тура скопировал код, но он почемуто рабочий. А идентичный! код того человека не работает. С чего бы? У меня рука наверно легче.
А вы знали что сандер плагиатор? Чат для деле уже придумывали еще на первых версиях! Те кто делают шаблоны плагиаторы, ведь шаблоны придумали создавать до них. Авторы модулей плагиаторы ведь апи на дле придумал целсофт. А вобще все програмисты плагиаторы, ведь программный код выдумал Билл Гейтс. Запомните это!! Обсуждение окончено)
4
Цитата: DooMDiM
Цитата: Gameer
Все это сделал давно rocksmart, я специально поднял его умерший сайт в архиве.

Спасибо за груду нерабочего и безсмысленного кода.

Этот человек, куда опытнее тебя в разы. И код рабочий, видимо у тебя руки кривые. ты не понял, выставления чужого за свое а не плагиат.
Влюблённая Офелия плыла себе вдаль
Сияла ночь, звенела земля.
4

SoverenG

Посетители 8 ноября 2014 17:35
Да какая разница, главное что людям будет полезно.
4

Shnapik

Посетители 8 ноября 2014 18:11
Цитата: DooMDiM
RewriteRule ^латинское название доп поля/([^/]*)(/?)+$ index.php?do=xfsearch&xf=$1 [L]
RewriteRule ^латинское название доп поля/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xf=$1&cstart=$2 [L]

rocksmart писал, что правки init.php добавляют только автоматизацию процессу, но можно и самому править всегда .htaccess.

На днях пришла в голову такая идея. Сделать хак, позволяющий разделить в ссылках дополнительные поля вида гиперссылки на категории. Поколдовав пол ночи мне удалось вдохнуть жизнь в этот хак. Он будет полезен как кино-порталам, варезникам, кулинарным сайтам так и прочим.


Я так понимаю осенило после просмотра новости rocksmart`a. Полночи колдовал, хм... Ну, приношу свои соболезнования, вы больны и больны неизлечимо. Всё давно уже было сделано и работает до сих пор.
4

DooMDiM

Посетители 9 ноября 2014 08:50
Идея крутилась пару дней, то что я увидел, я надеялся что оно работает и хотел поставить себе. Но увы, и это оказалось нерабочим. Хорошо, кривые руки, поставьте кто себе и докажите что скопировать и вставить я не умею. Радирект в хтацес это проще простого, любой сможет. И оно работало только с ним. Интересовало как же вручную изменить ссылки в новостях. И весь плагиат заключается в одной единственной фразе -
"".$preg_safe_name."/"
ккоторую целсофт изобрели?
4
Спасибо автору, установка 5 минут, теперь хотя бы выглядит приятно. :)
4
Отличная вещь для кинопортала.
4

MaHarder

Посетители 24 декабря 2014 13:01
Цитата: DooMDiM
Идея крутилась пару дней, то что я увидел, я надеялся что оно работает и хотел поставить себе. Но увы, и это оказалось нерабочим. Хорошо, кривые руки, поставьте кто себе и докажите что скопировать и вставить я не умею. Радирект в хтацес это проще простого, любой сможет. И оно работало только с ним. Интересовало как же вручную изменить ссылки в новостях. И весь плагиат заключается в одной единственной фразе -
&#34;&#34;.$preg_safe_name.&#34;/&#34;
ккоторую целсофт изобрели?

согласен, поставил твой вариант - работает как часы. ставил вариант от роксмарта, мало того, что чпу на доп. поля слетели, так и хак не работал.
4
Хак согласен очень хороший, но почему-то вторая страница имеет вот такой адрес
/xfsearch/США/page/2/

А как избавится от xfsearch на страницах погинации?
И еще очень бы хотелось написать уникальные метатеги title для каждой категории, к примеру:
Фильмы с участием Вин Дизель и Фильмы снятые в США.
4

dep-lit

Посетители 10 апреля 2015 21:55
engine.php
$url_page = $config['http_home_url'] . "xfsearch/" . urlencode ( str_replace("'", "'", $xf) );

Заменить на
$url_page = $config['http_home_url'] . urlencode($_GET['xn']) . "/" . urlencode ( str_replace("'", "'", $xf) );

И в .htaccess писать так
RewriteRule ^(genre)/([^/]*)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2 [L]
RewriteRule ^(genre)/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2&cstart=$3 [L]
RewriteRule ^(year)/([^/]*)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2 [L]
RewriteRule ^(year)/([^/]*)/page/([0-9]+)(/?)+$ index.php?do=xfsearch&xn=$1&xf=$2&cstart=$3 [L]

Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.