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.softplaza.net
*/
-->
<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.
ссылка будет доступна после успешного тестирования