ããã«ã¡ã¯
ãã®èšäºã§ã¯ãVBulletinãšIPBã®æ°ããã©ã€ãã«ã§ããæ°ãããã©ãŒã©ã ãšã³ãžã³XenForoã®ã¢ãŒããã¯ãã£ããœãŒã¹ãæ°æéç¥ã£ãåŸã«ã©ãã ãæåããããç°¡åã«èª¬æããŸãã VBulletin3ã®å
äœè
ã§ããCyrusãšMikeã«ãã£ãŠèšèšãããXenForoã«ã€ããŠ
ã¯ããã§ã«
å°ãæžããŠããŸãã
寞æ³
XenForoã³ãŒãã®äž»èŠéšåã®ãµã€ãºã¯3.24 MBïŒ3 405 312ãã€ãïŒã§ãã å¥ã®8.31 MBïŒ8 724 429ãã€ãïŒã¯ãXenForoã³ãŒãã«ä»å±ããZend Frameworkã«ãã£ãŠå æãããŠããŸãã
MVC
XenForoã¯å®å
šã«MVCã¢ãŒããã¯ãã£ã«åºã¥ããŠããŸãã ã¢ãã«ããã¥ãŒãã³ã³ãããŒã©ãŒçšã«åå¥ã®ã¯ã©ã¹ããããŸãã ã«ãŒãindex.phpã®ãµã€ãºã¯467ãã€ãã§ããã®ãããªå Žåã«å¿
èŠãªããã«çµäºããŸã
$fc = new XenForo_FrontController(new XenForo_Dependencies_Public()); $fc->run();
ãã¡ãããã¯ã©ã¹ãªãŒãããŒããŒã¯äœ¿çšäžã§ãã ZFã®ãããªã¯ã©ã¹åœåã·ã¹ãã ã
MVCèªäœã¯ãŸã Zendã¯ã©ã¹ãå
éšã§äœ¿çšããŠããŸãããXenForo_Controllerã察å¿ããZFã¯ã©ã¹ããç¶æ¿ãããŠããªããšããäºå®ã¯ããã®éšåãæžãæããããããšã瀺åããŠããŸãã
ãã¹ãŠã®ã³ã³ãããŒã©ãŒã¯ã»ãŒåãæ¹æ³ã§ç¶æ¿ãããŸããã¯ã©ã¹XenForo_ControllerPublic_Forumã¯XenForo_ControllerPublic_Abstractãæ¡åŒµããŸãã Symfonyã®ã¢ã¯ã·ã§ã³ã®åŸããã®ã¢ãããŒãã¯ããçããã§ãããããã«æ
£ããŸãã
ã«ãŒãã£ã³ã°ã·ã¹ãã ã¯æ¡åŒµå¯èœã«èšèšãããŠããŸãã æ¡åŒµã¯ãURLãã¬ãã£ãã¯ã¹ããã³ãã©ã¯ã©ã¹ã«ãã€ã³ãããããšã§çºçããŸãã ãã¡ãããããã«äœ¿ããSEOã§ãã ãã©ã°ã€ã³ã¯å¿
èŠãããŸããã
ã³ã³ãã³ãã¢ãã«
XenForoã¢ãŒããã¯ãã£ã¯é·ãéæ·ãããŠããŸãã:)ãšã«ããããã©ãŒã©ã ãšã³ãžã³ã§åããŠãå€å°ãªããšãDrupalãé£æ³ãããããããããã³ã³ãã³ãã¢ãŒããã¯ãã£ã«åºäŒããŸããïŒããã¹ãŠãããŒãããèŠããŠããŸããïŒïŒã ãããŸã§ã®ãšãããXenForoã«ã¯ãã«ããŽãªããã©ãŒã©ã ã»ã¯ã·ã§ã³ãããŒãžãããã³ãªã³ã¯ïŒéåžžã®ãªãã€ã¬ã¯ãïŒã®4çš®é¡ã®ã³ã³ãã³ãããããŸãã ããããã¯ããŒããšãåŒã°ããŸãã ããã«ãããŒãã®åã€ã³ã¹ã¿ã³ã¹ã¯ãå¥ã®ã¿ã€ãã®ã€ã³ã¹ã¿ã³ã¹ã®ç¥å
/åå«ã«ãªãããšãã§ããŸãã ãã®ççºçãªæ··åç©ããããšãã°ããŒãžãšãã®ãã©ãŒã©ã ã»ã¯ã·ã§ã³ããã©ã®ããã«è¡šç€ºããããã¯ãŸã ããããŸããããè©ŠããŠããŸãã:)ã ããã«ãäžéšã®çš®é¡ã®ã³ã³ãã³ãã¯ãç®±ããåºããŠããã«æ¡åŒµã§ããŸãã ãããã£ãŠãããšãã°ãããŒãžã®å Žåãå®éã«ã¯ãã®HTMLã³ã³ãã³ãã«å ããŠãããŒã¿ããŒã¹ããè¿œââå ããŒã¿ãåä¿¡ããPHPãã³ãã©ãŒãæå®ããããããŒãžã®ãã¶ã€ã³ãå€æŽããããæ
å ±ãæ¿å
¥ãããããŠãŒã¶ãŒã«ãšã©ãŒãæãããããããšããã§ããŸãã ã©ãã§ãPHPãã³ãã©ãŒã¯ãäºæ³ãããããã«PHPã³ãŒãã§ã¯ãªããã¯ã©ã¹åãšã¡ãœããåã§ç€ºãããŸãã ããã¯ãã¢ã¯ãã£ãã«ãªããšãã¯ã©ã¹ã¯ãªãŒãã©ããŒã«ãã£ãŠããŒããããŸãïŒãããã£ãŠããã¡ã€ã«ã·ã¹ãã ã«æ£ããé
眮ãããŠããå¿
èŠããããŸãïŒã
ã³ã³ãã³ãã¿ã€ãã¯äŸç¶ãšããŠããŒãã³ãŒããããŠãããããèªåã§è¿œå ããããšã¯ã§ããŸããã ãªãããã®çç±ã§ã管çé åã®ååãããŒã«ã©ã€ãºãããŠããŸããã
ãµãŒãããŒãã£ã®ã©ã€ãã©ãªã䜿çšãã
XenForoã¯
SaberãšZend Frameworkã䜿çšããŸãã ãŸãã次ã®ãããªå Žæã®ã³ãŒãå
ã®ååš
............ spl_autoload_register(array($this, 'autoload'));
ã»ãšãã©ã®å Žåãéçºããã»ã¹å
šäœã§äžèŠãªäŸåé¢ä¿ãåãé€ããç¬èªã®ãã軜éã§ç¹æ®ãªãã®ã«çœ®ãæããŸãã
ZFããã¯ã䜿çšãããã¯ã©ã¹ã¯ã»ãšãã©ãããŸããã ãã®äžã§ãZend_RegistryïŒXenForo_Dbã€ã³ã¹ã¿ã³ã¹ã®ãããªã·ã³ã°ã«ãã³ã®ãããªãªããžã§ã¯ãã®ã¬ãžã¹ããªãšããŠïŒãZend_ConfigãZend_CacheïŒç¹ã«å€ãããã£ãã·ã¥ããXenForo_Modelã¢ãã«ã®åºæ¬ã¯ã©ã¹ã§äœ¿çšãããŸãïŒãZend_Service_ReCaptchaãZend_Http_Clientãããã€ãã®Zendalidã
ããŒã¿ããŒã¹ãæäœããã«ã¯ãXendForo_DBã¯ã©ã¹ã§ã©ãããããZend_DBãã³ãã«ã®äžéšïŒZend_Db_Adapater_Abstractããã³Co.ïŒã䜿çšããŸããããã¯ããã®éšåãåŸã§æžãæããããããšã瀺ããŠããŸãã
ã¯ãšãªãã¶ã€ãã¯äœ¿çšããããéåžžã©ããã³ãŒãã«çŽæ¥çµã¿èŸŒãŸããŸãïŒãã¡ãããè€æ°ã®ããŒã¿ããŒã¹ããµããŒãããã®ã¯å€å°å°é£ã«ãªããŸãããããäžæ¹ã§ãã¯ãšãªã¯ã¢ãã«å
ã«éäžããŠãããã...ïŒ
ã¢ããªã³ã¢ãŒããã¯ãã£
ãã©ãŒã©ã ãæ¡åŒµããããã«ããã³ãã©ãŒããã³ã°ã¢ããã§ããã€ãã³ããããã€ãçšæãããŠããŸãã æ¢ã«è¿°ã¹ãããã«ããã³ãã©ãŒã¯ã¯ã©ã¹ãšã¡ãœããã®ååã§ç€ºãããŸããããã«ãããAPCãªã©ã®ã¢ã¯ã»ã©ã¬ãŒã¿ãŒã䜿çšããŠã¢ããªã³ããã£ãã·ã¥ã§ããŸãã ãã³ãã©ãŒã®ãªã¹ããšãã©ã°ã€ã³ã«é¢ããåºæ¬æ
å ±ã¯ã* .xmlãã¡ã€ã«ã«é
眮ãããŸãã ææžãã¯ãªãã·ã§ã³ã§ãã ãã©ãŒã©ã ã§ãããã°ã¢ãŒããã¢ã¯ãã£ãåããã ãã§ååã§ãè¿œå æ©èœã管çããã«ã«è¡šç€ºãããŸãã ãã¡ãããPHPã¢ããªã³ãã¡ã€ã«ã¯ãæåã«é©åãªãã©ã«ããŒã«å±éããå¿
èŠããããŸãã XenForoã¯ã©ã¹ã¯/ library / XenForoã«ããããã/ library / VasyaCorpã«ãããŸãã VBulletinããåé€ããããšãã«ããã¡ã€ã«ã·ã¹ãã ã§ãã©ã°ã€ã³ã®æ®ããé »ç¹ã«æ¢ããŠãããããããã«æºè¶³ããŠããŸããã
ã»ãšãã©ãã¹ãŠã®ã¢ããªã³ã«èšå®ãå¿
èŠãªã®ã§ã管çããã«ã§çŽæ¥äœæããããã¯ã«é¢ããæ
å ±ãšãšãã«* .xmlãã©ã°ã€ã³ã«ãšã¯ã¹ããŒãã§ããŸãã ãããã¯ãXenForoèªäœã®èšå®ãšåãå Žæã«ãããŸãã XenForoã®äžè¬èšå®ã»ã¯ã·ã§ã³ã®ä»»æã®å Žæã«åã蟌ãããšãã§ããŸãã ãã¹ãŠãVBulletinã®å Žåãšã»ãŒåãããã«é
眮ãããŸãã ããã¯éåžžã«äŸ¿å©ã§ããããããããµããŒãããã³ãŒããæžãå¿
èŠã¯ã»ãšãã©ãããŸããã
ããã¯ã®æ°ã«å°ãé©ããã ç§ã¯èª°ããé ã«çããããšããã§ããªãã£ãVBulletinã®ããã¯ã®è³éããªéãèŠããŠãããšæããŸããïŒ XenForoã«ã¯17åã®ããã¯ãããªãïŒ ãã®ãããªéã¯ããã®ç®çã«ãã£ãŠèª¬æãããŸãã ååã¯æ¬¡ã®ãšããã§ãã
- container_admin_params
- container_public_params
- controller_pre_dispatch
- front_controller_post_view
- front_controller_pre_dispatch
- front_controller_pre_route
- front_controller_pre_view
- init_dependencies
- load_class_bb_code
- load_class_controller
- load_class_datawriter
- load_class_model
- load_class_route_prefix
- load_class_search_data
- load_class_view
- navigation_tabs
- visitor_setup
å°èŠæš¡ãªã³ãŒãæ€æ»ã«ãããload_class_ *ããã¯ãã¡ããªãXenForoã¯ã©ã¹ã·ã¹ãã ãåçã«æ¡åŒµããããã«èšèšãããŠããããšã瀺ãããŸããã éèŠãªã³ãŒãã¯æ¬¡ã®ãšããã§ãã
public static function resolveDynamicClass($class, $type, $fakeBase = false) { if (!XenForo_Application::autoload($class)) { if ($fakeBase) { $fakeNeeded = true; } else { return false; } } else { $fakeNeeded = false; } if (!empty(self::$_classCache[$class])) { return self::$_classCache[$class]; } $createClass = $class; $extend = array(); XenForo_CodeEvent::fire('load_class_' . $type, array($class, &$extend)); if ($fakeNeeded) { if (!$extend) { return false; } eval('class ' . $class . ' extends ' . $fakeBase . ' {}'); } if ($extend) { try { foreach ($extend AS $dynamicClass) {
ããã§ãããŒãžäžã®äœããå€æŽããããã®visitor_setupããã¯ã®äºæ³å€ã®äœ¿çšæ¹æ³ã瀺ã
ãŸã ã ã»ãŒãã¹ãŠã®ããã¯ãä»ããŠãã·ã¹ãã ã®äžå¿ã«å
¥ã蟌ãã§
ããžãã¹ãè¡ãããšãã§ããŸãã
äžè¬ã«ãå°æ°ã®ããã¯ã¯ãã®åã«ãã£ãŠããªãçžæ®ºãããããã§ãã
ãã³ãã¬ãŒãã·ã¹ãã
æè¿ã®ãã¹ãŠã®ãã©ãŒã©ã ãšåæ§ã«ãXenForoã«ã¯å€æ°ã®ãã³ãã¬ãŒãããããŸãã æ§æã¯éåžžã«åŒ·åã§ãïŒä»¥äžã®æç²ãåç
§ïŒããããã¯èª°ãé©ããªãã§ãããã ç¹å¥ãªã¿ã°ã¯ãPHPTALïŒãååã®ãªããXML / HTMLïŒã®ããã«èšè¿°ãããŠããŸãã 1ã€ã®ãã³ãã¬ãŒãã«è€æ°ã®ãã¡ã€ã«ãå«ããããšãã§ããŸãã ããšãã°ãforum_listãã³ãã¬ãŒãã«ã¯ãforum_listãnode_listïŒforum_listã«æ¿å
¥ïŒãnode_list.cssãsidebar.cssãsidebar_online_usersãå«ãŸããŠããŸãã ãã³ãã¬ãŒãå
ã®CSSã¯xenïŒrequireãä»ããŠæ¥ç¶ãããŸããããã«ãããå¿
èŠã«å¿ããŠãã¹ãŠã®CSSãã¡ã€ã«ããã£ãã·ã¥ã§ããŸãã
<xen:require css="node_list.css" /> <xen:if hascontent="true"> <fieldset> <ol class="nodeList sectionMain" id="forums"> <xen:contentcheck> <xen:foreach loop="$renderedNodes" value="$node">{xen:raw $node}</xen:foreach> </xen:contentcheck> </ol> </fieldset> </xen:if> ------------------------------------- <xen:edithint template="node_link.css" /> ------------------------------------- <xen:contentcheck> <xen:foreach loop="$onlineUsers.records" value="$user"> <xen:if is="{$user.is_moderator} OR {$user.is_admin}"> <li> <xen:avatar user="$user" size="s" img="true" /> <a href="{xen:link members, $user}" class="username">{xen:helper richUserName, $user}</a> <div class="muted">{xen:helper userTitle, $user}</div> </li> </xen:if> </xen:foreach> </xen:contentcheck>
ãã³ãã¬ãŒãã§ã®ãã«ããŒã®äœ¿çšã«æ³šæããŠãã ããã Symfonyã®å Žåã®ããã«ããã«ããŒã¯åãªãã¯ã©ã¹ã¡ãœããã§ãã ããšãã°ãhelperUserLinkãã«ããŒã³ãŒãã¯æ¬¡ã®ãšããã§ãã
public static function helperUserLink(array $user) { return '<a href="' . XenForo_Link::buildPublicLink('members', $user) . '" class="username">' . htmlspecialchars($user['username']) . '</a>'; }
æ€çŽ¢ãšã³ãžã³
XenForoã®æ€çŽ¢ãšã³ãžã³ã¯ãXenForo_Search_SourceHandler_Abstractããç¶æ¿ãããå¥ã®ã¯ã©ã¹ãšããŠå®è£
ãããŸãïŒVBã§ç§ãå«ããªå®è£
ãšã¯ç°ãªããéçºè
èªèº«ã¯é·ãéæ··ä¹±ããŠãããããåçŽã«èªããŠããŸããïŒã çŸåšãMySqlFt.phpïŒã¯ã©ã¹XenForo_Search_SourceHandler_MySqlFtã¯XenForo_Search_SourceHandler_Abstractãæ¡åŒµããŸãïŒã¯1ã€ããå®è£
ãããŠããŸããããè¿ãå°æ¥Sphinxãç»å Žããã¯ãã§ãã ä»æ¥ã®ãã¡ãã·ã§ã³ã¯ããã§ã:)ãã©ãŒã©ã ã¯ä»¥åãšåãã§ã¯ãããŸããã é£èºçã«æé·ã......
管çããã«ã«ã¯å¥ã®æ€çŽ¢ãšã³ãžã³ãæå¹ã«ãããªãã·ã§ã³ã¯ãããŸããããããããŸã ããŒã¿çã§ããããšãå¿ããªãã§ãã ããã
ããŒã«ãªãŒãŒã·ã§ã³ã·ã¹ãã
ããŒã«ãªãŒãŒã·ã§ã³ã·ã¹ãã ã¯ããã¬ãŒãºã°ã«ãŒãããŸã£ãããªãããšãé€ããŠãVBulletinã®é¡äŒŒç©ãã»ãŒå®å
šã«ç¹°ãè¿ããŸãã è±èªã®ãã¬ãŒãºãã¡ã€ã«ã®å
é ã¯æ¬¡ã®ãšããã§ãã
<?xml version="1.0" encoding="utf-8"?> <phrases> <phrase title="1_more_message" global_cache="0" version_id="1000017" version_string="1.0.0 Alpha 7"><![CDATA[1 more message]]></phrase> <phrase title="about" global_cache="0" version_id="1000015" version_string="1.0.0 Alpha 5"><![CDATA[About]]></phrase>
åã¢ããªã³ã«ã¯ç¬èªã®ãã¬ãŒãºãå«ããããšãã§ããŸãã èšèªããšã¯ã¹ããŒãã§ããŸãã ã¢ããªã³ã¯ç®¡çããã«ã§çŽæ¥ç¿»èš³ã§ããŸãã
ãšããã§ãXenForoã®ãã·ã¢èªã®ããŒã«ã©ã€ãº
ã¯ã»ãŒæºåãã§ããŠããŸãã
ã¹ã¿ã€ã«ã·ã¹ãã
ç§ã¯ãã¶ã€ããŒã§ã¯ãããŸããããäžè¬çã«ã¯å³ãæªãã§ãã ãã¶ã€ã³ãšãã®éçºã«é¢ãããã¹ãŠãç§ãæããããŸãã ããããXenForoã«ã¯ãVBã«äŒŒãããªãŒã®ãããªã¹ã¿ã€ã«ã·ã¹ãã ããããŸãããã®ã·ã¹ãã ã§ã¯ãããã€ãã®ã¹ã¿ã€ã«ãããŒã¹ã«ããŠããã®èšå®ãŸãã¯ãã³ãã¬ãŒãã®äžéšãå€æŽã§ããŸãã CyrusãšMikeã ãããç§ãä»ãŸã§èŠãäžã§æãã¯ãŒã«ãªCSSãšãã£ã¿ãŒãå®è£
ããŸããã Dreamweaverã¯äŒãã§ããŸã:)ã XenForoã§ã¯ããã¹ãŠãéåžžã«èŠèŠçã«æ§æããã³æ§æãããŸãã 2,000åã®å€æ°ãæã€ã·ãŒãã«ã€ããŠã¯ãCSSãçŽæ¥ââç·šéããããšãå¿ããŠãã ããã ããã§ã¯ãã»ã¯ã·ã§ã³ã®99ïŒ
ã1ã€ã®ç»é¢ã«åãŸãããã«ããã¹ãŠãéåžžã«é©åã«ã°ã«ãŒãåãããŠããŸãã ç§ãèžè¡çãªè¶£å³ãæã£ãŠããã®ã§ããã¶ã€ã³ã®é¢ã§ããªããåžç€ã§ã¯ãªãå Žåãããããããªãã¯èªåã§ã¹ã¿ã€ã«ãäœãããšãã§ããã®ã§ãããããããªãã®ãã¶ã€ããŒã解任ããããšãã§ããŸãïŒæ°ã¶æã§ããšãã£ã¿ãŒã§ååã«éãã§ããéïŒã
èªèšŒã·ã¹ãã
ããšãã°ãWordPressã®ããŒã¿ããŒã¹ã¯ãããŸããïŒ ãã¹ã¯ãŒããä¿åããŠãWPããXenForoããŒã¿ããŒã¹ã«ãŠãŒã¶ãŒãã€ã³ããŒãããŸãïŒ åŸã§æ©èœãããã«ã¯ãXenForo_Authentication_Abstractã¯ã©ã¹ãæ¡åŒµããŠãXenForoã«ãã¹ã¯ãŒãã®ç¢ºèªæ¹æ³ãæ瀺ããã ãã§ãã ãŠãŒã¶ãŒããŒã¿ã¯ãxf_user_authenticateããŒãã«ã«ãã£ãŠèªèšŒã·ã¹ãã ã«ãªã³ã¯ãããŸãã
éä¿¡ãµãŒãã¹
ããªãé·ãéããã©ãŒã©ã ã¯ICQãªã©ã®ããŸããŸãªéä¿¡ã·ã¹ãã ã§é£çµ¡å
ã瀺ãããšãèš±å¯ãããŠããŸããã XenForoã«ã¯ãç°¡åã«æ¡åŒµå¯èœãªé£çµ¡å
ãµãŒãã¹ã·ã¹ãã ããããŸãã ã³ã³ãããŒã«ããã«ã§ãµãŒãã¹ãè¿œå ã§ããŸãã ãµãŒãã¹ãµããŒãã¯ã©ã¹ã¯æ¬¡ã®ããã«ãªããŸãã
<?php class XenForo_Model_IdentityService_Icq extends XenForo_Model_IdentityService_Abstract { protected function _getIdentityServiceId() { return 'icq'; } static public function verifyAccountName(&$accountName, &$error) { if (!preg_match('/^\d+$/', $accountName)) { $error = new XenForo_Phrase('please_enter_valid_icq_uin_using_numeric_characters_only'); return false; } return true; } }
çŸåšããããã¡ã€ã«ã®ICQãã£ãŒã«ãã«ãSelling wool socksããšããè¡ãå
¥åããããšã¯ã§ããŸããã
æš©å©ãšç¹æš©ã®ã·ã¹ãã
ã·ã¹ãã ã®åãŠãŒã¶ãŒã°ã«ãŒãã«ã¯ãããã©ã«ãã§æš©éããããŸãã ããã«ãåã°ã«ãŒãã®æš©éã¯ãä»»æã®ã¿ã€ãã®ããŒãã§è¿œå ã§æ§æã§ããŸãã ãã¡ãããç¹æš©ã¯ç¶æ¿ãããŸãã
èš±å¯ã«ã¯4ã€ã®ã¿ã€ãããããŸãã ç¶æ¿ãèš±å¯ãåãæ¶ããæåŠã ãããŸã§ãRevokeãšDenyã®éããç解ã§ããŸããã§ããã ããã«ãããã©ã«ãã§ã¯ãRevokeã¯ã°ã«ãŒãã®æš©å©ã«å«ãŸããŠããŸãããããã¯ããã®ã¿ã€ããæš©å©ã®ç¶æ¿ã«é¢é£ä»ããããŠããããšã瀺ããŠããŸãã
ãã©ãŒã©ã ããããã°ã¢ãŒãã«åãæ¿ããåŸãã·ã¹ãã ã«æ°ããçš®é¡ã®ç¹æš©ãè¿œå ã§ããŸãïŒã¢ããªã³ã§è¿œå ããããšãã§ããŸãïŒã ã³ãŒãã§ã¯ã次ã®ããã«ãã§ãã¯ãããŸãã
$users[$userId]['canCleanSpam'] = (XenForo_Permission::hasPermission($visitor['permissions'], 'general', 'cleanSpam') && $this->getModelFromCache('XenForo_Model_User')->couldBeSpammer($users[$userId]));
äžè¬çãªå°è±¡
äžè¬çã«ãXenForoã³ãŒãã¯ç§ã«è¯ãå°è±¡ãäžããŸããã 圌ã¯çŸãããç解ããããã調åããããã³ã¡ã³ããšOOPã«æºã¡ãŠããŸãã æåã¯ãã¯ã©ã¹ã®æ°ãèŠãŠãæãã£ãŠèšäºã延æããäºå®ã§ããããä»ã§ã¯çµããã«è¿ã¥ããŠãã»ãšãã©ãã¹ãŠã倧äžå€«ã ãšèšããŸãã çãããå°ãã§ããããšæããŸãã
ãšããã§ãç§ã¯æ¬åœã«PHPBB3ã楜ãã¿ã«ããŠããã®ã§ãçå£ã«ããããã£ãã®ã§ãã ããããç§ã«ãšã£ãŠã¯ããã®ã¢ãŒããã¯ãã£ã¯XenForoã®ã¢ãŒããã¯ãã£ã»ã©æ確ã§è«ççã§ã¯ãããŸããã æ£çŽãªãšãããç§ã¯PHPBB3ã«å
¥ã£ãããšã¯ãããŸããã Symfony2ã®4ã€ãåŸ
ã¡ãŸã...
ããããããã ãã§ãã XenForoã®ãã©ã°ã€ã³ã«é¢ãã質åã¯ã
ãã¡ãã§ç¢ºèªã§ã
ãŸã ã
å
¬åŒãã©ãŒã©ã ã«ã¯æ¢ã«ããã€ãïŒçŸåš18ïŒãããããŠã³ããŒãããŠç¢ºèªã§ããŸãã ç§èªèº«ã¯ãŸã ãšã³ãžã³ã®ã©ã€ã»ã³ã¹ã賌å
¥ããŠããŸãããçç±ã¯ãããŸããã ãããã£ãŠãç 究çšã«æäŸãããã³ãŒãã«ã€ããŠã¯ããã§ã«å
¬åŒããŒãžã§ã³ã賌å
¥ããå人ã«æè¬ããŸãã
ãã®èšäºãäžå®å
šã§ãããã誰ãã«èª€ã£ãŠäœæãããŠããããã«æãããå Žåã¯ãè¬çœªããŸãã ããã¯ããããã¢ãŒããã¯ãã£ã®ç§ã®æåã®ã¬ãã¥ãŒãªã®ã§ãã³ã¡ã³ãã§ã®æ¹å€ãåãã§åãå
¥ããŸãã æ¹å€ã®äžéšã¯ãããã«ç§ã®ã«ã«ããšè©äŸ¡ãèŠããšæããŸã:)äœããåŠã¶ããšã«ãŸã èå³ããããªããã³ã¡ã³ãã§ç¥ãããŠãã ãããããã«ç解ã§ãããªããç§ã¯èšäºãå®æãããŸãã