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