Перейти к публикации

Ajax переключение вида кратких новостей


Рекомендованные сообщения

Всем привет. есть такой плагин Ajax переключение вида кратких новостей.

Но на последних версиях dle чтото он работать не хочет. 

Посмотрите что не так с ним, как его можно оптимизировать. 

Сам плагин:

Первым делом подключим его к нашему шаблону. Для этого открываем файл main.tpl и перед тегом </head> вставляем следующие строки:

[aviable=main|cat]<link media="screen" href="{THEME}/css/ajax_temp.css" type="text/css" rel="stylesheet" />[/aviable]

Код css

.activetempajax {
    text-decoration: none;
    background: #d8e0eb;
}
.view-type {
    display: inline-block;
    float: right;
}
.view-type a {
    padding: 3px 6px;
    border-radius: 3px;
    display: inline-block;
}
.setview {
    width: 16px;
    height: 16px;
    display: inline-block;
    vertical-align: middle;
    position: relative;
    background: url("../images/set_view.png") no-repeat;
}
.view1 {
    background-position: 0 0;
}
.view2 {
    background-position: 0 -16px;
}
.view3 {
    background-position: 0 -32px;
}

Затем в самом низу этого же файла подключаем .js файл, перед тегом </body> вставляем:

[aviable=main|cat]<script type="text/jаvascript" src="{THEME}/js/ajax_temp.js"></script>[/aviable]

Код ajax_temp.js

$("body").on("click", "[data-temp*=this_]", function() {
	if($(this).hasClass("activetempajax"))
	{
		return false;
	}
	else
	{
		ShowLoading('');
		$(".templater > a").removeClass("activetempajax");
		$(this).addClass("activetempajax");
		var $temp = $(this).attr("data-nametemp");
		var $catid = $(this).attr("data-catid");
		var $pageid = $(this).attr("data-pageid");
		$.post(dle_root + "engine/ajax/ajax_template.php", {template_ajax:$temp, cstart:$pageid, category_id:$catid}, function(data) {
			if(data)
			{
				$("#dle-content").html(data);
				HideLoading('');
			}
		});
		return false;
	}
});

Код самого ajax_template.php

<?PHP

@error_reporting ( E_ALL ^ E_WARNING ^ E_NOTICE );
@ini_set ( 'display_errors', true );
@ini_set ( 'html_errors', false );
@ini_set ( 'error_reporting', E_ALL ^ E_WARNING ^ E_NOTICE );

$template_ajax = isset($_POST["template_ajax"]) && is_string($_POST["template_ajax"]) ? trim(strip_tags(stripslashes($_POST["template_ajax"]))) : false;
$cstart = isset($_POST["cstart"]) && is_numeric($_POST["cstart"]) ? intval($_POST["cstart"]) : false;
$category_id = isset($_POST["category_id"]) && is_numeric($_POST["category_id"]) ? intval($_POST["category_id"]) : false;
if(!$template_ajax) return;

if(!in_array($template_ajax, array("default", "list", "tablet"))) return;

define( 'DATALIFEENGINE', true );
define( 'ROOT_DIR', substr( dirname(  __FILE__ ), 0, -12 ) );
define( 'ENGINE_DIR', ROOT_DIR . '/engine' );

include ENGINE_DIR . '/data/config.php';
require_once ENGINE_DIR . '/classes/mysql.php';
require_once ENGINE_DIR . '/data/dbconfig.php';
require_once ENGINE_DIR . '/modules/functions.php';
require_once ENGINE_DIR . '/classes/templates.class.php';

dle_session();

require_once ENGINE_DIR . '/modules/sitelogin.php';
require_once ROOT_DIR . '/language/' . $config['langs'] . '/website.lng';
@header( "Content-type: text/html; charset=" . $config['charset'] );

if(!$is_logged) $member_id['user_group'] = 5;

//################# Определение групп пользователей
$user_group = get_vars( "usergroup" );
if( ! $user_group ) {
	$user_group = array ();
	$db->query( "SELECT * FROM " . USERPREFIX . "_usergroups ORDER BY id ASC" );
	while ( $row = $db->get_row() ) {
		$user_group[$row['id']] = array ();
		foreach ( $row as $key => $value ) $user_group[$row['id']][$key] = stripslashes($value);
	}
	set_vars( "usergroup", $user_group );
	$db->free();
}

