Jump to content
Дизайн и модификация IPS Community IPBSkinsBETA
Search In
  • More options...
Find results that contain...
Find results in...
Sign in to follow this  
kanv1s

IPS Converters - Links - phpBB - разные ссылки [IPB 3.4.6]

Recommended Posts

Добрый день.

 

Ситуация следующая:

После слияния форума на phpbb 3.0.9 c действующим форумов на ipb 3.4.6 никак не получается перенастроить ссылки с ipb форума на phpbb

 

Есть такая ссылка: /forum/viewtopic.php?f=37&t=1852

Тема на ipb доступна по ссылке: /topic/9131

 

В файле viewtopic.php ссылка явно другого формата:

	$row = $DB->buildAndFetch( array( 'select' => 'ipb_id', 'from' => 'conv_link_posts', 'where' => "foreign_id=".intval(ipsRegistry::$request['p'])." AND type='posts' AND app='".$app['app_id']."'" ) );
$topic = $DB->buildAndFetch( array( 'select' => 'topic_id', 'from' => 'posts', 'where' => "pid='".$row['ipb_id']."'" ) );

$registry->getClass('output')->silentRedirect(IPB_URL.'/index.php?showtopic='.$topic['topic_id'].'&view=findpost&p='.$row['ipb_id'], '', TRUE);

 

Были предположения, что дяденькам писавшим это виднее, а всему виной url'ы самого форума (/index.html - IP Content, а сам форум доступен по адресу /index), но стандартизация не помогла.

 

Можете что нибудь посоветовать?

Share this post


Link to post

В файле viewtopic.php ссылка явно другого формата:

Это редирект на пост. Для простых ссылок тем редирект находится выше.

А что конкретно не получается настроить? Если старый форум находился в папке /forum/ а прежний находится в корне домена, то нужно:

- либо создать папку /forum/ и закинуть туда файлы,

- либо загрузить файлы в корне форума и в .htaccess после RewriteEngine On добавить реврайт:

 

RewriteRule ^forum/(memberlist|viewforum|viewtopic)\.php $1.php [L]

Share this post


Link to post

Ошибка 500.

 

/forum/viewtopic.php?f=37&t=7183 - переходит по такой, а нужно что бы переходил по /viewtopic.php?f=37&t=7183

в htaccess тыкался, не получалось, ошибка 500

Share this post


Link to post
в htaccess тыкался, не получалось, ошибка 500

Реврайт немного подправил. Попробуйте еще раз.

 

 

/forum/viewtopic.php?f=37&t=7183 - переходит по такой, а нужно что бы переходил по /viewtopic.php?f=37&t=7183

Так по какой, с /форумом/ или без? Если без форума, тогда ничего добавлять в htaccess не нужно, просто закиньте файлы в корень форума и настройте config.php

Share this post


Link to post

Работает. Большое спасибо!!

Share this post


Link to post

Обнаружились ссылки на посты вида /viewtopic.php?p=XXXXX#XXXXX - очевидно, для какой-то старой phpBB это было.

 

Но как эта ссылка должна выглядеть для IPB 3.4.x ?

 

/index.php?showtopic=YYYYY&p=XXXXX - не подходит поскольку YYYYY взять негде.

 

phpBB очевидно умела находить топик по одному только посту из него.

А вот как для IPB сделать такую же ссылку - чтобы она вывела топик с постом, не зная номер топика?

Share this post


Link to post
А вот как для IPB сделать такую же ссылку - чтобы она вывела топик с постом, не зная номер топика?

В IPB 3 в стандартном ЧПУ для вывода ссылок на посты в теме используются ссылки вида:

 

forum.ru/topic/1-tema/?p=22

Где 1 - ид темы, tema - транслитное название темы, 22 - ид сообщения.

Edited by Strategius

Share this post


Link to post
Где 1 - ид темы,
Ну вот про это и вопрос - умеет ли IPB находить ID темы самостоятельно?

