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

Как сделать ссылки на темы форума читабельными, преобразование URL темы в ее название

Recommended Posts

http://wiki.iblink.ru/tips/read

 

Что это такое?

 

Допустим пользователь отправляет ссылку на какую то тему с вашего форума. В конечном виде ссылка будет выглядеть таким образом http://your.forum.ru/index.php?showtopic=1

 

согласитесь не очень эстетично. Тем более если форум тематический, то такие ссылки приходится давать очень часто, дабы отправить заблудившегося почитать «по теме».

 

Было бы здорово если вместо голого URL'а темы писалось название этой темы. И выглядело бы это эстетичнее, да и более информативнее.

Как сделать?

Для 2.1.х

 

А делать будем так:

 

Файл ./sources/classes/bbcode/class_bbcode_core.php, найти:

 

$show = $url['show'];

 

Добавить после:

       if ( strpos($show, $this->ipsclass->base_url) !== false )
       {
           $match = array();

           if ( preg_match("/showtopic=(\d+)/", $show, $match) OR preg_match("/&t=(\d+)/", $show, $match) ) {
               $show = $this->_getUrlLocalName('topics', $match[1]);
           }

           if ( preg_match("/showforum=(\d+)/", $show, $match) ) {
               $show = $this->_getUrlLocalName('forums', $match[1]);
           }

           if ( preg_match("/showuser=(\d+)/", $show, $match) ) {
               $show = $this->_getUrlLocalName('members', $match[1]);
           }

           if ( !$show ) {
               $show = $url['show'];
           }
       } else

 

Найти:

 

    /*-------------------------------------------------------------------------*/
   // Remove sessions in a nice way
   /*-------------------------------------------------------------------------*/

 

Добавить перед:

 

    function _getUrlLocalName( $from = '',  $for = '' )
   {
       // сколько раз разбирали ссылки
       static $parsedUrls;

       // проверка на лимит разбора ссылок, чем больше число, тем больше
       // вероятность, что злоумышленник может создать нагрузку на БД
       if ( ++$parsedUrls >= 10 ) return false;

       if ( !$from OR !$for ) return false;

       // оптимизация для ссылок на форумы/разделы. Берем имя не через запрос
       // к базе, а из кэша форумов.
       // Спасибо улетает к SAT
       if ( $from == 'forums' ) {
           return $this->ipsclass->cache['forum_cache'][ $for ]['name'];
       }

       // pk        - имя первичного ключа (id'ентификатора) в таблице
       // fieldName - имя поля в таблице, в котором хранится возвращаемое имя
       $pk         = 'id';     // в большинстве случаев имя первичного ключа - id
       $fieldName  = 'name';   // имя поля - name

       // однако в случае с темами у нас другие pk и fieldName
       if ( $from == 'topics' ) {
           $pk         = 'tid';   // имя первичного ключа - tid
           $fieldName  = 'title'; // имя поля с названием - title
       }

       $this->ipsclass->DB->simple_select( $fieldName, $from, $pk . "= '" . $for . "'" );
       $ci   = $this->ipsclass->DB->exec_query();
       $row  = $this->ipsclass->DB->fetch_row( $ci );

       if ( $fieldValue = $row[ $fieldName ] ) {
           return $fieldValue;
       }

       return false;
   }

 

классни мод! но думаю он не будет работать для 3.1.4 :(, может кто нибудь поможет и адаптирует этот мод для 3.1.4

 

или может уже существует для 3.1.4, подскажите если так ...

Share this post


Link to post
Share on other sites

Было бы здорово если вместо голого URL'а темы писалось название этой темы.

Разве это не стандартная функция форума в 3.x?

 

Или я что-то не понимаю....

 

или может уже существует для 3.1.4, подскажите если так ...

Настройки > System Settings > System > Поисковая оптимизация (SEO)

Share this post


Link to post
Share on other sites

Настройки > System Settings > System > Поисковая оптимизация (SEO)

а тут у меня только:

Search Engine Visits

-Enable Search Engine recognition?

-Log all Search Engine visits?

-Treat Search Engine as part of which group?

-Show Search Engine in the active users list?

-Show Search Engine as anonymous

 

Friendly URL Features

-direct to new friendly URL format?

-URL Type

-Use .htaccess mod_rewrite

-Incorrect Permalink Handling

 

Board Index

-Board Index Page Title

-Meta Description

-Meta Keywords

Который из них может такое сделать? :(

Share this post


Link to post
Share on other sites

Настройки > System Settings > System > Поисковая оптимизация (SEO)

Не, ТС хочет чтобы он вставлял безанкорную ссылку на тему, а она реплейсилась на ссылку с ее названием.

 

а ля

http://ipbskins.ru/forum/topic9047.html => Как сделать ссылки на темы форума читабельными, преобразование URL темы в ее название

  • Upvote 1

Share this post


Link to post
Share on other sites

ТС хочет чтобы он вставлял безанкорную ссылку на тему

Дошло.

 

Такого не видел, хотя странно, что не кто не сделал.

Share this post


Link to post
Share on other sites

@Ph-A, да, точно. но к сожалению для 3.2 :(

---------------

 

 

не, не совсем. он работает для других сайтов тоже.

 

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

Share this post


Link to post
Share on other sites

Вот что напридумал, для перегрузки метода отправки постов

Конечно, шаблон $urlTopicExp подходит только для типа чпу как на ipbskins, для каждого надо писать отдельно, немного подправить, пооптимизировать, и можно будет написать хук.

 

$urlTopicExp = preg_quote( $settings['board_url'], '#' ). '/topic(\d+)\.html';

if( preg_match_all( '#(?:^|\s)'.$urlTopicExp.'(?:[^"\s\[\]]*)#i', $_POST['Post'], $out ) )
{
$ids = array();

foreach( $out[1] as $key => $id )
{
	$ids[] = $id;
}

$register->DB()->build( array(  'select' => '*',
                                        'from'   => 'topics',
                                        'where'  => 'tid IN ('.implode( ',',$ids ).')'
) );

$registry->DB()->execute();

while( $row = $registry->DB()->fetch() )
{
	$pos = array_search( $row['tid'], $out[1] );

	if( $pos )
	{
		$ser  = trim( $out[0][$pos] );
		$rep  = '[url="'.$ser.'"]'.$row['title_seo'].'[/url]';

		$_POST['Post'] = str_replace( $ser, $rep, $_POST['Post'] );
	}
}
}


?>

  • Upvote 2

Share this post


Link to post
Share on other sites

и можно будет написать хук

будет хорошо если вы займетесь этим делом :)

Share this post


Link to post
Share on other sites

Прошу приветствовать - его величество Хук Link Replace.

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

Ссылки парсятя только на темы и форумы.

Настроен на урл вида /index.php?showtopic=1

Если используется чпу, нужно написать в файле хука регулярку ($urlExp) под свой тип.

 

Хук обновлен. Работает с текущем форматом ссылок на форуме, для этого править шаблоны в хуке больше не нужно.

hook_link_replace.xml

  • Upvote 3

Share this post


Link to post
Share on other sites

Test Report:

 

Ссылки не парсятся если добавляешь ссылку когда редактируешь пост :(

Share this post


Link to post
Share on other sites
Перегружает класс отправки постов, так что работает только при создание новой темы и добавления сообщений.

Share this post


Link to post
Share on other sites

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...