Пакет предназначен для подготовки текущих модификаций SMF 2.1 к будущей миграции на 3.0.
Предлагаемые утилитарные классы позволяют избавиться от необходимости объявлять глобальные переменные в коде ваших модификаций.
В результате ваши модификации смогут работать как в SMF 2.1, так и в 3.0, с минимальными изменениями.
В корневой директории вашей модификации выполните команду:
composer require bugo/smf-compat
Затем в app.php
(или в другой аналогичной точке входа) подключите autoload.php
:
require_once __DIR__ . '/vendor/autoload.php';
<?php
class Example
{
public function method1()
{
global $txt;
echo $txt['hello_world'];
}
public function method2()
{
global $user_info, $modSettings;
echo $user_info['name'];
var_dump($modSettings);
}
}
<?php
use Bugo\Compat\Lang;
use Bugo\Compat\User;
use Bugo\Compat\Config;
class Example
{
public function method1()
{
echo Lang::$txt['hello_world'];
}
public function method2()
{
echo User::$info['name'];
var_dump(Config::$modSettings);
}
}
После перехода на SMF 3.0 достаточно будет заменить используемые классы:
-use Bugo\Compat\Lang;
+use SMF\Lang;
-use Bugo\Compat\User;
+use SMF\User;
-use Bugo\Compat\Config;
+use SMF\Config;
Или можно оставить как есть. В этом случае ваша модификация будет поддерживать обе версии SMF.
Старый код (SMF 2.1.x) | Новый код (SMF 3.0) |
---|---|
$board |
Board::$id |
$boards |
Board::$loaded |
board_info |
Board::$info |
$modSettings |
Config::$modSettings |
$mbname |
Config::$mbname |
$scripturl |
Config::$scripturl |
$boardurl |
Config::$boardurl |
$boarddir |
Config::$boarddir |
$sourcedir |
Config::$sourcedir |
$cachedir |
Config::$cachedir |
$db_server |
Config::$db_server |
$db_name |
Config::$db_name |
$db_user |
Config::$db_user |
$db_passwd |
Config::$db_passwd |
$db_type |
Config::$db_type |
$db_prefix |
Config::$db_prefix |
$language |
Config::$language |
$cache_enable |
Config::$cache_enable |
$db_show_debug |
Config::$db_show_debug |
$db_count |
Db::$count |
$db_cache |
Db::$cache |
$txt |
Lang::$txt |
$editortxt |
Lang::$editortxt |
$helptxt |
Lang::$helptxt |
$forum_copyright |
Lang::$forum_copyright |
$settings |
Theme::$current->settings |
$options |
Theme::$current->options |
$topic |
Topic::$id |
$user_info |
User::$info |
$user_profile |
User::$profiles |
$user_settings |
User::$settings |
$memberContext |
User::$memberContext |
$context |
Utils::$context |
$smcFunc |
Utils::$smcFunc |
Старый код (SMF 2.1.x) | Новый код (SMF 3.0) |
---|---|
saveDBSettings |
ACP::saveDBSettings |
prepareDBSettingContext |
ACP::prepareDBSettingContext |
createAttachment |
Attachment::create |
removeAttachments |
Attachment::remove |
parse_bbc |
BBCodeParser::load()->parse |
BoardIndex |
BoardIndex::call() |
cache_get_data |
CacheApi::get |
cache_put_data |
CacheApi::put |
clean_cache |
CacheApi::clean |
getBirthdayRange |
Calendar::getBirthdayRange |
getEventRange |
Calendar::getEventRange |
getHolidayRange |
Calendar::getHolidayRange |
getTodayInfo |
Calendar::getTodayInfo |
getCalendarList |
Calendar::getCalendarList |
getCalendarGrid |
Calendar::getCalendarGrid |
updateSettings |
Config::updateModSettings |
updateSettingsFile |
Config::updateSettingsFile |
db_extend |
Db::extend |
create_control_richedit |
new Editor |
fatal_error |
ErrorHandler::fatal |
fatal_lang_error |
ErrorHandler::fatalLang |
log_error |
ErrorHandler::log |
add_integration_function |
IntegrationHook::add |
call_integration_hook |
IntegrationHook::call |
createList |
new ItemList |
censorText |
Lang::censorText |
getLanguages |
Lang::get |
loadLanguage |
Lang::load |
sentence_list |
Lang::sentenceList |
tokenTxtReplace |
Lang::tokenTxtReplace |
logAction |
Logging::logAction |
loadEmailTemplate |
Mail::loadEmailTemplate |
sendmail |
Mail::send |
getBoardList |
MessageIndex::getBoardList |
preparsecode |
Msg::preparseCode |
un_preparsecode |
Msg::un_preparsecode |
getNotifyPrefs |
Notify::getNotifyPrefs |
constructPageIndex |
new PageIndex |
memoryReturnBytes |
Sapi::memoryReturnBytes |
sm_temp_dir |
Sapi::getTempDir |
set_time_limit |
Sapi::setTimeLimit |
checkSubmitOnce |
Security::checkSubmitOnce |
addJavaScriptVar |
Theme::addJavaScriptVar |
addInlineCss |
Theme::addInlineCss |
addInlineJavaScript |
Theme::addInlineJavaScript |
loadCSSFile |
Theme::loadCSSFile |
loadJavaScriptFile |
Theme::loadJavaScriptFile |
loadEssentialThemeData |
Theme::loadEssential |
loadTemplate |
Theme::loadTemplate |
allowedTo |
User::$me->allowedTo или User::hasPermission |
checkSession |
User::$me->checkSession или User::sessionCheck |
isAllowedTo |
User::$me->isAllowedTo или User::mustHavePermission |
loadMemberData |
User::loadMemberData |
loadMemberContext |
User::loadMemberContext |
membersAllowedTo |
User::membersAllowedTo |
updateMemberData |
User::updateMemberData |
JavaScriptEscape |
Utils::escapeJavaScript |
obExit |
Utils::obExit |
redirectexit |
Utils::redirectexit |
send_http_status |
Utils::sendHttpStatus |
shorten_subject |
Utils::shorten |
smf_chmod |
Utils::makeWritable |
smf_json_decode |
Utils::jsonDecode |
get_mime_type |
Utils::getMimeType |
un_htmlspecialchars |
Utils::htmlspecialcharsDecode |
fetch_web_data |
WebFetchApi:fetch |
timeformat |
Time::stringFromUnix |
Все функции, находящиеся в SSI.php, которые до 3.0 вызывались через ssi_имя_функции
, в 3.0 вызываются так: ServerSideIncludes::имя_функции
.
В режиме совместимости можно использовать Utils::$smcFunc['db_query']
и т. д., но также введён новый класс Db
, со статическим свойством $db
, содержащим класс текущего движка базы данных. Методы этого класса аналогичны функциям в Utils::$smcFunc
, но без приставки db_
. Покажем на примере трёх популярных функций:
Старый код (SMF 2.1.x) | Новый код (SMF 3.0) |
---|---|
global $smcFunc; |
use Bugo\Compat\Db; |
$result = $smcFunc['db_query']('', /* Ваш SQL */, []) |
$result = Db::$db->query('', /* Ваш SQL */, []) |
$rows = $smcFunc['db_fetch_assoc']($result) |
$rows = Db::$db->fetch_assoc($result) |
$smcFunc['db_free_result']($result) |
Db::$db->free_result($result) |