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

Нужен специалист для переделки модуля - предыдущая-слудующая новость


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

Ищу грамотного специалиста для переделки готового модуля для полной новости - предыдущая-следующая новость.

Модуль нужно сделать на API + внести несколько изменений.

Пишите в icq 332463772 или на почту blagoy на сервере маил.ру

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

Специалиста нашел, модуль он написал, но не пофиксив баги испарился.

ОСТОРОЖНО: Кинул человек с ником 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] . '">&laquo; предыдущая новость</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] . '">следующая новость &raquo;</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

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

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

include_once ENGINE_DIR . '/classes/parse.class.php';  $parse = new ParseFilter( );  $news_name = $parse->process( $_REQUEST['news_name'] );

через этот модуль можно сломать сайт. Правда не так легко, как с той уязвимостью, но не сильно сложнее для разбирающихся

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

include_once ENGINE_DIR . '/classes/parse.class.php';  $parse = new ParseFilter( );  $news_name = $parse->process( $_REQUEST['news_name'] );

через этот модуль можно сломать сайт. Правда не так легко, как с той уязвимостью, но не сильно сложнее для разбирающихся

Интересно в чем же тут уязвимость ;) Стандартный парсер DLE

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

Стандартный парсер DLE

только есть один нюанс - стандартный парсер не предназначен для фильтрации.

можно сделать mysql-inj.
Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

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

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

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

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

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