Решено: Вывод тем с форума IPB, проблемы кодировки.

Главные вкладки

Аватар пользователя undcon undcon 21 марта 2008 в 21:58

Здравствуйте, есть код вывода последних сообщений с форума ipb версии 2.3.4

<?

$posts = 10;
$showtopiclength = 1;
$topiclength = 100;
$forumexclude = "88,28,31,22,65";
$datedisplay = 'd.n.Y';
$timedisplay = 'H:i:s';

require "ips_kernel/class_db_mysql.php";
require "conf_global.php";

$db = new db_driver_mysql;
$db->obj['sql_database']     = $INFO['sql_database'];
$db->obj['sql_user']         = $INFO['sql_user'];
$db->obj['sql_pass']         = $INFO['sql_pass'];
$db->obj['sql_host']         = $INFO['sql_host'];
$db->obj['sql_tbl_prefix']   = $INFO['sql_tbl_prefix'];
$db->obj['mysql_codepage']   = $INFO['mysql_codepage'];

$db->connect();

$getposts = $db->query("SELECT posts, last_poster_name, last_poster_id, title, tid, forum_id, last_post FROM ibf_topics WHERE (forum_id NOT IN ($forumexclude)) ORDER BY last_post DESC LIMIT $posts");

while ($post = $db->fetch_row($getposts)) {
$post[full_title] = $post[title];
if ($showtopiclength == 1 AND strlen($post[full_title]) > $topiclength) {
        $post[short_title] = substr($post[full_title],0,$topiclength);
        $post[short_title] = $post[short_title]."...";
}
else {
        $post[short_title] = $post[full_title];
}

$posted_on = date($datedisplay, $post[last_post]);
$today_date = date($datedisplay, time());

If ($posted_on == $today_date) {
        $datefield = "Сегодня";
        $datefield = $datefield . ", " . date($timedisplay, $post[last_post]);
}

elseif (date('d F Y',strtotime("-1 day")) == $posted_on) {
        $datefield = "Вчера";
        $datefield = $datefield . ", " . date($timedisplay, $post[last_post]);
}

else {
        $datefield = $posted_on;
}

echo

<<<EOD
<a href="$INFO[board_url]/index.php?showtopic=$post[tid]&view=getnewpost" target="_blank"><img src="http://tulagrad.su/img/message.gif" border=0><font face="Tahoma" size="1" color="#000000">"$post[short_title]"</font></a><br><font face="Tahoma" size="1" color="#000000">Автор: <a href="$INFO[board_url]/index.php?showuser=$post[last_poster_id]" target="_blank"></font><b><font face="Tahoma" size="1" color="#000000">$post[last_poster_name]</font></b></a><br><font face="Tahoma" size="1" color="#000000">$datefield, Ответов: <b>$post[posts]</b></font><br>
</font>
EOD;
}

?>

Drupal 6.1 выводит в неправильной кодировке

Можно это как-то исправить?

Комментарии

Аватар пользователя Akzhan Akzhan 21 марта 2008 в 22:40

Надо выполнять запрос над созданным драйвером!

Я не знаю IPB DB API, но видимо, так:

<?php
$db = new db_driver_mysql;

// setup

$db->connect();
$db->query('SET NAMES utf8');
?>

Если IPB тупо не даст сделать по-человечески, то конвертите руками каждый столбец.

<?php
$normal_title = iconv('CP1251', 'UTF-8', $post['title']);
?>

Аватар пользователя korol korol 22 марта 2008 в 1:58

опишите пожалуйста в комментарии конечный код для вывода тем форума ipb в блок

и может кто знает как выводить темы для версии 5.7 или общую для 5.х

Буду премного благодарен.

Аватар пользователя undcon undcon 22 марта 2008 в 16:54
<?

$posts = 10;
$showtopiclength = 1;
$topiclength = 100;
$forumexclude = "88,28,31,22,65";
$datedisplay = 'd.n.Y';
$timedisplay = 'H:i:s';

require "ips_kernel/class_db_mysql.php";
require "conf_global.php";

$db = new db_driver_mysql;
$db->obj['sql_database']     = $INFO['sql_database'];
$db->obj['sql_user']         = $INFO['sql_user'];
$db->obj['sql_pass']         = $INFO['sql_pass'];
$db->obj['sql_host']         = $INFO['sql_host'];
$db->obj['sql_tbl_prefix']   = $INFO['sql_tbl_prefix'];
$db->obj['mysql_codepage']   = $INFO['mysql_codepage'];

$db->connect();
$db->query('SET NAMES utf8');
$getposts = $db->query("SELECT posts, last_poster_name, last_poster_id, title, tid, forum_id, last_post FROM ibf_topics WHERE (forum_id NOT IN ($forumexclude)) ORDER BY last_post DESC LIMIT $posts");

while ($post = $db->fetch_row($getposts)) {
$post[full_title] = $post[title];
if ($showtopiclength == 1 AND strlen($post[full_title]) > $topiclength) {
        $post[short_title] = substr($post[full_title],0,$topiclength);
        $post[short_title] = $post[short_title]."...";
}
else {
        $post[short_title] = $post[full_title];
}

$posted_on = date($datedisplay, $post[last_post]);
$today_date = date($datedisplay, time());

If ($posted_on == $today_date) {
        $datefield = "Сегодня";
        $datefield = $datefield . ", " . date($timedisplay, $post[last_post]);
}

elseif (date('d F Y',strtotime("-1 day")) == $posted_on) {
        $datefield = "В";
        $datefield = $datefield . ", " . date($timedisplay, $post[last_post]);
}

else {
        $datefield = $posted_on;
}

echo

<<<EOD
<a href="$INFO[board_url]/index.php?showtopic=$post[tid]&view=getnewpost" target="_blank"><img src="http://tulagrad.su/img/message.gif" border=0><font face="Tahoma" size="1" color="#000000">"$post[short_title]"</font></a><br><font face="Tahoma" size="1" color="#000000">Автор: <a href="$INFO[board_url]/index.php?showuser=$post[last_poster_id]" target="_blank"></font><b><font face="Tahoma" size="1" color="#000000">$post[last_poster_name]</font></b></a><br><font face="Tahoma" size="1" color="#000000">$datefield, Ответов: <b>$post[posts]</b></font><hr>
</font>
EOD;
}

?>

Этот код нужно сохранить в файле в дириктории с форумом а потом инклюдом подключить его в drupal

например:

<?php
include("forums/export.php");
?>
Аватар пользователя Akzhan Akzhan 23 марта 2008 в 3:28

Как раз наоборот, Drupal настроен на Unicode.

А вот IPB в России чаще всего настраивают на кодировку cp1251 (кириллица, windows).