Ведь по идее ID постов уникальны…

Share this post


Link to post

В смысле сам умеет? Ссылку на пост можно получить, нажав на кнопку Поделиться в углу поста. Вид ЧПУ также при желании можно поменять.

Share this post


Link to post
Ссылку на пост можно получить, нажав на кнопку Поделиться в углу поста.
Ну а найти то как этот самый пост???

Вот есть у меня только номер поста. Номера топика - нету!

Как мне написать в адресной строке браузера номер поста, чтобы IPBoard вывел топик и этот пост?

Share this post


Link to post
Как мне написать в адресной строке браузера номер поста, чтобы IPBoard вывел топик и этот пост?

Никак, и не понимаю, зачем это нужно. Можно упростить вид ЧПУ, чтобы ссылка на тему приняла вид forum.ru/topic/ID

 

admin/applications/forum/extensions/furlTemplates.php

 

Найти

 

'out'           => array( '#showtopic=(.+?)(\#|&|$)#i', 'topic/$1-#{__title__}/$2' ),
'in'            => array( 'regex'   => '#^/topic/(\d+?)-#i',

Заменить на

 

'out'           => array( '#showtopic=(.+?)(\#|&|$)#i', 'topic/$1/$2' ),
'in'            => array( 'regex'   => '#^/topic/(\d+?)(/|$)#i',

Обновить кеш FURL.

Share this post


Link to post
Никак, и не понимаю, зачем это нужно.
Это нужно затем что ссылки с внешних ресурсов были сделаны во времена когда у нас было phpBB.

phpBB спокойно сама находит и раздел и топик по одному только ID поста.

Можно вот написать /viewtopic.php?p=XXXXX - и всё будет отлично.

Хотя обычно пишут полную запись - /viewtopic.php?t=YYY&p=XXXXX, но это не обязательно.

 

IPB ведь тоже как и phpBB использует уникальные ID постов для всей базы.

Руками покопавшись в базе - можно узнать по номеру поста - номер топика: SELECT `topic_id` FROM `ibf_posts` WHERE `pid` = XXXXX;

Можно в принципе написать PHP-скрипт для поиска номера топика и формирования команды showtopic…

Но может есть уже готовая возможность???

Share this post


Link to post
Но может есть уже готовая возможность???

Не встречал, но вообще идея интересная.

Edited by Strategius

Share this post


Link to post

Написал вот php-скрипт для имитации /viewtopic.php?p=XXXXX

Но всё-же у меня такое чувство что должен быть какой-то штатный ключ для адресной строки в IPB.

 

<?php

// wrapper viewtopic2showtopic v1.0 © f2065
// Выводит топик с постом по номеру указанного поста.
// 
// Это надо для случаев когда номер поста известен, а номер топика - нет.
// Например для работы со старыми ссылками от phpBB, viewtopic.php?p=XXXXX (без номеров топика).
//
// По сути - скрипт ссылку вида /viewtopic.php?p=XXXXX перенаправляет в /index.php?showtopic=YYYYY&p=XXXXX

include("conf_global.php");

$pid = (int)$_GET['p'];

$dbconn = mysql_connect($INFO['sql_host'], $INFO['sql_user'], $INFO['sql_pass']);
$db = mysql_select_db($INFO['sql_database']);
$object_tid = mysql_query('SELECT topic_id FROM '.$INFO['sql_tbl_prefix'].'posts WHERE pid = '.$pid);
$tid = mysql_result($object_tid, 0);
mysql_close($dbconn);

if (!$tid)
{
header('Content-type: text/html; charset=UTF-8');
echo "Post ID ".$pid." not found in database (or other error).<br>";
echo "<a href='javascript:history.back();'>Return to back page</a>, <a href='index.php'>Goto main page</a>";
}
else
{
header("Location: index.php?showtopic=".$tid."&p=".$pid);
}
exit;

?>

Share this post


Link to post

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×
×
  • Create New...