Dleshka.org
Авторизация

Хак Хак Алфавитный фильтр для DLE

+15
TipTop 18-09-2009 Хаки DLE 0 комментариев
Хак  Алфавитный фильтр для DLE


Хак будет полезен в первую очередь тем, у кого тематический сайт-каталог. Например, сайт только с клипами, сайт только с книгами Д.Донцовой :-), сайт только с рок-музыкой и т.д. Но в принципе, можно использовать на любом варезнике.

Возможности:
1) Фильтрация новостей по буквам латинского алфавита и цифрам. Фильтр по буквам кириллицы производится по фильтру «RUS»
2) Автоматическое добавление первой буквы/цифры названия при добавлении/редактировании новости в поле «Символьный код» (если буква кириллицы – добавляется RUS). При этом производится проверка на невозможность добавления спецсимволов, пробелов и т.д.


Хак тестировался на версиях 8.2 и 7.5 (если в пунктах описания не указано, для какой версии, значит подходит для обеих). Расмотрю варианты локализации для других версий.

Демо: _http://1024kbytes.com

Начнем:
1) Создаем в блокноте файл с именем afilter.php
Копируем в него код

<?php
/*
=====================================================
Алфавитный фильтр
=====================================================
Данный код защищен авторскими правами (kandriy2004@ukr.net, ICQ#271522951)
=====================================================
Файл:  afiltr.php
----------------------------------------------------------
Назначение:  Создание алфавитного списка 
=====================================================
*/
if(!defined('DATALIFEENGINE'))
{
  die("Hacking attempt!");
}
$alphafilter = '<TABLE cellSpacing=0 cellPadding=0 width=100%><TR><td  align = "center">';
$alphafilter .= '<a href="http://'.$_SERVER['HTTP_HOST'].'/catalog/RUS/">RUS</a>&nbsp;&nbsp;&nbsp;';
for ($i = 97; $i <= 122; $i++)
{
$alphafilter .= '<a href="http://'.$_SERVER['HTTP_HOST'].'/catalog/'.chr($i).'/">'.chr($i).'</a>&nbsp;';
}
$alphafilter .= '&nbsp;&nbsp;&nbsp;';
for ($i = 0; $i <= 9; $i++)
{
$alphafilter .= '<a href="http://'.$_SERVER['HTTP_HOST'].'/catalog/'.$i.'/">'.$i.'</a>&nbsp;';
}
$alphafilter .= '</td></tr></TABLE>';

    $tpl->load_template('afilter.tpl');
    $tpl->set('{alphafilter}', $alphafilter);
    $tpl->compile('afilter');
    $tpl->set('{afilter}', $tpl->result['afilter']);
?>


2) Копируем только что созданый afilter.php в /engine/moduls

3) Открываем /engine/moduls/functions.php, находим строчку

?>



и ВЫШЕ ее вставляем код:

function GetSymbolKod($title){  
$res = '000';  
$title = strtolower(ltrim($title));  
if (preg_match("/[a-zA-Zа-яА-Я0-9]/", $title, $out_arr ))   
{
       if (preg_match("/[a-zA-Z0-9]/", $out_arr[0]))  $res = $out_arr[0];
       if (preg_match("/[а-яА-Я]/", $out_arr[0]))  $res = "RUS";   
}   
return $res;
} 


4) Открываем /engine/inc/include/functions.inc.php (в ранних версиях может быть в /engine/inc/functions.inc.php)

?>



и ВЫШЕ вставляем код:

function GetSymbolKod($title){  
$res = '000';  
$title = strtolower(ltrim($title));  
if (preg_match("/[a-zA-Zа-яА-Я0-9]/", $title, $out_arr ))   
{
       if (preg_match("/[a-zA-Z0-9]/", $out_arr[0]))  $res = $out_arr[0];
       if (preg_match("/[а-яА-Я]/", $out_arr[0]))  $res = "RUS";   
}   
return $res;
} 



5) (для версти 8.2)
Открываем /engine/moduls/addnews.php, находим ПЕРВОЕ вхождение:

if( $found ) { 



и ВЫШЕ вставляем код:

/********* afilter ***********************/ 
$catalog_url = GetSymbolKod($title); 
/********* !afilter **********************/


5) (для версии 7.5)
Открываем /engine/moduls/addnews.php, находим строку

$symbol = $title[0];



ВПЕРЕДИ (не выше, а именно спереди строки) нее ставим «//» (без кавычек), а НИЖЕ вставляем код:

