Хак меняет вид Shortstory на лету для
DLE - это модификация использует скрипт jquery, чтобы переключать оформление шаблона короткой новости при просмотр в
DataLife Engine, есть три режима: вывод списком, картинками или стандартным видом.
Это вырезанный кусок кода взятый у автора Sander с новости Переключение
шаблонов shortstory.
Установка хака на дле Меняем вид Shortstory на лету:
В main.tpl вставить
[aviable=main]
<script type="text/javascript">
$(function(){
if($.cookie('short_template')){
$(".templtes").removeClass('current');
$(".templater a[data-template]").removeClass('current').each(function(){
if($(this).data('template')==$.cookie('short_template')){
$(this).addClass('current');
$(".template-"+$.cookie('short_template')).addClass('current');
}
});
}
$(".templater a[data-template]").click(function(){
if($(this).hasClass('current')) return false;
$(this).addClass('current').siblings().removeClass('current');
$(".templtes").removeClass('current');
$(".template-"+$(this).data('template')).addClass('current');
$.cookie('short_template', $(this).data('template'),{path:'/'});
window.location.href=dle_root+'?short_template'+$(this).data('template');
return false;
});
})
</script>
<div class="sortn dpad"><div class="sortn"><div class="templater">Режим просмотра: <a href="#" class="current" data-template="default">Стандарт</a> | <a href="#" data-template="list">Список</a> | <a href="#" data-template="icons">Иконки</a></div></div></div>
[/aviable]
Добавляем стили:
.templater .current{color:#c00;}
.templtes{display:none;}
.templtes.current{display:block;}
Качаем архив и подключаем: jquery.cookie.js
Открываем файл engine/modules/show.short.php
Закоментируем строки:
/* if( isset( $view_template ) and $view_template == "rss" ) {
} elseif( $category_id and $cat_info[$category_id]['short_tpl'] != '' ) $tpl->load_template( $cat_info[$category_id]['short_tpl'] . '.tpl' );
else $tpl->load_template( 'shortstory.tpl' ); */
Вставляем ниже:
$user_short_tpl = array(
'default' => 'shortstory.tpl', //дефолтный шаблон
'list' => 'shortstory_list.tpl', // шаблон списком
'icons' => 'shortstory_icons.tpl' // шаблон картинки
);
$user_tpl =(isset($_COOKIE['short_template']) && isset($user_short_tpl[$_COOKIE['short_template']])) ? $user_short_tpl[$_COOKIE['short_template']] : $user_short_tpl['default'];
$user_tpl = (isset($_GET['short_template']) && isset($user_short_tpl[$_GET['short_template']])) ? $user_short_tpl[$_GET['short_template']] : $user_tpl;
if( isset( $view_template ) and $view_template == "rss" ) {
} elseif( $category_id and $cat_info[$category_id]['short_tpl'] != '' ) $tpl->load_template( $cat_info[$category_id]['short_tpl'] . '.tpl' );
else $tpl->load_template($user_tpl);
Вот и всё!
Обновленный хак меняет вид Shortstory на лету для DLE 13.0
Автор обновления пользователь: TeraMoune
От автора:
По поводу самой реализации, думаю нету смысла передавать get параметр и считывать его. Ведь мы при нажатии определили куки и при обновлении система считывает параметр и присваивает переменной её значение.
Есть xml под 13 версию движка. В админку добавил поле где можно перечислять шаблоны. Размещение html разметки осуществляется тегом {sortn} в любом месте main.tpl и дочерних шаблонах.
Поделился хаком на сайте Sander'a в той самой теме, он что-то мне про фильтрацию начал втирать. Я дописал с фильтрацией и еще появился некий предохранитель. Если писать произвольные названия префиксов в куках будет происходить проверка и если у шаблона указанного нету будет грузить дефолт. А сами переключатели видны только там где используется модуль show.short.php. Вот такие не плохие доработки.
В прочем вот сам xml
<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
<name>Change shortstory</name>
<description>В шаблоне main.tpl и других подключенных в нём в удобном месте используйте {sortn}
Добавление и изменение html разметки осуществляется в разделе "Действия в файлах" в правках над файлом "engine/modules/main.php"</description>
<icon></icon>
<version></version>
<dleversion>13</dleversion>
<versioncompare>greater</versioncompare>
<mysqlinstall><![CDATA[]]></mysqlinstall>
<mysqlupgrade><![CDATA[]]></mysqlupgrade>
<mysqlenable><![CDATA[]]></mysqlenable>
<mysqldisable><![CDATA[]]></mysqldisable>
<mysqldelete><![CDATA[]]></mysqldelete>
<file name="engine/modules/show.short.php">
<operation action="replace">
<searchcode><![CDATA[ if( $view_template != "rss" ) {
if( $category_id and $cat_info[$category_id]['short_tpl'] != '' ) $tpl->load_template( $cat_info[$category_id]['short_tpl'] . '.tpl' );
else $tpl->load_template( 'shortstory.tpl' );
}]]></searchcode>
<replacecode><![CDATA[$change_template = true;
if( isset($config['change_template']) AND $config['change_template'] != '' ) {
$user_short_tpl_tmp = explode(',', $config['change_template']);
if( count($user_short_tpl_tmp) <= 1 ) $change_template = false;
}
$user_tpl = isset($_COOKIE['short_template']) ? trim($_COOKIE['short_template']) : 'default';
$user_tpl = ($user_tpl == 'default' OR !$change_template) ? 'shortstory.tpl' : 'shortstory_'.$user_tpl.'.tpl';
if( $view_template != "rss" ) {
if( $category_id and $cat_info[$category_id]['short_tpl'] != '' ) $tpl->load_template( $cat_info[$category_id]['short_tpl'] . '.tpl' );
else $tpl->load_template( $user_tpl );
}]]></replacecode>
</operation>
<operation action="after">
<searchcode><![CDATA[$db->free( $sql_result );]]></searchcode>
<replacecode><![CDATA[$onload_scripts[] = <<<HTML
$(".templater a[data-template]").click(function(){
if($(this).hasClass('current')) return false;
$(this).addClass('current').siblings().removeClass('current');
$(".templtes").removeClass('current');
$(".template-"+$(this).data('template')).addClass('current');
Cookie.create('short_template', $(this).data('template'), {
expires: 8760,
path: '/'
});
window.location.href=location.href;
return false;
});
HTML;]]></replacecode>
</operation>
</file>
<file name="engine/modules/main.php">
<operation action="after">
<searchcode><![CDATA[$tpl->set ( '{speedbar}', $tpl->result['speedbar'] );]]></searchcode>
<replacecode><![CDATA[$change_template = true;
if( isset($config['change_template']) AND $config['change_template'] != '' ) {
$user_short_tpl = array();
$user_short_tpl_tmp = explode(',', $config['change_template']);
if( count($user_short_tpl_tmp) <= 1 ) $change_template = false;
if( $change_template ) {
foreach($user_short_tpl_tmp as $val) {
$val = explode('|', $val);
$user_short_tpl[] = array('template' => $val[0], 'name' => htmlspecialchars_decode($val[1]));
}
}
} else {
$user_short_tpl = array(
array('template' => 'default', 'name' => 'Стандарт'),
array('template' => 'list', 'name' => 'Список'),
array('template' => 'icons', 'name' => 'Иконки')
);
}
if( $change_template ) {
$sortn_arr = array();
$user_tpl = isset($_COOKIE['short_template']) ? trim($_COOKIE['short_template']) : 'default';
foreach($user_short_tpl as $val){
if( is_array($val) ) {
$active_template = ' ';
if($user_tpl == $val['template']) $active_template = ' class="current" ';
$sortn_arr[] = '<a href="#"'.$active_template.'data-template="'.$val['template'].'">'.$val['name'].'</a>';
}
}
$sortn_arr = implode(' | ', $sortn_arr);
$sortn = <<<HTML
<div class="sortn dpad">
<div class="sortn">
<div class="templater">Режим просмотра: {$sortn_arr}</div>
</div>
</div>
HTML;
$tpl->set ( '{sortn}', $sortn);
} else $tpl->set ( '{sortn}', '');]]></replacecode>
</operation>
</file>
<file name="engine/inc/options.php">
<operation action="after">
<searchcode><![CDATA[showRow( $lang['opt_sys_biw'], $lang['opt_sys_biwd'], makeCheckBox( "save_con[bbimages_in_wysiwyg]", "{$config['bbimages_in_wysiwyg']}" ) );]]></searchcode>
<replacecode><![CDATA[showRow( $lang['change_template'], $lang['change_template_2'], "<textarea class=\"classic\" style=\"width:100%;height:150px;\" name=\"save_con[change_template]\">{$config['change_template']}</textarea>" );]]></replacecode>
</operation>
<operation action="before">
<searchcode><![CDATA[$save_con['offline_reason'] = trim(strip_tags(stripslashes( $save_con['offline_reason'] )));]]></searchcode>
<replacecode><![CDATA[$save_con['change_template'] = trim(stripslashes( $save_con['change_template'] ));
$save_con['change_template'] = htmlspecialchars( $save_con['change_template'], ENT_QUOTES, $config['charset']);]]></replacecode>
</operation>
<operation action="replace">
<searchcode><![CDATA[if( $name != "offline_reason" ) {]]></searchcode>
<replacecode><![CDATA[if( $name != "offline_reason" AND $name != "change_template" ) {]]></replacecode>
</operation>
</file>
<file name="language/Russian/adminpanel.lng">
<operation action="after">
<searchcode><![CDATA['wysiwyg_language' => "ru",]]></searchcode>
<replacecode><![CDATA['change_template' => "Список шаблонов",
'change_template_2' => "Перечислите шаблоны для смены<br />Пример: <strong>default</strong>-<strong>Стандарт</strong> | <strong>list</strong>-<strong>Список</strong> | <strong>icons</strong>-<strong>Иконки</strong><br /><br />Префикс шаблона - Текст или картинка<br /> - default = shortstory.tpl<br /> - list = shortstory_<strong>list</strong>.tpl<br />Для отключения смены оставьте один шаблон. Пустое поле задействует стандартный набор смены шаблонов.",]]></replacecode>
</operation>
</file>
</dleplugin>
Скачать
хаки для dle, как Хак меняет вид Shortstory на лету для DLE исходники:
Menyaem-vid-Shortstory-na-letu.rar [18,59 Kb] (cкачиваний: 149)
Комментарии 24