//################# Определение категорий и их параметры
$cat_info = get_vars( "category" );
if( ! is_array( $cat_info ) ) {
	$cat_info = array ();
	$db->query( "SELECT * FROM " . PREFIX . "_category ORDER BY posi ASC" );
	while ( $row = $db->get_row() ) {
		$cat_info[$row['id']] = array ();
		foreach ( $row as $key => $value ) $cat_info[$row['id']][$key] = stripslashes( $value );
	}
	set_vars( "category", $cat_info );
	$db->free();
}
set_cookie("short_template", $template_ajax, 366);
//$tpl->load_template( $user_short_tpl[$template_ajax] );

$thisdate = date ( "Y-m-d H:i:s", time () );
if ($config['no_date'] AND !$config['news_future']) $where_date = " AND date < '" . $thisdate . "'";
else $where_date = "";
$allow_list = explode ( ',', $user_group[$member_id['user_group']]['allow_cats'] );
if ($allow_list[0] != "all")
{
	if ($config['allow_multi_category']) $stop_list = "category regexp '[[:<:]](" . implode ( '|', $allow_list ) . ")[[:>:]]' AND ";
	else $stop_list = "category IN ('" . implode ( "','", $allow_list ) . "') AND ";
}
else $stop_list = "";

$allow_sub_cats = true;
if ( $cat_info[$category_id]['show_sub'] )
{
	if ( $cat_info[$category_id]['show_sub'] == 1 ) $get_cats = get_sub_cats ( $category_id );
	else { $get_cats = $category_id; $allow_sub_cats = false; }
}
else
{
	if ( $config['show_sub_cats'] ) $get_cats = get_sub_cats ( $category_id );
	else { $get_cats = $category_id; $allow_sub_cats = false; }
}
if ($config['allow_multi_category']) $where_category = "category regexp '[[:<:]](" . $get_cats . ")[[:>:]]'";
else
{	
	if ( $allow_sub_cats )
	{	
		$get_cats = str_replace ( "|", "','", $get_cats );
		$where_category = "category IN ('" . $get_cats . "')";
	}
	else $where_category = "category = '{$get_cats}'";
}
if ($config['allow_fixed']) $fixed = "fixed desc, ";
else $fixed = "";
$news_sort_by = ($config['news_sort']) ? $config['news_sort'] : "date";
$news_direction_by = ($config['news_msort']) ? $config['news_msort'] : "DESC";
if($category_id)
{
	$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$where_category} AND approve=1" . $where_date . " ORDER BY " . $fixed . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
	$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$where_category} AND approve=1" . $where_date;
}
else
{	
	$sql_select = "SELECT p.id, p.autor, p.date, p.short_story, CHAR_LENGTH(p.full_story) as full_story, p.xfields, p.title, p.category, p.alt_name, p.comm_num, p.allow_comm, p.fixed, p.tags, e.news_read, e.allow_rate, e.rating, e.vote_num, e.votes, e.view_edit, e.editdate, e.editor, e.reason FROM " . PREFIX . "_post p LEFT JOIN " . PREFIX . "_post_extras e ON (p.id=e.news_id) WHERE {$stop_list}approve=1 AND allow_main=1" . $where_date . " ORDER BY " . $fixed . $news_sort_by . " " . $news_direction_by . " LIMIT " . $cstart . "," . $config['news_number'];
	$sql_count = "SELECT COUNT(*) as count FROM " . PREFIX . "_post WHERE {$stop_list}approve=1 AND allow_main=1" . $where_date;
}
$tpl = new dle_template( );
$tpl->dir = ROOT_DIR . '/templates/'.$config['skin'];
define( 'TEMPLATE_DIR', $tpl->dir );
$allow_active_news = true;
if($category_id > 0)
{
	$url_page = $config['http_home_url'] . get_url ( $category_id );
	$user_query = "do=cat&amp;category=" . $cat_info[$category_id]['alt_name'];
}
else
{
	$url_page = substr ( $config['http_home_url'], 0, strlen ( $config['http_home_url'] ) - 1 );
	$user_query = ""; 
}
include ENGINE_DIR . '/modules/show.short.php';
$tpl->result['content'] = str_replace( '{THEME}', $config['http_home_url'] . 'templates/' . $config['skin'], $tpl->result['content'] );
echo $tpl->result['content'];
?>

В этом же файле в месте где хотим чтобы отображался сам переключатель вставляем следующее:

