1

Topic: Pan Redirect - переадресация страниц форума

Расширение Pan Redirect выполняет запланированную постоянную переадресацию тем с одной страницы на другую. Это расширение создано для удобства, чтобы не прописывать каждый раз ссылки в .hteccess. Это может быть полезно и в том случае, когда на форуме появились дублирующие страницы и их нужно объединить.

Исходный код расширения Pan Redirect для тестирования:

manifest.xml

Spoiler
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE extension SYSTEM "ext-1.0.dtd">
<!--
/**
 * Pan Redirect
 * @copyright Copyright (C) 2015 PunBB
 * @package pan_redirect
 * @website https://punbb.info
 */
-->
<extension engine="1.0">
  <id>pan_redirect</id>
  <title>Pan Redirect</title>
  <description>(redirect).</description>
  <author>PunBB</author>
  <version>0.2</version>
  <minversion>1.4.0</minversion>
  <maxtestedon>1.4.2</maxtestedon>

    <install><![CDATA[ 
    if (!$forum_db->table_exists('pan_links'))
    {
      $schema = array(
        'FIELDS'  => array(
          'id'  => array(
            'datatype'      => 'SERIAL',
            'allow_null'    => false
          ),
          'title'  => array(
            'datatype'  => 'VARCHAR(255)',
            'allow_null'    => false
          ),
          'old_url' => array(
            'allow_null'    => false,
            'datatype'      => 'VARCHAR(255)'
          ),
          'new_url' => array(
            'allow_null'    => false,
            'datatype'      => 'VARCHAR(255)'
          )
        ),
        'PRIMARY KEY'  => array('id'),
      );
      $forum_db->create_table('pan_links', $schema);
    }
  
    ]]></install> 
        
    <uninstall><![CDATA[ 
    
$forum_db->drop_table('pan_links');
  
    ]]></uninstall>
    
<hooks>
  
    <hook id="ca_fn_generate_admin_menu_new_sublink"><![CDATA[
    
if (FORUM_PAGE_SECTION == 'management') 
{
  $forum_page['admin_submenu']['pan_redirect'] = '<li class="'.((FORUM_PAGE == 'admin-redirect-links') ? 'active' : 'normal').((empty($forum_page['admin_submenu'])) ? ' first-item' : '').'"><a href="'.forum_link($forum_url['pan_redirect']).'">Redirect</a></li>';
}    
    ]]></hook>
    
    <hook id="co_modify_url_scheme"><![CDATA[

if (file_exists($ext_info['path'].'/url/'.$forum_config['o_sef'].'.php'))
  require $ext_info['path'].'/url/'.$forum_config['o_sef'].'.php';
else
  require $ext_info['path'].'/url/Default.php';

    ]]></hook>
    
    <hook id="hd_pre_template_loaded"><![CDATA[

if (FORUM_PAGE == 'viewtopic')
{
    $is_page = forum_link($forum_url['topic'], $id);

    $query = array(
        'SELECT'  => 'old_url, new_url',
        'FROM'    => 'pan_links',
        'WHERE'    => 'old_url=\''.$forum_db->escape($is_page).'\''
    );
    $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
    $fetch_links = $forum_db->fetch_assoc($result);

    $old_url = $fetch_links['old_url'];

    if ($is_page == $old_url)      
    {
        header('Location: '.$fetch_links['new_url']);
        exit();
    }

}
    
    ]]></hook>

  </hooks>
</extension>

redirect.php

Spoiler
<?php

define('FORUM_SKIP_CSRF_CONFIRM', 1);

if (!defined('FORUM_ROOT'))
  define('FORUM_ROOT', '../../');
require FORUM_ROOT.'include/common.php';
require FORUM_ROOT.'include/common_admin.php';

if ($forum_user['g_id'] != FORUM_ADMIN)
  message($lang_common['No permission']);

// Load the language file
require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_common.php';
require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_index.php';
require FORUM_ROOT.'lang/'.$forum_user['language'].'/admin_reindex.php';

if (isset($_POST['redirect_sent']))
{
    $title_redirect = forum_trim($_POST['title']);
    $old_url = forum_trim($_POST['old_url']); 
    $new_url = forum_trim($_POST['new_url']);
    
    if ($title_redirect == '')
        $errors[] = 'Введите название темы';
    else if ($old_url == '')
        $errors[] = 'Введите URL';
    else if ($new_url == '')
        $errors[] = 'Введите URL';
    
       $query = array(
        'INSERT'  => 'title, old_url, new_url',
        'INTO'      => 'pan_links',
        'VALUES'  => '\''.$forum_db->escape($title_redirect).'\', \''.$forum_db->escape($old_url).'\', \''.$forum_db->escape($new_url).'\''
      );
      $forum_db->query_build($query) or error(__FILE__, __LINE__);
}


$forum_page['crumbs'] = array(
  array($forum_config['o_board_title'], forum_link($forum_url['index'])),
  array($lang_admin_common['Forum administration'], forum_link($forum_url['admin_index'])),
  array('Переадресация', forum_link($forum_url['admin_poster']))
);

define('FORUM_PAGE', 'admin');
define('FORUM_PAGE_SECTION', 'management');
require FORUM_ROOT.'header.php';

