dle.in.ua » Хаки » Алфавитный фильтр

Алфавитный фильтр

Автор: kand2004 от 18-09-2009, 00:33
Хак будет полезен в первую очередь тем, у кого тематический сайт-каталог. Например, сайт только с клипами, сайт только с книгами Д.Донцовой :-), сайт только с рок-музыкой и т.д. Но в принципе, можно использовать на любом варезнике.
Внешний вид:

Алфавитный фильтр


Вид, естественно можно изменить по Вашему усмотрению.

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

Рабочий пример можно посмотреть на _http://1024kbytes.com

Хак тестировался на версиях 8.2 и 7.5 (если в пунктах описания не указано, для какой версии, значит подходит для обеих). Расмотрю варианты локализации для других версий.
Итак:
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;
    }    
[code]

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

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

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

[b]13)[/b] И последнее - подключим наш хак к сайту:
Открываем файл index.php, находим строчку  
[code]
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, в личку.

Скриншот:
Алфавитный фильтр
  • Группа: User
  • Icq: 288569677
  • Комментариев: 703
  • Публикаций: 245
  • Таксь, нужно чёто фильтравать.
    Тематические сайты как рраз имеються.
    Нужно испытать это дело.
    laughing

    --------------------
    • GauraStyle
    • Регистрация: 21.01.2008
    • Репутация: (0|0|0)
    • 18 сентября 2009 09:29
    • 1
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 556
  • Публикаций: 121
  • GauraStyle,
    Согласен прикольный хак (ша на музыкалку поставлю будет по буквам ептель lol

    --------------------
    • neoks
    • Регистрация: 20.07.2009
    • Репутация: (0|0|0)
    • 18 сентября 2009 09:32
    • 2
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 13
  • Публикаций: 1
  • А как сделать чтоб буквы были толька русские и с большие а не маленькие
    • jura1990
    • Регистрация: 8.08.2008
    • Репутация: (0|0|0)
    • 18 сентября 2009 11:30
    • 3
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • А я что то на примере не заметил Русских букв feel
    • Kamar
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 12:05
    • 4
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: jura1990
    А как сделать чтоб буквы были толька русские и с большие а не маленькие

    Цитата: Kamar
    А я что то на примере не заметил Русских букв


    По поводу внедрения русских букв в каком угодно виде, обращайтесь на асю271522951, мыло или в личку.
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 12:19
    • 5
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Класс, куплю)
    • Влад
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 12:43
    • 6
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Влад,
    wink
    Вроде бы бесплатно)
    • 123Life
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 12:48
    • 7
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 120
  • Публикаций: 1
  • Влад, ахаха)) Спамилка у тя такая?)) Всегда пишет "Класс, куплю" lol
    • -CeBep
    • Регистрация: 20.10.2008
    • Репутация: (0|0|0)
    • 18 сентября 2009 12:57
    • 8
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Влад, ахаха)) Спамилка у тя такая?)) Всегда пишет "Класс, куплю" lol

    Чувак, ты меня с кем то путаешь! lol
    В первый раз так написал, потому что версия есть платная и бесплатная, платная естественно лучше.
    • Влад
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 13:05
    • 9
    ^
  • Группа: User
  • Icq: 288569677
  • Комментариев: 703
  • Публикаций: 245
  • Большие букавки делаються просто, для этго нужно только использовать теги соответственные и всё.
    Ну там всё просто, было бы лиш желание.
    fellow

    --------------------
    • GauraStyle
    • Регистрация: 21.01.2008
    • Репутация: (0|0|0)
    • 18 сентября 2009 13:39
    • 10
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • 8.2 не получилось. Нет классов .speedbar в css для моего шаблона. Просто добавил:
    .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;
    }

    Затем в main.tpl добавил {afilter}
    • toktok
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 15:34
    • 11
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • А это вроде через сам движок можно сделать:

    Из мануала:
    Каталог сайта (сортировка по символьному коду)
    http://website.com/catalog/a/ - с использованием ЧПУ
    http://website.com/index.php?catalog=а - без использованиия ЧПУ
    и т.д.
    • Flammen
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 16:09
    • 12
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: toktok
    8.2 не получилось. Нет классов .speedbar в css для моего шаблона.


    Просто добавьте в конец style.css стили afilter из инструкции.

    Цитата: Flammen
    А это вроде через сам движок можно сделать:

    Совершенно верно. Поле Символьный код используется в хаке. Просто в движке символьный код заполняется не так, как надо, а с помощью хака добавление первого симола названия новости происходит автоматом.
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 16:39
    • 13
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • kand2004,
    Сколько хочеш за платную версию?? с рус. буквами
    ПС: В аську никогда не пишу.....
    • Flammen
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 16:42
    • 14
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Внимание! У кого после исполнения всех пунктоа инструкции, на сайте ничего не выводит, пробуем поменять код в afilter.php (из п.1). ...Млин, в комментах нельзя добавить код... Тогда пишите на мыло, в личку, асю - сразу скину вам этот код.
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 16:44
    • 15
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • kand2004,
    Выложи текстовым файлом и попроси админов отредактировать новость fellow
    • Flammen
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 16:53
    • 16
    ^
  • Группа: Гости
  • Icq: 767792
  • Комментариев: 414
  • Публикаций: 19
  • Отлично!
    Спасибо ха хак.
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: -=ZLoY=-
    Отлично!Спасибо ха хак.

    на здоровье! smile
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 18 сентября 2009 21:16
    • 18
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • а вот в 7.2 нема

    ни этого
    $symbol = $title[0];
    ни этого
    symbol='ABC'
    ни этого
    'III'

    как порешать*
    • JayMoff
    • Регистрация: --
    • Репутация: (||)
    • 19 сентября 2009 12:40
    • 19
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: JayMoff
    как порешать*


    пиши на мыло, в личку, аську...
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 19 сентября 2009 17:27
    • 20
    ^
  • Группа: User
  • Icq: 208799127
  • Комментариев: 40
  • Публикаций: 0
  • всё у вас как то сложно

    разумеется во всех новостях надо ставить первую букву имени исполнителя в соответствующее поле
    я конечно не критикую никого просто альтернативный вариант ...
    демо на neko.org.ua стиль мона юзать такой же как и стиль перехода по страницам у вас в низу сайта

    --------------------
    • Whisper
    • Регистрация: 17.05.2008
    • Репутация: (0|0|0)
    • 21 сентября 2009 22:56
    • 21
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: Whisper
    всё у вас как то сложно

    почему же сложно? Возможность добавлять любое значение в поле "Символьный код" - это стандартная возможность движка. Я только автоматизировал процесс добавления - в данном случае это первая буква title. Если новости формируете только Вы сами, то конечно, будете следить за простановкой "Символьного кода", а если есть много журналистов, тогда автоматизация процесса необходима...

    Цитата: Whisper
    демо на neko.org.ua

    Фильтрация происходит только по буквам латиницы и цифрам. А как быть с буквами русского алфавита? Тем более, что у Вас есть новости с русским title'ом.. Наверное, просто у Вас так задумано - фильтровать только альбомы

    Удачи!

    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 22 сентября 2009 08:42
    • 22
    ^
  • Группа: User
  • Icq: 441200771
  • Комментариев: 28
  • Публикаций: 0
  • Для меня такой мод бесполезен
    Ни кто правда не смог придумать мод алфавит который показывает новости в катигориях и подкатегориях.
    • Diren
    • Регистрация: 24.08.2009
    • Репутация: (0|0|0)
    • 23 сентября 2009 21:39
    • 23
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: Diren
    Ни кто правда не смог придумать мод алфавит который показывает новости в катигориях и подкатегориях.

    Если Вам такой модуль нужен - пишите в личку - договоримся.
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 24 сентября 2009 08:35
    • 24
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Есть готовое решение данного хака для версии 7.2
    Все проверено и протестированно.
    ICQ:271522951
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 27 сентября 2009 15:25
    • 25
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Класс! вовсю пользую!)
    • JayMoff
    • Регистрация: --
    • Репутация: (||)
    • 27 сентября 2009 16:27
    • 26
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: JayMoff
    Класс! вовсю пользую!)

    Спасибо за отзыв! smile
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 27 сентября 2009 17:36
    • 27
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Купил версию с русскими буквами, все работает, спс афтару.....

    ПС: Не понял зачем только от индексации скрывать.....имхо, ведь положительно влияет....
    • Flammen
    • Регистрация: --
    • Репутация: (||)
    • 27 сентября 2009 20:36
    • 28
    ^
  • Группа: User
  • Icq: 208799127
  • Комментариев: 40
  • Публикаций: 0
  • Цитата: kand2004
    Наверное, просто у Вас так задумано - фильтровать только альбомы

    у меня это каталог исполнителей, на сайте есть еще новости и прочее, а в каталог должны попасть лишь исполнители (и имена у них кириллицей быть не могут)
    конечно автоматизировать было бы лучше но если только для выбранных категорий!

    --------------------
    • Whisper
    • Регистрация: 17.05.2008
    • Репутация: (0|0|0)
    • 27 сентября 2009 21:41
    • 29
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Цитата: Whisper
    конечно автоматизировать было бы лучше но если только для выбранных категорий!

    Это можно решить без проблем. Пишите на ICQ или на мыло.
    • kand2004
    • Регистрация: --
    • Репутация: (||)
    • 28 сентября 2009 10:41
    • 30
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • народ подскажите поставил кодировки русских букв, но использовал коды из спец символов ASCII, 192 и 223, но при поиске отображаются они след обр:
    Каталог » Р¤ (поиск по букве Ф)
    что еще нужно править?
    • kolllak
    • Регистрация: --
    • Репутация: (||)
    • 6 октября 2009 22:59
    • 31
    ^
  • Группа: Модератор
  • Icq: --
  • Комментариев: 81
  • Публикаций: 10
  • а без чпу есть?

    --------------------
    • NoSay
    • Регистрация: 11.11.2009
    • Репутация: (2|2|0)
    • 17 ноября 2009 22:14
    • 32
    ^
  • Группа: User
  • Icq: --
  • Комментариев: 28
  • Публикаций: 0
  • Взял полную версию, отлично все работает, пользуюсь с большим удовольствием =)
    • Diezzza
    • Регистрация: 25.01.2009
    • Репутация: (0|0|0)
    • 18 ноября 2009 12:18
    • 33
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • Нужна кирилица ! Помогите... в аську никто не отвечает итд итп..


    Потратил час и разобрался.
    • CKBAD
    • Регистрация: --
    • Репутация: (||)
    • 21 ноября 2009 00:24
    • 34
    ^
  • Группа: Гости
  • Icq: --
  • Комментариев: 0
  • Публикаций: 0
  • в 8.5 в addnews.php добавил код

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

    перед первым if( $found ) {
    но все равно не работает,если пользователь добавляет новость,только при редактировании или добавлении через админку
    • n0hcho
    • Регистрация: --
    • Репутация: (||)
    • 7 октября 2010 22:21
    • 35
    ^
  • Группа: User
  • Icq: 373624275
  • Комментариев: 71
  • Публикаций: 0
  • Может кто подскажет как добавить руские буквы.
    Может кто подскажет как зделать запрос на применение хака к уже созданым новостям.

    --------------------
    • lika004
    • Регистрация: 13.02.2010
    • Репутация: (0|0|0)
    • 8 октября 2010 02:18
    • 36
    ^
    Информация
    Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.