
Представляем на сайте dle9.com установка хак dle добавления Допустимых символов буквенного каталога новостей в скрипт движка DataLife Engine. Данной установкой можно добавить пункт в движок, тем самым установить скрипт автоматического создание «символьного кода» для всех публикаций на сайте, у которых его нет. Также будет возможно принудительное создание, оно перезапишет существующие значения.
Добавление буквенного каталога, главным образом служит для объединения группы новостей в каталоги, например, если установить группе новостей один символьный код «A», то эта группа новостей будет доступна по адресу: http://site ru/catalog/A/ . То есть, после перестроения мы получим «Алфавитный указатель» , предназначенный для автоматического поиска новостей, заголовок которых начинается на определённую букву (символ) или цифру. Из категории Хаки DLE Допустимые символы буквенного каталога публикаций, в результате позволяет осуществлять навигацию очень удобно как для посетителей сайта, так и для администрации.

Установка: Хак для DLE Допустимые символов буквенного каталога новостей
1. В файле engine/ajax/rebuild.php найти:
echo $buffer;
} else {
заменить на:
echo $buffer;
} elseif ($_POST['area'] == "cat_rebuild" ) {
$result = $db->query("SELECT id, title, symbol FROM " . PREFIX . "_post LIMIT ".$startfrom.", ".$count_per_step);
while($row = $db->get_row($result))
{
$catalog_url = $row['symbol'];
if ($config['create_catalog'] AND !$catalog_url) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( preg_replace( "/[^{$config['valid_catalog_symbols']}]+/mi", "", ( $row['title'] ) ) ) ) ) ), 0, 1, $config['charset'] ) );
$db->query( "UPDATE " . PREFIX . "_post SET symbol='{$catalog_url}' WHERE id='{$row['id']}'" );
$step++;
}
clear_cache();
$rebuildcount = $startfrom + $step;
$buffer = "{"status": "ok","rebuildcount": {$rebuildcount}}";
echo $buffer;
} elseif ($_POST['area'] == "rewrite_catalog" ) {
$result = $db->query("SELECT id, title FROM " . PREFIX . "_post LIMIT ".$startfrom.", ".$count_per_step);
while($row = $db->get_row($result))
{
if ($config['create_catalog']) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( preg_replace( "/[^{$config['valid_catalog_symbols']}]+/mi", "", ( $row['title'] ) ) ) ) ) ), 0, 1, $config['charset'] ) );
$db->query( "UPDATE " . PREFIX . "_post SET symbol='{$catalog_url}' WHERE id='{$row['id']}'" );
$step++;
}
clear_cache();
$rebuildcount = $startfrom + $step;
$buffer = "{"status": "ok","rebuildcount": {$rebuildcount}}";
echo $buffer;
} else {
2. В файле engine/inc/addnews.php найти:
if ($config['create_catalog'] AND !$catalog_url) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( $title ) ) ), ENT_QUOTES, $config['charset'] ), 0, 1, $config['charset'] ) );
заменить на:
if ($config['create_catalog'] AND !$catalog_url) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( preg_replace( "/[^{$config['valid_catalog_symbols']}]+/mi", "", ( $title ) ) ) ) ) ), 0, 1, $config['charset'] ) );
3. В файле engine/inc/editnews.php найти:
if ($config['create_catalog'] AND !$catalog_url) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( $title ) ) ), ENT_QUOTES, $config['charset'] ), 0, 1, $config['charset'] ) );
заменить на:
if ($config['create_catalog'] AND !$catalog_url) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( preg_replace( "/[^{$config['valid_catalog_symbols']}]+/mi", "", ( $title ) ) ) ) ) ), 0, 1, $config['charset'] ) );
4. В файле engine/inc/options.php найти:
showRow( $lang['opt_sys_acat'], $lang['opt_sys_acatd'], makeDropDown( array ("1" => $lang['opt_sys_yes'], "0" => $lang['opt_sys_no'] ), "save_con[create_catalog]", "{$config['create_catalog']}" ) );
заменить на:
showRow( $lang['opt_sys_acat'], $lang['opt_sys_acatd'], makeDropDown( array ("1" => $lang['opt_sys_yes'], "0" => $lang['opt_sys_no'] ), "save_con[create_catalog]", "{$config['create_catalog']}" ) );
showRow( "Допустимые символы буквенного каталога публикаций", "Скрипт добавит только разрешённую букву из заголовка вашей новости, например, в данном случае: <font color="darkgreen"><b>a-zа-я0-9</b></font> - будет добавлен первый символ латиницы, кириллицы или цифра. <font color="red">«</font>Кавычки<font color="red">»</font>, <font color="red">(</font>скобки<font color="red">)</font> и <font color="red">[</font>другие неразрешённые символы<font color="red">]</font> будут отфильтрованы!", "<input class="edit bk" type=text style="text-align: center;" name="save_con[valid_catalog_symbols]" value="{$config['valid_catalog_symbols']}" size=40>" );
5. В файле engine/inc/rebuild.php найти:
HTML;
$row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_static WHERE allow_br !='2'" );
заменить на:
HTML;
if ($config['create_catalog']) {
$submit = ("<input type="submit" id="cat_button" class="btn btn-primary" value="{$lang['rebuild_start']}" style="width:190px;" /><input type="hidden" id="cat_rebuild_ok" name="cat_rebuild_ok" value="0" />");
} else {
$submit = ("<a class="btn btn-primary" style="color:#FFFFFF;font-size:11px;line-height:15px;" title="Настройки параметров скрипта" target="_blank" href="$PHP_SELF?mod=options&action=syscon">Настройки параметров скрипта</a> Включите <b>автоматическое формирование буквенного каталога публикаций</b> на вкладке вывода новостей");
}
echo <<<HTML
<form action="" method="post">
<div style="padding-top:5px;padding-bottom:2px;">
<table width="100%">
<tr>
<td width="4"><img src="engine/skins/images/tl_lo.gif" width="4" height="4" border="0" /></td>
<td style="background-image: url(/engine/skins/images/tl_oo.gif)"><img src="engine/skins/images/tl_oo.gif" width="1" height="4" border="0" /></td>
<td width="6"><img src="engine/skins/images/tl_ro.gif" width="6" height="4" border="0" /></td>
</tr>
<tr>
<td style="background-image: url(/engine/skins/images/tl_lb.gif)"><img src="engine/skins/images/tl_lb.gif" width="4" height="1" border="0" /></td>
<td style="padding:5px;" bgcolor="#FFFFFF">
<table width="100%">
<tr>
<td bgcolor="#EFEFEF" height="29" style="padding-left:10px;"><div class="navigation">Автоматическое создание буквенного каталога</div></td>
</tr>
</table>
<div class="unterline"></div>
<table width="100%">
<tr>
<td style="padding:2px;" colspan="2">Данная утилита выполнит автоматическое создание <b>символьного кода</b> для всех новостей на сайте, у которых его нет. Возможно принудительное создание, оно перезапишет существующие значения. Создание буквенного каталога предназначено для объединения группы новостей в каталоги, к примеру, если задать группе новостей один символьный код <b>A</b>, то эта группа новостей будет доступна по адресу: <a title="{$config['http_home_url']}catalog/A/" target="_blank" href="{$config['http_home_url']}catalog/A/" class="copyright"><b>{$config['http_home_url']}catalog/A/</b></a>. То есть, после перестроения мы получим <b>«Алфавитный указатель»</b>, предназначенный для автоматического поиска новостей, заголовок которых начинается на определённую букву (символ) или цифру. Такой способ навигации очень удобен как для посетителей сайта, так и для администрации. <br />Допустимые символы буквенного каталога публикаций вводятся <a title="Настройка допустимых символов буквенного каталога" target="_blank" href="$PHP_SELF?mod=options&action=syscon" class="copyright">в настройках параметров скрипта</a>, во вкладке настройки вывода новостей, текущее значение: <font color="darkgreen"><b>{$config['valid_catalog_symbols']}</b></font>. <br />Перезаписать существующие значения <b>символьного кода</b> <select id="rewrite_catalog" name="rewrite_catalog"><option value="no">Нет</option><option value="yes">Да</option></select> <br /><br /><font color="red"><b>Внимание:</b> Перед началом не забудьте создать резервную копию базы данных, т.к. данное действие в случае некорректной или не совсем ожидаемой работы, невозможно будет отменить.</font></td>
</tr>
<tr>
<td colspan="2"><div class="hr_line"></div></td>
</tr>
<tr>
<td style="padding:2px;height:50px;"><div id="cat_progressbar"></div>{$lang['stat_allnews']} {$row['count']}, {$lang['rebuild_count']} <font color="red"><span id="cat_newscount">0</span></font> <span id="cat_progress"></span></td>
</tr>
<tr><td style="background-image: url(/engine/skins/images/mline.gif)" height=1 colspan=2></td></tr>
<tr>
<td style="padding:2px;" colspan="2"> </td>
</tr>
<tr>
<td style="padding:2px;">{$submit}</td>
</tr>
</table>
</td>
<td style="background-image: url(/engine/skins/images/tl_rb.gif)"><img src="engine/skins/images/tl_rb.gif" width="6" height="1" border="0" /></td>
</tr>
<tr>
<td><img src="engine/skins/images/tl_lu.gif" width="4" height="6" border="0" /></td>
<td style="background-image: url(/engine/skins/images/tl_ub.gif)"><img src="engine/skins/images/tl_ub.gif" width="1" height="6" border="0" /></td>
<td><img src="engine/skins/images/tl_ru.gif" width="6" height="6" border="0" /></td>
</tr>
</table>
</div></form>
<script language="javascript" type="text/javascript">
var total = {$row['count']};
$(function() {
$( "#cat_progressbar" ).progressbar({
value: 0
});
$('#cat_button').click(function() {
$("#cat_progress").ajaxError(function(event, request, settings){
$(this).html('{$lang['nl1_error']}');
$('#cat_button').attr("disabled", false);
});
$('#cat_progress').html('{$lang['rebuild_status']}');
$('#cat_button').attr("disabled", "disabled");
$('#cat_button').val("{$lang['rebuild_forw']}");
cat_senden( $('#cat_rebuild_ok').val() );
return false;
});
});
function cat_senden( startfrom ){
var cat=top.document.getElementById('rewrite_catalog').value;
if (cat=='no') {
$.post("engine/ajax/rebuild.php?user_hash={$dle_login_hash}", { startfrom: startfrom, area: 'cat_rebuild' },
function(data){
if (data) {
if (data.status == "ok") {
$('#cat_newscount').html(data.rebuildcount);
$('#cat_rebuild_ok').val(data.rebuildcount);
var proc = Math.round( (100 * data.rebuildcount) / total );
if ( proc > 100 ) proc = 100;
$('#cat_progressbar').progressbar( "option", "value", proc );
if (data.rebuildcount >= total)
{
$('#cat_progress').html('{$lang['rebuild_status_ok']}');
}
else
{
setTimeout("cat_senden(" + data.rebuildcount + ")", 5000 );
}
}
}
}, "json");
return false;
}
if (cat=='yes') {
$.post("engine/ajax/rebuild.php?user_hash={$dle_login_hash}", { startfrom: startfrom, area: 'rewrite_catalog' },
function(data){
if (data) {
if (data.status == "ok") {
$('#cat_newscount').html(data.rebuildcount);
$('#cat_rebuild_ok').val(data.rebuildcount);
var proc = Math.round( (100 * data.rebuildcount) / total );
if ( proc > 100 ) proc = 100;
$('#cat_progressbar').progressbar( "option", "value", proc );
if (data.rebuildcount >= total)
{
$('#cat_progress').html('{$lang['rebuild_status_ok']}');
}
else
{
setTimeout("cat_senden(" + data.rebuildcount + ")", 5000 );
}
}
}
}, "json");
return false;
}
}
</script>
HTML;
$row = $db->super_query( "SELECT COUNT(*) as count FROM " . PREFIX . "_static WHERE allow_br !='2'" );
6. В файле engine/modules/addnews.php найти:
if ($config['create_catalog']) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( $title ) ) ), ENT_QUOTES, $config['charset'] ), 0, 1, $config['charset'] ) ); else $catalog_url = "";
заменить на:
if ($config['create_catalog']) $catalog_url = $db->safesql( dle_substr( htmlspecialchars( strip_tags( stripslashes( trim( preg_replace( "/[^{$config['valid_catalog_symbols']}]+/mi", "", ( $title ) ) ) ) ) ), 0, 1, $config['charset'] ) ); else $catalog_url = "";
Так же при помощи этого "исправления" можно добавить символьный код к уже давно добавленным новостям. При перестроении добавленный вами ранее код останется не тронутым, однако, имеется возможность принудительно его перезаписать.
Хак DLE Допустимые символы буквенного каталога публикаций в целом работает на данном коде.
Вам нужно будет указать допустимые символы в настройках вывода новостей админпанели. Рекомендуемый формат регулярного выражения: a-zа-я0-9
будет брать первый символ кириллицы, латиницы или цифру из заголовка, возможно, вы также сможете указать и национальные символы. (не проверялось). Всё. fellow
Хак DLE Допустимые символы буквенного каталога публикаций, в результате навигация становится удобней как для посетителей сайта, так и для администрации
Автор: iwanowi4 [18-11-2012]
Предлагаем ознакомится с хаками дле