Jackson 4 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 (изменено) Вот такой хак был найден для топа версии 9.3, но на 9.5 он не работает. (Помогите с решением проблемы..) Хак выводит в каждой категории топ новостей только той категории в которой вы находитесь сейчас. Учитываются также подкатегории, если таковы есть. Отлично смотрится при выводе в боковых колонках. Для работы хака правим файл /engine/modules/topnews.php if ($category_id) { if ($config['show_sub_cats']) $get_cats = get_sub_cats($category_id); else $get_cats = $category_id; if ($config['allow_multi_category']) $where_category = "category regexp '[[::]]'"; else { if ($config['show_sub_cats']) { $get_cats = str_replace ( "|", "','", $get_cats ); $where_category = "category IN ('" . $get_cats . "')"; } else $where_category = "category = '{$get_cats}'"; } } Дальше в запрос $db->query( "SELECT id, title, date, alt_name,short_story, category, flag FROM " . PREFIX . "_post WHERE approve='1' AND date >= '$this_month' - INTERVAL 12 MONTH AND date < '$this_month' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,9" ); Меняем на if ($where_category !='') $where_category ='AND '.$where_category; $db->query( "SELECT id, title, date, alt_name,short_story, category, flag FROM " . PREFIX . "_post WHERE approve='1' {$where_category} AND date >= '$this_month' - INTERVAL 12 MONTH AND date < '$this_month' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,9" ); И в финале осталось подправить запись и чтение с кеша. Итак меняем строчку $topnews = dle_cache( "topnews", $config['skin'] ); на $topnews = dle_cache( "topnews-".$category_id, $config['skin'] ); И также меняем запись в кеш. Вот эту строчку create_cache( "topnews", $topnews, $config['skin'] ); на create_cache( "topnews-".$category_id, $topnews, $config['skin'] );[/code] --------------------------------------------------------- thekyivtimes.com Изменено 18 февраля 2012 пользователем Jackson Ссылка на сообщение Поделиться на других сайтах
prikindel 255 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 должно работать, видимо что то не туда повставлял. в данном случае от версии код не зависит Ссылка на сообщение Поделиться на других сайтах
Jackson 4 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 Автор должно работать, видимо что то не туда повставлял. в данном случае от версии код не зависит Возможно.. Вот с первым куском кода возникли сложности, куда(после чего) его нужно вставлять? Сори я тут не нашёл спойлер, я скину целый модуль, ткните пальцем, куда нужно его поместить. <?php /* ===================================================== DataLife Engine - by SoftNews Media Group ----------------------------------------------------- http://dle-news.ru/ ----------------------------------------------------- Copyright (c) 2004,2012 SoftNews Media Group ===================================================== Данный код защищен авторскими правами ===================================================== Файл: topnews.php ----------------------------------------------------- Назначение: вывод рейтинговых статей ===================================================== */ if( ! defined( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); } $tpl->result['topnews'] = dle_cache( "topnews", $config['skin'], true ); if( $tpl->result['topnews'] === false ) { $this_month = date( 'Y-m-d H:i:s', $_TIME ); $tpl->load_template( 'topnews.tpl' ); if( strpos( $tpl->copy_template, "[xfvalue_" ) !== false OR strpos( $tpl->copy_template, "[xfgiven_" ) !== false ) { $xfound = true; $xfields = xfieldsload();} else $xfound = false; $db->query( "SELECT id, date, short_story, xfields, title, category, alt_name, flag FROM " . PREFIX . "_post WHERE approve=1 AND date >= '$this_month' - INTERVAL 1 MONTH AND date < '$this_month' ORDER BY rating DESC, comm_num DESC, news_read DESC, date DESC LIMIT 0,10" ); while ( $row = $db->get_row() ) { $row['date'] = strtotime( $row['date'] ); if( ! $row['category'] ) { $my_cat = "---"; $my_cat_link = "---"; } else { $my_cat = array (); $my_cat_link = array (); $cat_list = explode( ',', $row['category'] ); if( count( $cat_list ) == 1 ) { $my_cat[] = $cat_info[$cat_list[0]]['name']; $my_cat_link = get_categories( $cat_list[0] ); } else { foreach ( $cat_list as $element ) { if( $element ) { $my_cat[] = $cat_info[$element]['name']; if( $config['allow_alt_url'] == "yes" ) $my_cat_link[] = "<a href=\"" . $config['http_home_url'] . get_url( $element ) . "/\">{$cat_info[$element]['name']}</a>"; else $my_cat_link[] = "<a href=\"$PHP_SELF?do=cat&category={$cat_info[$element]['alt_name']}\">{$cat_info[$element]['name']}</a>"; } } $my_cat_link = implode( ', ', $my_cat_link ); } $my_cat = implode( ', ', $my_cat ); } $row['category'] = intval( $row['category'] ); if( $config['allow_alt_url'] == "yes" ) { if( $row['flag'] and $config['seo_type'] ) { if( $row['category'] and $config['seo_type'] == 2 ) { $full_link = $config['http_home_url'] . get_url( $row['category'] ) . "/" . $row['id'] . "-" . $row['alt_name'] . ".html"; } else { $full_link = $config['http_home_url'] . $row['id'] . "-" . $row['alt_name'] . ".html"; } } else { $full_link = $config['http_home_url'] . date( 'Y/m/d/', $row['date'] ) . $row['alt_name'] . ".html"; } } else { $full_link = $config['http_home_url'] . "index.php?newsid=" . $row['id']; } $tpl->set( '{category}', $my_cat ); $tpl->set( '{link-category}', $my_cat_link ); if( dle_strlen( $row['title'], $config['charset'] ) > 55 ) $title = dle_substr( $row['title'], 0, 55, $config['charset'] ) . " ..."; else $title = $row['title']; $tpl->set( '{title}', strip_tags( stripslashes( $title ) ) ); $tpl->set( '{link}', $full_link ); $row['short_story'] = stripslashes( $row['short_story'] ); if( $user_group[$member_id['user_group']]['allow_hide'] ) $row['short_story'] = str_ireplace( "[hide]", "", str_ireplace( "[/hide]", "", $row['short_story']) ); else $row['short_story'] = preg_replace ( "#\[hide\](.+?)\[/hide\]#ims", "<div class=\"quote\">" . $lang['news_regus'] . "</div>", $row['short_story'] ); if (stripos ( $tpl->copy_template, "{image-" ) !== false) { $images = array(); preg_match_all('/(img|src)=("|\')[^"\'>]+/i', $row['short_story'], $media); $data=preg_replace('/(img|src)("|\'|="|=\')(.*)/i',"$3",$media[0]); foreach($data as $url) { $info = pathinfo($url); if (isset($info['extension'])) { $info['extension'] = strtolower($info['extension']); if (($info['extension'] == 'jpg') || ($info['extension'] == 'jpeg') || ($info['extension'] == 'gif') || ($info['extension'] == 'png')) array_push($images, $url); } } if ( count($images) ) { $i=0; foreach($images as $url) { $i++; $tpl->copy_template = str_replace( '{image-'.$i.'}', $url, $tpl->copy_template ); $tpl->copy_template = str_replace( '[image-'.$i.']', "", $tpl->copy_template ); $tpl->copy_template = str_replace( '[/image-'.$i.']', "", $tpl->copy_template ); } } $tpl->copy_template = preg_replace( "#\[image-(.+?)\](.+?)\[/image-(.+?)\]#is", "", $tpl->copy_template ); $tpl->copy_template = preg_replace( "#\\{image-(.+?)\\}#i", "{THEME}/dleimages/no_image.jpg", $tpl->copy_template ); } if ( preg_match( "#\\{text limit=['\"](.+?)['\"]\\}#i", $tpl->copy_template, $matches ) ) { $count= intval($matches[1]); $row['short_story'] = str_replace( "</p><p>", " ", $row['short_story'] ); $row['short_story'] = strip_tags( $row['short_story'], "<br>" ); $row['short_story'] = trim(str_replace( "<br>", " ", str_replace( "<br />", " ", str_replace( "\n", " ", str_replace( "\r", "", $row['short_story'] ) ) ) )); if( $count AND dle_strlen( $row['short_story'], $config['charset'] ) > $count ) { $row['short_story'] = dle_substr( $row['short_story'], 0, $count, $config['charset'] ); if( ($temp_dmax = dle_strrpos( $row['short_story'], ' ', $config['charset'] )) ) $row['short_story'] = dle_substr( $row['short_story'], 0, $temp_dmax, $config['charset'] ); } $tpl->set( $matches[0], $row['short_story'] ); } else $tpl->set( '{text}', $row['short_story'] ); // Обработка дополнительных полей if( $xfound ) { $xfieldsdata = xfieldsdataload( $row['xfields'] ); foreach ( $xfields as $value ) { $preg_safe_name = preg_quote( $value[0], "'" ); if ( $value[6] AND !empty( $xfieldsdata[$value[0]] ) ) { $temp_array = explode( ",", $xfieldsdata[$value[0]] ); $value3 = array(); foreach ($temp_array as $value2) { $value2 = trim($value2); $value2 = str_replace("'", "'", $value2); if( $config['allow_alt_url'] == "yes" ) $value3[] = "<a href=\"" . $config['http_home_url'] . "xfsearch/" . urlencode( $value2 ) . "/\">" . $value2 . "</a>"; else $value3[] = "<a href=\"$PHP_SELF?do=xfsearch&xf=" . urlencode( $value2 ) . "\">" . $value2 . "</a>"; } $xfieldsdata[$value[0]] = implode(", ", $value3); unset($temp_array); unset($value2); unset($value3); } if( empty( $xfieldsdata[$value[0]] ) ) { $tpl->copy_template = preg_replace( "'\\[xfgiven_{$preg_safe_name}\\](.*?)\\[/xfgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[xfnotgiven_{$preg_safe_name}]", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[/xfnotgiven_{$preg_safe_name}]", "", $tpl->copy_template ); } else { $tpl->copy_template = preg_replace( "'\\[xfnotgiven_{$preg_safe_name}\\](.*?)\\[/xfnotgiven_{$preg_safe_name}\\]'is", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[xfgiven_{$preg_safe_name}]", "", $tpl->copy_template ); $tpl->copy_template = str_replace( "[/xfgiven_{$preg_safe_name}]", "", $tpl->copy_template ); } $tpl->copy_template = str_replace( "[xfvalue_{$preg_safe_name}]", stripslashes( $xfieldsdata[$value[0]] ), $tpl->copy_template ); } } // Обработка дополнительных полей $tpl->compile( 'topnews' ); } $tpl->clear(); $db->free(); create_cache( "topnews", $tpl->result['topnews'], $config['skin'], true ); } ?> Ссылка на сообщение Поделиться на других сайтах
prikindel 255 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 сделай все по инструкции. там все предельно ясно расписано Ссылка на сообщение Поделиться на других сайтах
Jackson 4 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 Автор сделай все по инструкции. там все предельно ясно расписано видимо я слеп.. но я в упор не вижу, куда нужно поставить этот код if ($category_id) { if ($config['show_sub_cats']) $get_cats = get_sub_cats($category_id); else $get_cats = $category_id; if ($config['allow_multi_category']) $where_category = "category regexp '[[::]]'"; else { if ($config['show_sub_cats']) { $get_cats = str_replace ( "|", "','", $get_cats ); $where_category = "category IN ('" . $get_cats . "')"; } else $where_category = "category = '{$get_cats}'"; } } Ссылка на сообщение Поделиться на других сайтах
prikindel 255 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 это надо вставить ДО mysql запроса к базе кроме того ты не вставил куда надо проверку наличия кэша $topnews = dle_cache( "topnews-".$category_id, $config['skin'] ); в самом первом посте все расписано как надо сделал бы по инструкции - был бы в шоколаде) Ссылка на сообщение Поделиться на других сайтах
Jackson 4 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 (изменено) Автор Я скинул не правЛЕнный модуль(чистый), для того, чтобы мне подсказали, куда надо подставить этот код (после какой строчки): if ($category_id) { if ($config['show_sub_cats']) $get_cats = get_sub_cats($category_id); else $get_cats = $category_id; if ($config['allow_multi_category']) $where_category = "category regexp '[[::]]'"; else { if ($config['show_sub_cats']) { $get_cats = str_replace ( "|", "','", $get_cats ); $where_category = "category IN ('" . $get_cats . "')"; } else $where_category = "category = '{$get_cats}'"; } } По остальному у меня вопросов нет. Изменено 18 февраля 2012 пользователем Jackson Ссылка на сообщение Поделиться на других сайтах
prikindel 255 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 это надо вставить ДО mysql запроса к базе Ссылка на сообщение Поделиться на других сайтах
Jackson 4 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 Автор это надо вставить ДО mysql запроса к базе Ну, значит он таки не работает на 9.5, потому-что я так и делал..Вот, что получается в итоге.. http://uaimage.com/image/540e6ae1 Ссылка на сообщение Поделиться на других сайтах
prikindel 255 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 (изменено) насколько я вижу по ошибке в запросе, проблема здесь if ($config['allow_multi_category']) $where_category = "category regexp '[[::]]'"; честно говоря, я не совсем представляю, как должна работать эта регулярка regexp '[[::]]' там внутри скобок точно ничего не было больше? Изменено 18 февраля 2012 пользователем prikindel Ссылка на сообщение Поделиться на других сайтах
Jackson 4 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 (изменено) Автор так и есть, посмотрел этот хак на разных сайтах, и вот что нашёл if ($config['allow_multi_category']) $where_category = "category regexp '[[:<:]](" . $get_cats . ")[[:>:]]'"; Только не понятно, почему именно этот кусок кода сожрало.. видимо из-за этого < >[/code].. Изменено 18 февраля 2012 пользователем Jackson Ссылка на сообщение Поделиться на других сайтах
prikindel 255 Опубликовано: 18 февраля 2012 Рассказать Опубликовано: 18 февраля 2012 вот теперь все встало на свои места! 1 Ссылка на сообщение Поделиться на других сайтах
vital8 0 Опубликовано: 12 апреля 2013 Рассказать Опубликовано: 12 апреля 2013 Попробовал этот полезный хак поставить в версии 9.7 - не действует, словно в topnews.php никаких изменеий не производилось. Может подскажет кто, на что хдесь нужно обратить внимание в связи с различиями версий 9.5 и 9.7 ? Ссылка на сообщение Поделиться на других сайтах
vital8 0 Опубликовано: 13 апреля 2013 Рассказать Опубликовано: 13 апреля 2013 (изменено) Все внимательно сделал вот из этого кода _http://moduli-dle.shtepina.com.ua/11535-vyvod-v-kazhdoy-kategorii-svoy-top-novostey.html и плагин заработал в DLE9.7 Но вот еще бы хотелось - чтоб хак выводил новости не только со своей но и с вложенных категорий, как это анонсировал автор хака. То есть, чтобы переключить в админке на вывод в категории только своих новостей, а хак в боковой колонке выводил новости и своей и вложенных категорий. К примеру: в основной колонке выводится информация о литературном сообществе, а в боковой колонке выводятся популярные новости из категорий членов этого сообщества. Это можно сделать? Изменено 13 апреля 2013 пользователем vital8 Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас