blagoy_vip 7 Опубликовано: 12 ноября 2009 Рассказать Опубликовано: 12 ноября 2009 Ищу грамотного специалиста для переделки готового модуля для полной новости - предыдущая-следующая новость. Модуль нужно сделать на API + внести несколько изменений. Пишите в icq 332463772 или на почту blagoy на сервере маил.ру Цитата Ссылка на сообщение Поделиться на других сайтах
blagoy_vip 7 Опубликовано: 17 ноября 2009 Рассказать Опубликовано: 17 ноября 2009 (изменено) Автор Специалиста нашел, модуль он написал, но не пофиксив баги испарился. ОСТОРОЖНО: Кинул человек с ником ExtDev icq 681216, extdev@mail.ru, Z163868593187. Прошу знающим людям помочь, заодно можете забирать из паблика готовый мод. <?php if ( ! defined ( 'DATALIFEENGINE' ) ) { die( "Hacking attempt!" ); } function generateLink( $id, $cat, $alt, $date ) { global $config; if( $config['allow_alt_url'] == "yes" ) { if( $config['seo_type'] ) { if( $config['seo_type'] == 2 ) { return $config['http_home_url'] . $cat . '/' . $id . "-" . $alt . ".html"; } else { return $config['http_home_url'] . $id . "-" . $alt . ".html"; } } else { return $config['http_home_url'] . date( 'Y/m/d/', strtotime( $date ) ) . $alt . ".html"; } } else { return $config['http_home_url'] . "index.php?newsid=" . $mkp['id']; } } if ( $_REQUEST['year'] and $_REQUEST['month'] and $_REQUEST['day'] and $_REQUEST['news_name'] ) { include_once ENGINE_DIR . '/classes/parse.class.php'; $parse = new ParseFilter( ); $news_name = $parse->process( $_REQUEST['news_name'] ); $sql = $db->super_query( "SELECT id FROM " . PREFIX . "_post WHERE alt_name = '$news_name'" ); $id = $sql['id']; } else $id = intval( $_REQUEST['newsid'] ); if ( substr_count( $category, ',' ) > 0 ) { $tmp = explode( ',', $category ); $i = 0; foreach ( $tmp as $cid ) { $cid = intval( $cid ); if ( $i == 0 ) { $catsql .= "category = '$cid' "; } else { $catsql .= "OR category = '$cid' "; } $i ++; } } elseif ( ! $category ) $catsql = "category = '" . $category_id . "'"; else $catsql = "category = '" . intval( $category ) . "'"; $id2 = $id + 20; $db->query( "SELECT id, title, category, alt_name, date FROM " . PREFIX . "_post WHERE $catsql AND approve = '1' ORDER BY date ASC LIMIT 0," . $id2 ); while ( $row = $db->get_row( ) ) { $cc = count( $dbrow ); $dbrow[$cc][1] = $row['id']; $dbrow[$cc][2] = $row['title']; $dbrow[$cc][3] = $row['category']; $dbrow[$cc][4] = $row['alt_name']; $dbrow[$cc][5] = $row['date']; if ( $row['id'] == $id and ! $this_id ) $this_id = $cc; } @sort( $dbrow ); $ccc = count( $dbrow ) - 1; $minus = $this_id - 1; $plus = $this_id + 1; if ( $dbrow[$minus][1] ) { if ( $dbrow[0][1] != $id ) $prev_link = '<a href="' . generateLink( $dbrow[$minus][1], $cat_info[$dbrow[$minus][3]]['alt_name'], $dbrow[$minus][4], $dbrow[$minus][5] ) . '" title="' . $dbrow[$minus][2] . '">« предыдущая новость</a>'; else $prev_link = FALSE; } if ( $dbrow[$plus][1]) { if ( $dbrow[$ccc][1] != $id ) $next_link = '<a href="' . generateLink( $dbrow[$plus][1], $cat_info[$dbrow[$plus][3]]['alt_name'], $dbrow[$plus][4], $dbrow[$plus][5] ) . '" title="' . $dbrow[$plus][2] . '">следующая новость »</a>'; else $next_link = FALSE; } if ( $prev_link and $next_link ) echo "$prev_link | $next_link"; else echo "$prev_link $next_link"; ?> -- Установка 1) Копируем файл newsnavig.php в /engine/modules/ 2) Открываем /templates/Шаблон/fullstory.tpl В любое место вставляем (любой из вариантов): а) Навигация выводится для новостей из текущей категории: {include file="engine/modules/newsnavig.php"} б) Навигация выводится для категории с ID - X: {include file="engine/modules/newsnavig.php?category=X"} в) Навигация выводится для категорий (сколько угодно) с ID - A, B, C: {include file="engine/modules/newsnavig.php?category=A,B,C"}Меня интересовал вариант В, но начал с тестирования варианта А, и сращу обнаружились баги. Жму первую новость из категории, перехожу новостей 5, нажимая на ссылку СЛЕДУЮЩАЯ НОВОСТЬ, пока не попадаю на новость с датой 2009-10-20 00:51:25 после неё должна идти новость 2009-10-19 00:06:03 но идет 2009-10-19 00:05:42 Такой же баг встречается и в других категориях, в новостях где дата незначительно различается, я думаю в этом дело. Изменено 17 ноября 2009 пользователем blagoy_vip Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 18 ноября 2009 Рассказать Опубликовано: 18 ноября 2009 include_once ENGINE_DIR . '/classes/parse.class.php'; $parse = new ParseFilter( ); $news_name = $parse->process( $_REQUEST['news_name'] ); через этот модуль можно сломать сайт. Правда не так легко, как с той уязвимостью, но не сильно сложнее для разбирающихся Цитата Ссылка на сообщение Поделиться на других сайтах
CpaHb 0 Опубликовано: 25 ноября 2009 Рассказать Опубликовано: 25 ноября 2009 include_once ENGINE_DIR . '/classes/parse.class.php'; $parse = new ParseFilter( ); $news_name = $parse->process( $_REQUEST['news_name'] ); через этот модуль можно сломать сайт. Правда не так легко, как с той уязвимостью, но не сильно сложнее для разбирающихся Интересно в чем же тут уязвимость Стандартный парсер DLE Цитата Ссылка на сообщение Поделиться на других сайтах
blaga 39 Опубликовано: 26 ноября 2009 Рассказать Опубликовано: 26 ноября 2009 как я понял тут недостаточная проверка на спец символы. можно сделать mysql-inj. Цитата Ссылка на сообщение Поделиться на других сайтах
Al-x 7 Опубликовано: 26 ноября 2009 Рассказать Опубликовано: 26 ноября 2009 Стандартный парсер DLE только есть один нюанс - стандартный парсер не предназначен для фильтрации. можно сделать mysql-inj. Цитата Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Присоединяйтесь к обсуждению
Вы можете опубликовать сообщение сейчас, а зарегистрироваться позже. Если у вас есть аккаунт, войдите в него для написания от своего имени.