Уважаемые пользователи!
C 7 ноября 2020 года phpBB Group прекратила выпуск обновлений и завершила дальнейшее развитие phpBB версии 3.2.
С 1 августа 2024 года phpBB Group прекращает поддержку phpBB 3.2 на официальном сайте.
Сайт официальной русской поддержки phpBB Guru продолжит поддержку phpBB 3.2 до 31 декабря 2024 года.
С учетом этого, настоятельно рекомендуется обновить конференции до версии 3.3.

Выбор главной страницы форума

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).
Shredder
Former team member
Сообщения: 2219
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Выбор главной страницы форума

Сообщение Shredder »

Идея в том, чтобы, когда установлен Портал, иметь возможность в админке (а не в .htaccess) выбирать, какую страницу загружать пользователю, когда он открывает у себя адрес_сайта/ - index.php или portal.php. Я уже делал это на неком "скрипте мультифорумов", поэтому нужный код у меня есть, за исключением последнего фрагмента - самого вызова нужной страницы, т.к. в том скрипте это вставлялось в файл, которого нет в php. Для наглядности:

Код: Выделить всё

$forum_name = str_replace('имя_сайта', '', $_SERVER['SERVER_NAME']);
$sql = $db->query('SELECT config_value FROM ' . '`' . $forum_name . '_config`' . ' WHERE config_name = \'board_main\'');
$index = @mysql_result($sql, 0);
define('HS_WEB_FORUM_INDEX', (!empty($index) ? '/' . $index : '/index.php'));	// forum index url
Возможно ли это на обычном phpBB? И если да, то куда вставить код конечного вызова страницы из конфига?
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 15 лет
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 352 раза
Контактная информация:

Re: Выбор главной страницы форума

Сообщение MIT »

Ну, например:
В .htaccess

Код: Выделить всё

DirectoryIndex switcher.php
В switcher.php

Код: Выделить всё

<?php

define('IN_PHPBB', true);
$phpbb_root_path = './';
$phpEx = substr(strrchr(__FILE__, '.'), 1);
include($phpbb_root_path . 'common.' . $phpEx);

if (defined('HS_WEB_FORUM_INDEX')) {
    require $phpbb_root_path . basename(HS_WEB_FORUM_INDEX);
}
А свой код с выбиралкой можешь всунуть хоть в switcher.php, хоть в common.php...
Shredder
Former team member
Сообщения: 2219
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Выбор главной страницы форума

Сообщение Shredder »

MIT
Ничего не выходит, почему-то. Лезет либо это (если вставлять твой код без изменений):

Код: Выделить всё

[phpBB Debug] PHP Notice: in file [ROOT]/index.php on line 17: Constant IN_PHPBB already defined
Fatal error: Cannot redeclare deregister_globals() in путь_к_сайту/includes/startup.php on line 44 
либо тупо белые страницы.

Работает, только если убрать лишнее и указать прямо, например:

Код: Выделить всё

<?php

$phpbb_root_path = './';

require($phpbb_root_path . 'portal.php');

?>
Но на месте 'portal.php' должно быть $config['board_main'], и это никак не получается сделать. Может, в данном движке это вообще невозможно?
Аватара пользователя
Balamut
Former team member
Сообщения: 2213
Стаж: 19 лет
Откуда: {postrow.POSTER_FROM}
Поблагодарили: 146 раз
Контактная информация:

Re: Выбор главной страницы форума

Сообщение Balamut »

Оставьте у МИТа все как есть, но уберите
define('IN_PHPBB', true); в файлах индекс.пхп и портал.пхп

И экспериментируйте дальше.

Добавлено спустя 7 минут 39 секунд:
page_footer(); ???
//
// That's all, Folks!
// -------------------------------------------------
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 15 лет
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 352 раза
Контактная информация:

Re: Выбор главной страницы форума

Сообщение MIT »

Smayliks писал(а):но уберите
define('IN_PHPBB', true); в файлах индекс.пхп и портал.пхп
Не лучшая идея. При прямом доступе пользователя к каждому из этих файлов всё сломается.

Лучше заменить

Код: Выделить всё

define('IN_PHPBB', true);
на

Код: Выделить всё

if (!defined('IN_PHPBB')) define('IN_PHPBB', true);
Shredder
Former team member
Сообщения: 2219
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Выбор главной страницы форума

Сообщение Shredder »

Тут дело вовсе не в константе IN_PHPBB. Оно же орёт, что Fatal error: Cannot redeclare deregister_globals() - там ниже IN_PHPBB в процитированных ошибках было. Я посмотрел, на phpbb.com пишут, что это бывает, когда common.php подключается по второму разу. Потому и говорю, что работает только в виде:

Код: Выделить всё

<?php

$phpbb_root_path = './';

require($phpbb_root_path . 'portal.php');

?>
Но как при этом заставить читать $config? Никак.
Вся соль в том, чтобы выбрать нужную настройку из конфигурационной таблицы.

Добавлено спустя 2 минуты 31 секунду:
Либо писать какой-то нудный обходной скрипт выборки из бд, чтобы обойтись без внутренних phpBB-шных переменных (аля $config, $db и т.п.). Но не знаю, возможно ли это и поможет ли в этом движке (может, он снова что-нибудь запретит).

Добавлено спустя 19 минут 31 секунду:
Заработало в обход:

Код: Выделить всё

<?php

$phpbb_root_path = './';

$link = mysql_connect('server', 'username', 'password');
mysql_select_db('test');
$sql = mysql_query('SELECT config_value FROM phpbb_config WHERE config_name = \'board_main\'');

if (!$sql)
{
	die(mysql_error());
}

$index = mysql_result($sql, 0);
define('WEB_FORUM_INDEX', (!empty($index) ? '/' . $index : '/index.php'));
mysql_close($link);

require($phpbb_root_path . WEB_FORUM_INDEX);

?>
Но, как понимаю, это не лучшее решение.
Аватара пользователя
MIT
Former team member
Сообщения: 2500
Стаж: 15 лет
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 4 раза
Поблагодарили: 352 раза
Контактная информация:

Re: Выбор главной страницы форума

Сообщение MIT »

Достаточно заменить строки

Код: Выделить всё

include($phpbb_root_path . 'common.' . $phpEx);
на

Код: Выделить всё

include_once($phpbb_root_path . 'common.' . $phpEx);
в index.php и portal.php.

Добавлено спустя 58 секунд:
http://php.net/manual/ru/function.include-once.php
Shredder
Former team member
Сообщения: 2219
Стаж: 15 лет 3 месяца
Благодарил (а): 236 раз
Поблагодарили: 561 раз
Контактная информация:

Re: Выбор главной страницы форума

Сообщение Shredder »

MIT
Работает.
Аватара пользователя
Balamut
Former team member
Сообщения: 2213
Стаж: 19 лет
Откуда: {postrow.POSTER_FROM}
Поблагодарили: 146 раз
Контактная информация:

Re: Выбор главной страницы форума

Сообщение Balamut »

Shredder, сразу не увидел, что это ты.

Альт+ф7 по всем файлам, которые не касаются админки, индекс.пхп переименовываешь в forum.php, сам файл тоже. А в индексе пишешь все, что тебе надо. И про фужер я не случайно сказал.
//
// That's all, Folks!
// -------------------------------------------------
Закрыто

Вернуться в «Для авторов (phpBB 3.0.x)»