[aviable=main|cat]
<div class="view-type templater">
<a href="#" [default] class="activetempajax" [/default] data-temp="this_1" data-catid="{id_cat}" data-pageid="{cstart}" data-nametemp="default">
<span class="setview view1"></span>
</a>
<a href="#" [list] class="activetempajax" [/ list] data-temp="this_2" [/list] data-catid="{id_cat}" data-pageid="{cstart}" data-nametemp="list">
<span class="setview view2"></span>
</a>
<a href="#" [table] class="activetempajax" [/table] data-temp="this_3" data-catid="{id_cat}" data-pageid="{cstart}" data-nametemp="tablet">
<span class="setview view3"></span>
</a>
</div>
[/aviable]

Открываем файл  /engine/engine.php и ищем такие строки:

$cache_prefix .= "_tempate_" . $config['skin'];

Ниже дописываем это:

$user_short_tpl = array(
    'default' => 'shortstory.tpl',
    'list' => 'shortstory_list.tpl',
    'tablet' => 'shortstory_tablet.tpl'
);
$user_tpl =(isset($_COOKIE['short_template']) && isset($user_short_tpl[$_COOKIE['short_template']])) ? $_COOKIE['short_template'] : "default";
$cache_prefix .= "_".$user_tpl;

Далее открываем файл  /engine/modules/show.short.php и ищем строки:

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' );

Заменяем эти строки на:

$user_short_tpl = array(
    'default' => 'shortstory.tpl', 
    'list' => 'shortstory_list.tpl', 
    'tablet' => 'shortstory_tablet.tpl' 
);
if($template_ajax)
    $user_tpl = $user_short_tpl[$template_ajax];
else
    $user_tpl =(isset($_COOKIE['short_template']) && isset($user_short_tpl[$_COOKIE['short_template']])) ? $user_short_tpl[$_COOKIE['short_template']] : $user_short_tpl["default"];
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);}

После открываем файл /engine/modules/main.php (если у вас более старая версия DLE то файл index.php корневой!) и находим:

$tpl->set ( '{speedbar}', $tpl->result['speedbar'] );

Ниже вставляем:

$tpl->set ( '{id_cat}', $category_id );
$tpl->set ( '{cstart}', intval($_REQUEST["cstart"]) );
if(isset($_COOKIE['short_template']))
{
    if($_COOKIE['short_template'] == "default")
    {
        $tpl->set_block( "'\\[default\\](.*?)\\[/default\\]'si", "\\1" );
        $tpl->set_block( "'\\[list\\](.*?)\\[/list\\]'si", "" );
        $tpl->set_block( "'\\[table\\](.*?)\\[/table\\]'si", "" );
    }
    elseif($_COOKIE['short_template'] == "list")
    {
        $tpl->set_block( "'\\[default\\](.*?)\\[/default\\]'si", "" );
        $tpl->set_block( "'\\[list\\](.*?)\\[/list\\]'si", "\\1" );
        $tpl->set_block( "'\\[table\\](.*?)\\[/table\\]'si", "" );
    }
    else
    {
        $tpl->set_block( "'\\[default\\](.*?)\\[/default\\]'si", "" );
        $tpl->set_block( "'\\[list\\](.*?)\\[/list\\]'si", "" );
        $tpl->set_block( "'\\[table\\](.*?)\\[/table\\]'si", "\\1" );
    }
}
else
{
    $tpl->set_block( "'\\[default\\](.*?)\\[/default\\]'si", "\\1" );
    $tpl->set_block( "'\\[list\\](.*?)\\[/list\\]'si", "" );
    $tpl->set_block( "'\\[table\\](.*?)\\[/table\\]'si", "" );
}

 

Изменено пользователем Talory
Ссылка на сообщение
Поделиться на других сайтах
21 минуту назад, aleksandrhristich сказал:

С этим вопросом вам лучше обратиться к автору плагину.

Да там тишина уже год, ни каких движений. Темболее раз он работал, чую нужно пару строк подправить.

Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Talory сказал:

ую нужно пару строк подправить

Правьте, в чем проблема. Да и плагин так себе, 90% ненужного мусора. Несколько строк jquery  и все остальное делается в css, занафига лезть в файлы скрипта, вообще непонятно

Изменено пользователем alex32
Ссылка на сообщение
Поделиться на других сайтах
21 минуту назад, alex32 сказал:

Правьте, в чем проблема. Да и плагин так себе, 90% ненужного мусора. Несколько строк jquery  и все остальное делается в css, занафига лезть в файлы скрипта, вообще непонятно

Если бы мог, не прибегал к помощи и не выкладывал бы "90% ненужного мусора" . Смена через css не то что мне нужно. 

Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

×
×
  • Создать...