Talory 1 Опубликовано: 2 февраля 2022 Рассказать Опубликовано: 2 февраля 2022 (изменено) Всем привет. есть такой плагин 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&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", "" ); } Изменено 2 февраля 2022 пользователем Talory Цитата Ссылка на сообщение Поделиться на других сайтах
aleksandrhristich 107 Опубликовано: 2 февраля 2022 Рассказать Опубликовано: 2 февраля 2022 С этим вопросом вам лучше обратиться к автору плагину. Цитата Ссылка на сообщение Поделиться на других сайтах
Talory 1 Опубликовано: 2 февраля 2022 Рассказать Опубликовано: 2 февраля 2022 Автор 21 минуту назад, aleksandrhristich сказал: С этим вопросом вам лучше обратиться к автору плагину. Да там тишина уже год, ни каких движений. Темболее раз он работал, чую нужно пару строк подправить. Цитата Ссылка на сообщение Поделиться на других сайтах
alex32 942 Опубликовано: 2 февраля 2022 Рассказать Опубликовано: 2 февраля 2022 (изменено) 2 часа назад, Talory сказал: ую нужно пару строк подправить Правьте, в чем проблема. Да и плагин так себе, 90% ненужного мусора. Несколько строк jquery и все остальное делается в css, занафига лезть в файлы скрипта, вообще непонятно Изменено 2 февраля 2022 пользователем alex32 Цитата Ссылка на сообщение Поделиться на других сайтах
Talory 1 Опубликовано: 2 февраля 2022 Рассказать Опубликовано: 2 февраля 2022 Автор 21 минуту назад, alex32 сказал: Правьте, в чем проблема. Да и плагин так себе, 90% ненужного мусора. Несколько строк jquery и все остальное делается в css, занафига лезть в файлы скрипта, вообще непонятно Если бы мог, не прибегал к помощи и не выкладывал бы "90% ненужного мусора" . Смена через css не то что мне нужно. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.