$symbol = GetSymbolKod($title);



Далее находим часть строки:

symbol='ABC'



и ЗАМЕНЯЕМ на:

symbol='$symbol'



Опять находим часть строки:

'III' 



и ЗАМЕНЯЕМ на:

'$symbol'




6) Открываем /engine/inc/addnews.php и находим строку:

$catalog_url =



ВПЕРЕДИ (не выше, а именно спереди строки) нее ставим «//» (без кавычек), а НИЖЕ вставляем код:


/********* afilter ***********************/
$catalog_url = GetSymbolKod($title);
/********* !afilter **********************/



7) Открываем /engine/inc/editnews.php и находим строку:

$catalog_url =



ВПЕРЕДИ (не выше, а именно спереди строки) нее ставим «//» (без кавычек), а НИЖЕ вставляем код:


/********* afilter ***********************/
$catalog_url = GetSymbolKod($title);
/********* !afilter **********************/




Хак имеет шаблон. Это для того, чтобы каждый мог сделать внешний вид фильтра по своему усмотрению. По умолчанию (то, что предложу я), подойдет большинству ибо простой и использует стиль спидбара (speedbar). Менять можно по своему усмотрению :-)
Итак, все просто:
8) В блокноте создаем файл afilter.tpl
В него копируем код:

<noindex>
<DIV class="afilter">{alphafilter}</DIV>
</noindex> 


Кстати, тэг можно и убрать :-)

9) Копируем только что созданный файл в /templates/ваш_шаблон.

Как видно из шаблона, я использую стиль "afilter". Чтоб долго не думать, как шаблон сделать подходящим к общему стилю сайта, я взял и скопировал класс спидбара (speedbar) и назвал его afilter (хотя можно еще проще – в шаблоне указать класс speedbar – но это чревато последствиями…).
Делал это так.
10) Открываем файл /templates/ваш_шаблон/css/style.css и ишем строку с описанием стиля «.speedbar», «.speedbar a» и «.speedbar a:hover» . У меня это выглядит так:

.speedbar {
    color: #727272;
    font-size: 11px;
    font-family: tahoma;
    padding-left: 6px;
}
.speedbar a {
    color:  #0574D3;
    text-decoration:none;
}
.speedbar a:hover {
    text-decoration: underline;
    color:  #0574D3;
    } 



Скопируйте этот код в самый конец файла, только замените название speedbar на afilter и добавьте

font-size: 11px;


к «.speedbar a» и «.speedbar a:hover» стилям.

Вот что у меня получилось:

.afilter {
    color: #727272;
    font-size: 11px;
    font-family: tahoma;
    padding-left: 6px;
}
.afilter a {
    color:  #0574D3;
    font-size: 11px;
    text-decoration:none;
}
.afilter a:hover {
    text-decoration: underline;
    color:  #0574D3;
    font-size: 11px;
    }    



11) Копируем только что отредактированный файл style.css обратно в /templates/ваш_шаблон/css/

Это мое видение шаблона :-). Повторяю – Вы же можете шаблон замутить, как надо именно Вам.

12) Предпоследний шаг.
Берем /templates/ваш_шаблон/main.tpl, находим строку {speedbar}. А тут как хотите – выше или ниже этой строки ставите тэг {afilter}. У меня на скриншоте – тэг выше {speedbar}.

13) И последнее - подключим наш Хак к сайту:
Открываем файл index.php, находим строчку

require_once ROOT_DIR . '/engine/init.php';



и НИЖЕ вставляем код:

//***************** afilter *************************
require_once ROOT_DIR.'/engine/modules/afilter.php';
//***************** afilter ************************* 



14) И еще один важный момент.
Т.к. поле «Символьный код» в новости, значение которого участвует в фильтре , заполняется автоматически только при add/edit новости, то у всех предыдущих новостей поле будет пустым (или заполненный не так, как нам надо). Решения есть два:
1) пересохранить все новости (надо потратить много времени)
2) запустить скрипт, который автоматом все правильно исправит (времени не надо тратить. Кому этот вариант ближе - пишите на мыло, ICQ271522951, в личку)

Удачи!

P.S. Есть готовое решение Хака, в котором реализована фильтрация в том числе и по буквам кириллицы. Кому интересно - пишите на мыло, icq271522951, в личку.
Информация
Зарегистрируйтесь чтобы комментировать публикацию.
Авторизация