Быстрый лёгкий надёжный форумный движок
Вы не вошли.
может туплю...но нигде в настройках такого не нашел...
Я не хотел бы что бы исходящие ссылки с форума были прямыми (нужны редиректные)
Подскажите плиз как))
я некорректно вопрос задал? непонятно в смысле? или ни кто не знает?
в include/parser.php найти функцию handle_url_tag()
в строке global добавить $pun_config, ниже найти
return '<a href="'.$full_url.'">'.$link.'</a>';
заменить на что-то типа
if (preg_match('#^'.preg_quote(str_replace('www.', '', $pun_config['o_base_url']), '#').'#i', str_replace('www.', '', $full_url)))
return '<a class="internal" href="'.$full_url.'">'.$link.'</a>';
else
return '<a class="external" href="redirect.php?url='.urlencode($full_url).'">'.$link.'</a>';
понятно? дальше зависит от твоего воображения
такой прием, кроме прочего, позволяет задать разные стили для внутренних и внешних ссылок.
можно, например, оформить внешние ссылки в стиле wiki: для стиля Oxygen в конец файла style/imports/Oxygen_cs.css дописываем
a.external {
background: url(../../img/external.png) center right no-repeat;
TEXT-DECORATION: none;
BORDER-BOTTOM: 1px dotted;
padding-right: 13px;
}
файл external.png можно скопировать в img/ отсюда
Добавлено спустя 6 минут 17 секунд:
для тех, кто не может придумать скрипт для редиректа, могу предложить такой: копим статистику переходов в кеш-файле (БД не используется, просто и быстро)
redirect.php
<?php
define('PUN_ROOT', './');
if (!isset($_GET['url']))
die('oops! no params');
$url = $_GET['url'];
@include PUN_ROOT.'cache/cache_urls.php';
if (!defined('PUN_URLS_LOADED'))
$urls = array();
$referrer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');
if (isset($urls[$url]))
{
$refs = $urls[$url][1];
$refs[] = $referrer;
$urls[$url] = array($urls[$url][0]+1, array_unique($refs));
}
else
$urls[$url] = array(1, array($referrer));
$fh = @fopen(PUN_ROOT.'cache/cache_urls.php', 'wb');
if (!$fh)
die('Unable to write file to cache directory. Please make sure PHP has write access to the directory \'cache\'');
@flock($fh, 2);
fwrite($fh, '<?php'."\n\n".'define(\'PUN_URLS_LOADED\', 1);'."\n\n".'$urls = '.var_export($urls, true).';'."\n\n".'?>');
fclose($fh);
header('Location: '.$url);
в cache/cache_urls.php копится статистика такого вида, пример (копировать не надо!):
<?php
define('PUN_URLS_LOADED', 1);
$urls = array (
'http://ya.ru/' =>
array (
0 => 3,
1 =>
array (
0 => 'http://myforum.com/viewtopic.php?pid=28',
1 => 'http://myforum.com/viewtopic.php?pid=29',
),
),
'http://rambler.ru/' =>
array (
0 => 2,
1 =>
array (
0 => 'http://myforum.com/viewtopic.php?id=4',
),
),
'http://lenta.ru/' =>
array (
0 => 1,
1 =>
array (
0 => 'http://myforum.com/viewtopic.php?id=4',
),
),
);
?>
посмотреть статистику (только для админа)
redirect_stat.php
<?php
define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';
if ($pun_user['g_id'] > PUN_ADMIN)
message($lang_common['No permission']);
$page_title = pun_htmlspecialchars($pun_config['o_board_title'].' - Redirect statistics');
require PUN_ROOT.'header.php';
@include PUN_ROOT.'cache/cache_urls.php';
?>
<div class="blocktable">
<h2><span>Redirect statistics</span></h2>
<div class="box">
<div class="inbox" style="PADDING: 10px">
<?php
function cmp($a, $b)
{
if ($a[0] == $b[0]) {
return 0;
}
return ($a[0] < $b[0]) ? 1 : -1;
}
if (defined('PUN_URLS_LOADED'))
{
uasort($urls, 'cmp');
foreach($urls as $url => $value)
{
echo '<p><strong>'.$value[0].'</strong>: <a href="'.$url.'" class="external">'.pun_htmlspecialchars($url).'</a> [';
$refs = $value[1];
for($i=0; $i<count($refs); $i++)
$refs[$i] = '<a href="'.$refs[$i].'">#'.($i+1).'</a>';
echo implode(', ', $refs);
echo "]</p>\n";
}
}
?>
</div>
</div>
</div>
<?php
require PUN_ROOT.'footer.php';
выглядит статистика вот так:
Прикольно !
Надо попробовать у себя !
Это
header('Location: '.$url);
надо поменять на это
header('Location: '.str_replace('&', '&', $url));
в redirect.php.
Нет, лучше это
$url = $_GET['url'];
поменять на это
$url = str_replace('&', '&', $_GET['url']);
А это
header('Location: '.$url);
оставить как есть.
Вот наваял мод на основе предложений artoodetoo
1. Выполнить в плагине DB management или в phpMyAdmin заменив #__ префиксом Вашей базы.
INSERT INTO #__config (conf_name, conf_value) VALUES('o_board_redirect', '');
2. Открываем файл admin_options.php
3. После этого
<tr>
<th scope="row">Базовый URL</th>
<td>
<input type="text" name="form[base_url]" size="50" maxlength="100" value="<?php echo $pun_config['o_base_url'] ?>" />
<span>Полный URL форума без замыкающего слэш (т.е. http://www.mydomain.com/forums). Это <strong>необходимо</strong> для корректной работы панели администрироавния и модерирования. Если вы получаете ошибки "Bad referer", вероятно URL некорректный.</span>
</td>
</tr>
Ставим это
<tr>
<th scope="row">Условие редиректа</th>
<td>
<input type="text" name="form[board_redirect]" size="50" maxlength="255" value="<?php echo pun_htmlspecialchars($pun_config['o_board_redirect']) ?>" />
<span>Регулярное выражение соответствующее ссылкам не перехватываемым редиректом. Если пусто, то все ссылки идут без редиректа.<br /> Пример: ^(http|ftp)://(www\.)?(сайт1|сайт2|сайт3)</span>
</td>
</tr>
4. Сохранить файл admin_options.php
5. Открыть файл parser.php
6. Заменить
function handle_url_tag($url, $link = '')
{
global $pun_user;
На
function handle_url_tag($url, $link = '')
{
global $pun_user, $pun_config;
7. Заменить
return '<a href="'.$full_url.'">'.$link.'</a>';
На
if (empty($pun_config['o_board_redirect']) || eregi($pun_config['o_board_redirect'],$full_url)) {
return '<a class="internal" href="'.$full_url.'">'.$link.'</a>';
} else {
return '<a class="external" href="redirect.php?url='.urlencode($full_url).'">'.$link.'</a>';
}
8. Сохранить файл parser.php
9. Создать пустой файл redirect.php в корне форума
10. Скопировать в него код
<?php
define('PUN_ROOT', './');
if (!isset($_GET['url']))
die('oops! no params');
$url = str_replace('&', '&', $_GET['url']);
@include PUN_ROOT.'cache/cache_urls.php';
if (!defined('PUN_URLS_LOADED'))
$urls = array();
$referrer = (isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');
if (isset($urls[$url]))
{
$refs = $urls[$url][1];
$refs[] = $referrer;
$urls[$url] = array($urls[$url][0]+1, array_unique($refs));
}
else
$urls[$url] = array(1, array($referrer));
$fh = @fopen(PUN_ROOT.'cache/cache_urls.php', 'wb');
if (!$fh)
die('Unable to write file to cache directory. Please make sure PHP has write access to the directory \'cache\'');
@flock($fh, 2);
fwrite($fh, '<?php'."\n\n".'define(\'PUN_URLS_LOADED\', 1);'."\n\n".'$urls = '.var_export($urls, true).';'."\n\n".'?>');
fclose($fh);
header('Location: '.$url);
11. Сохранить файл redirect.php
12. Создать пустой файл AP_Redirect.php в каталоге plugins форума
13. Скопировать в него код
<?php
// Make sure no one attempts to run this script "directly"
if (!defined('PUN'))
exit;
// Tell admin_loader.php that this is indeed a plugin and that it is loaded
define('PUN_PLUGIN_LOADED', 1);
@include PUN_ROOT.'cache/cache_urls.php';
function cmp($a, $b)
{
if ($a[0] == $b[0]) {
return 0;
}
return ($a[0] < $b[0]) ? 1 : -1;
}
// Display the admin navigation menu
generate_admin_menu($plugin);
?>
<div class="block">
<h2><span>Статистика переходов - v 1.0</span></h2>
<div class="box">
<div class="inbox">
<p>Этот плагин показывает статистику переходов по ссылкам с форума.
</p>
</div>
</div>
</div>
<div class="blockform">
<h2 class="block2"><span>Статистика</span></h2>
<div class="box">
<?php
if (defined('PUN_URLS_LOADED'))
{
uasort($urls, 'cmp');
foreach($urls as $url => $value)
{
echo '<p><strong>'.$value[0].'</strong>: <a href="'.$url.'" class="external">'.pun_htmlspecialchars($url).'</a> [';
$refs = $value[1];
for($i=0; $i<count($refs); $i++)
$refs[$i] = '<a href="'.$refs[$i].'">#'.($i+1).'</a>';
echo implode(', ', $refs);
echo "]</p>\n";
}
}
?>
</div>
</div>
14. Сохранить файл AP_Redirect.php
Редактировался Visman (2008-06-28 06:17:58)
Visman
Установил ваш мод, но не могу разобраться, как им пользоваться. Не подскажете?
В админке:
на странице Опции новая настройка Условие редиректа.
и плагин Redirect (только информирует).
В админке:
на странице Опции новая настройка Условие редиректа.
и плагин Redirect (только информирует).
А как правильно задавать условия редиректа (там не совсем понятно написано)?
И еще обнаружилась такая бяка: в сроку для ввода условий редиректа влазят всего несколько ссылок. У меня более 3-х адресов не вводятся
Вот моя строка
^http://(www\.)?(forum\.alltes\.ru|alltes\.ru|radikal\.ru|wiki\.rumor\.ru|forum\.rumor\.ru|mtes\.ru|tesall\.ru|forum\.tesall\.ru|tesnexus\.com)
т.е. ссылки на сайты forum.alltes.ru, alltes.ru, (_radikal_ru_), wiki.rumor.ru, forum.rumor.ru, mtes.ru, tesall.ru, forum.tesall.ru и tesnexus.com нормальные, а все остальные - через редирект.
В коде
...<input type="text" name="form[board_redirect]" size="50" maxlength="255"...
максимальная длина строки 255 символов задана!
т.е. ссылки на сайты forum.alltes.ru, alltes.ru, (_radikal_ru_), wiki.rumor.ru, forum.rumor.ru, mtes.ru, tesall.ru, forum.tesall.ru и tesnexus.com нормальные, а все остальные - через редирект.
Т.е. там можно задавать и условия исключений и шаблоны?
Не совсем это очевидно для рядового пользователя. А где можно почитать о принципе формирования этого шаблона?
И на мой взгляд 255 символов маловато для всей возможной статистики. Мод получается слишком малофункциональным ...
Не совсем это очевидно для рядового пользователя. А где можно почитать о принципе формирования этого шаблона?
Это регулярное выражение, т.ч. читай про них.
И на мой взгляд 255 символов маловато для всей возможной статистики. Мод получается слишком малофункциональным ...
В 255 символов можно много что напихать с помощью регулярных выражений.
А ограничения такие наложены таблицей config!
Это регулярное выражение, т.ч. читай про них.
Ок - почитаю ...
т.е. ссылки на сайты forum.alltes.ru, alltes.ru, (_radikal_ru_), wiki.rumor.ru, forum.rumor.ru, mtes.ru, tesall.ru, forum.tesall.ru и tesnexus.com нормальные, а все остальные - через редирект.
Так значит в строке редиректа задаются только исключения, а по всем остальным ссылками статистика накапливается?
Если так, то 255 символов вполне достаточно
Вроде работает. Возник только такой вопрос: а что означают ссылки [#1, #2, #3] и для чего они нужны? При наведении на любую из них показывается одна и та же ссылка http:/..../admin_loader.php?plugin=AP_Redirect.php
а что означают ссылки [#1, #2, #3]
Это ссылки на страницы форума, откуда были сделаны переходы по текущей ссылке.
Замечания: Правильно было бы:
1. Чтобы была ссылка на сообщение где ссылка висит или на тему, а не куча таких ссылок.
2. Надо чтобы ссылки в ЛС не обратывались редиректом, а то фигня получается.
Это ссылки на страницы форума, откуда были сделаны переходы по текущей ссылке.
Так в том-то и дело, что ссылки все до единой одинаковые, и при клике на любую просто обновляют страницу со статистикой редиректа.
Замечания: Правильно было бы:
1. Чтобы была ссылка на сообщение где ссылка висит или на тему, а не куча таких ссылок.
2. Надо чтобы ссылки в ЛС не обратывались редиректом, а то фигня получается.
С замечаниями согласен. Планируется ли дополнения мода?
Не имею понятия
Не имею понятия
Обыдно ...
Visman
А есть ли возможность изменить форму статистики так, чтобы рядом со ссылками [#1, #2, #3] в скобках отражалось количество кликов с каждой страницы.
Чтобы в конечном итоге было, например, так: [#1(20), #2(83), #3(75)]
Об этом надо artoodetoo спрашивать, т.к. на основе его предложений я свой вариант делал.
хз, у меня всё работало NewUser21031972 попробуй сам разобраться.
хз, у меня всё работало NewUser21031972 попробуй сам разобраться.
Так оно и работает в обозначенных пределах. Правда это не совсем то, что я изначально хотел, но тоже полезно.
Речь о небольших доработках. Заложено ли это изначально для реализации пожелания?