// START SUBST - <!-- forum_main -->
ob_start();

?>
  <div class="main-subhead">
    <h2 class="hn"><span><?php echo $lang_admin_reindex['Reindex heading'] ?></span></h2>
  </div>
  
<?php  
    if (!empty($forum_page['text_options']))
    echo "\t\t".'<p class="ct-options options">'.sprintf($lang_common['You may use'], implode(' ', $forum_page['text_options'])).'</p>'."\n";

  // If there were any errors, show them
  if (!empty($errors))
  {
    $forum_page['errors'] = array();
    foreach ($errors as $cur_error)
      $forum_page['errors'][] = '<li class="warn"><span>'.$cur_error.'</span></li>';

?>
    <div class="ct-box error-box">
      <h2 class="warn hn"><?php echo 'Post errors' ?></h2>
      <ul class="error-list">
        <?php echo implode("\n\t\t\t\t", $forum_page['errors'])."\n" ?>
      </ul>
    </div>
<?php

  }

?>
  
  <div class="main-content main-frm">
    <div class="ct-box warn-box">
      <p>Пожалуйста заполните все поля. Вставьте ссылку текущей (старой) темы и новую ссылку, куда бедет выполнена переадрессация.</p>
    </div>
    <form class="frm-form" method="post" accept-charset="utf-8" action="">
      <div class="hidden">
        <input type="hidden" name="csrf_token" value="<?php echo generate_form_token() ?>" />
      </div>

      <fieldset class="frm-group group<?php echo ++$forum_page['group_count'] ?>">
        <legend class="group-legend"><span><?php echo $lang_admin_reindex['Rebuild index legend'] ?></span></legend>
        
        <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
          <div class="sf-box text">
            <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo 'Заголовок' ?></span> <small><?php echo 'Введите заголовок темы или описание.' ?></small></label><br />
            <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="title" size="70" value="" /></span>
          </div>
        </div>

        <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
          <div class="sf-box text">
            <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span><?php echo 'Старый URL' ?></span> <small><?php echo 'Введите URL страницы, которой необходимо переадресовать.' ?></small></label><br />
            <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="old_url" size="70" value="" /></span>
          </div>
        </div>

        <div class="sf-set set<?php echo ++$forum_page['item_count'] ?>">
          <div class="sf-box text">
            <label for="fld<?php echo ++$forum_page['fld_count'] ?>"><span class="fld-label"><?php echo 'Новый URL' ?></span> <small><?php echo 'Введите URL страницы, на которую будет осуществлена переадрессация' ?></small></label><br />
            <span class="fld-input"><input type="text" id="fld<?php echo $forum_page['fld_count'] ?>" name="new_url" size="70" value="" /></span>
          </div>
        </div>
      </fieldset>
      <div class="frm-buttons">
        <span class="submit primary"><input type="submit" name="redirect_sent" value="<?php echo 'Добавить' ?>" /></span>
      </div>
    </form>
  </div>
  
  
  
  
  

  <div class="main-subhead">
    <h2 class="hn"><span>Переадресация</span></h2>
  </div>
  <div class="main-content main-frm">
    <div class="ct-group">
      <table>
        <thead>
          <tr>
            <th >Тема</th>
            <th >Старый URL</th>
            <th >Новый URL</th>
          </tr>
        </thead>
        <tbody>
<?php


    $query = array(
      'SELECT'  => 'pl.id, pl.title, pl.old_url, pl.new_url',
      'FROM'    => 'pan_links AS pl',
//      'WHERE'    => 't.forum_id=0',
      'ORDER BY'  => 'pl.title ASC'
    );
    $result = $forum_db->query_build($query) or error(__FILE__, __LINE__);
    
                $i = 1;
    while ( $cur_links = $forum_db->fetch_assoc($result) )
    {
?>        
          <tr class="<?php (($i % 2 != 0) ? 'odd' : 'even') ?><?php (($i == 1) ? ' row1' : '') ?>">
        <td class="tc0"><?php echo $cur_links['title'] ?></td>
        <td class="tc1"><a href="<?php echo $cur_links['old_url'] ?>" target="new_blank"><?php echo $cur_links['old_url'] ?></a></td>
        <td class="tc3"><a href="<?php echo $cur_links['new_url'] ?>" target="new_blank"><?php echo $cur_links['new_url'] ?></a></td>
        </tr>
<?php
      $i++;
    }  
?>
        </tbody>
      </table>
    </div>
  </div>
<?php
  $tpl_temp = forum_trim(ob_get_contents());
  $tpl_main = str_replace('<!-- forum_main -->', $tpl_temp, $tpl_main);
  ob_end_clean();
  // END SUBST - <!-- forum_main -->

  require FORUM_ROOT.'footer.php';

url/Default.php

Spoiler
<?php

$forum_url['pan_redirect'] = 'extensions/'.$ext_info['id'].'/redirect.php';

?>

Скачать расширение Pan Redirect.
ссылка будет доступна после успешного тестирования

Если вам долго не отвечают, пишите автору темы в личку или на Email.

2

Re: Pan Redirect - переадресация страниц форума

не переадрессовывает страницы форума, viewforum.php?id=7.
как сделать чтобы редиректило форумы?