JomSocial 已写入核心,需要升级
JomSocial was written to core and needs upgrade
我正在接手一个项目,原开发者定制了 JomSocial 并直接写信给:
components/com_community/templates/jomsocial/layouts
并在那里创建文件夹并写入 base.php 等文件。
目前JomSocial的定制版本是4.0.9,我需要更新到最新的- 4.4.5,Joomla版本是- 3.8.1
我知道我需要在我的模板文件夹中创建一个覆盖文件夹,例如每个更改的 base.php 文件示例:
/templates/yourTemplateName/html/com_community/layouts/frontpage/base.php
但是为了保留开发人员所做的更改并拥有最新版本的 JomSocial,同时又不妨碍像在这种情况下那样的进一步更新,如果我没记错的话,我将不得不这样做:
将他在 4.0.9 上所做的核心文件的更改分开。
在我的模板文件夹中为我需要自定义的每个核心文件创建文件夹和文件,并让它们仅包含开发人员使用 4.4.5 更新版本所做的更改。
我做对了吗?还有另一种方法吗?任何帮助将不胜感激。
关于如何覆盖模板中的布局文件,您是正确的。不幸的是,它将您的覆盖绑定到特定模板 - 安装不同的模板并将其设置为默认模板将丢失您的覆盖。
您可以覆盖组件中的任何其他文件,方法是使用插件并拦截对组件控制器的调用,替换您自己的。使用这种方法,您必须在入口点(控制器)和要应用更改的文件之间复制所有 Jomsocial 文件,这可能是原始开发人员直接覆盖核心组件文件的原因(无法安全更新无论如何都使用这种方法,而无需检查您从核心组件文件复制到覆盖中的代码的更改)。这种方法看起来像:
class plgSystemComSocialOverride extends JPlugin {
public function __construct(&$subject, $config = array()) {
parent::__construct($subject, $config);
}
public function onAfterRoute() {
$app = JFactory::getApplication();
if('com_social' == JRequest::getCMD('option') && !$app->isSite()) {
require_once(dirname(__FILE__) . DS . 'comsocialoverride' . DS . 'my_jomsocial_controller.php');
}
}
}
我认为您可以将上述方法与操纵 Joomla 的 class 加载程序结合起来,以避免必须直接复制 Jomsocial 文件以将其 include
语句更改为覆盖文件。在这种方法中,您将如上所述覆盖控制器并从该覆盖的控制器调用 Jomsocial 控制器。但在您这样做之前,您需要将覆盖的 base.php
或其他内容添加到 class 加载程序。我不确定新版本的 Jomsocial 是否使用自动加载(即 import()
而不是 include()
)。
我正在接手一个项目,原开发者定制了 JomSocial 并直接写信给:
components/com_community/templates/jomsocial/layouts
并在那里创建文件夹并写入 base.php 等文件。
目前JomSocial的定制版本是4.0.9,我需要更新到最新的- 4.4.5,Joomla版本是- 3.8.1
我知道我需要在我的模板文件夹中创建一个覆盖文件夹,例如每个更改的 base.php 文件示例:
/templates/yourTemplateName/html/com_community/layouts/frontpage/base.php
但是为了保留开发人员所做的更改并拥有最新版本的 JomSocial,同时又不妨碍像在这种情况下那样的进一步更新,如果我没记错的话,我将不得不这样做:
将他在 4.0.9 上所做的核心文件的更改分开。
在我的模板文件夹中为我需要自定义的每个核心文件创建文件夹和文件,并让它们仅包含开发人员使用 4.4.5 更新版本所做的更改。
我做对了吗?还有另一种方法吗?任何帮助将不胜感激。
关于如何覆盖模板中的布局文件,您是正确的。不幸的是,它将您的覆盖绑定到特定模板 - 安装不同的模板并将其设置为默认模板将丢失您的覆盖。
您可以覆盖组件中的任何其他文件,方法是使用插件并拦截对组件控制器的调用,替换您自己的。使用这种方法,您必须在入口点(控制器)和要应用更改的文件之间复制所有 Jomsocial 文件,这可能是原始开发人员直接覆盖核心组件文件的原因(无法安全更新无论如何都使用这种方法,而无需检查您从核心组件文件复制到覆盖中的代码的更改)。这种方法看起来像:
class plgSystemComSocialOverride extends JPlugin {
public function __construct(&$subject, $config = array()) {
parent::__construct($subject, $config);
}
public function onAfterRoute() {
$app = JFactory::getApplication();
if('com_social' == JRequest::getCMD('option') && !$app->isSite()) {
require_once(dirname(__FILE__) . DS . 'comsocialoverride' . DS . 'my_jomsocial_controller.php');
}
}
}
我认为您可以将上述方法与操纵 Joomla 的 class 加载程序结合起来,以避免必须直接复制 Jomsocial 文件以将其 include
语句更改为覆盖文件。在这种方法中,您将如上所述覆盖控制器并从该覆盖的控制器调用 Jomsocial 控制器。但在您这样做之前,您需要将覆盖的 base.php
或其他内容添加到 class 加载程序。我不确定新版本的 Jomsocial 是否使用自动加载(即 import()
而不是 include()
)。