Раздер Название темы Ответов Последний
Графика для сайта Shareman 3.70 RUS/2010 0 mandelsonsouggisse
Изготовление контента Нужен контент 10 ali7875
DataLife Engine Проблема регистрации. 1 JimaX
DataLife Engine Модальное окно в DataLife Engine 3 lionprizrak
DataLife Engine Настройка robots.txt 8 Prizrak_2012
Стол заказов на cmsko.ru Мини-чат. 2 JimaX
Общение пользователей Статьи 3 nastroenie
Хостинг TneHost - Хстинг провайдер 10 ali7875
DataLife Engine Установка банеров 9 JimaX
DataLife Engine Помогите с установой. dle95 2 nastroenie
Яндекс Apdate
Апдейты Яndex тИЦ
25.09.2013Последний |
02.07.2013
23.05.2013
Апдейты Яndex выдачи
21.11.2013Последний |
14.11.2013
07.11.2013
Апдейты ЯКаталога
27.11.2013Последний |
22.11.2013
20.11.2013

Информация
Главная страница » DLE » DLE Хаки » Хак для DLE "Алфавитный фильтр"
Хак для DLE "Алфавитный фильтр"
» Просмотров: 1176 » Дата: 2-01-2011, 13:49 » Автор: NeoMurderer
Хак для DLE "Алфавитный фильтр"

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

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

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

Хак тестировался на версиях 8.2 и 7.5

Рабочий пример можно посмотреть на 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)




Комментарии: 0 Теги: Алфавитный, фильт
 (голосов: 0)
Уважаемый посетитель, Вы зашли к нам на сайт как незарегистрированный пользователь. Мы рекомендуем Вам бесплатно зарегистрироваться либо войти на сайт под своим именем.
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.