1

我正在接手一个项目,其中原始开发人员定制了 JomSocial 并直接写信给:

组件/com_community/模板/jomsocial/布局

并在那里创建文件夹以及写入 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,同时又不妨碍像在这种情况下那样的进一步更新,如果我没记错的话,我将不得不这样做:

  1. 将更改与他在 4.0.9 上所做的核心文件分开。

  2. 在我的模板文件夹中为我需要自定义的每个核心文件创建文件夹和文件,并让它们仅包含开发人员使用 4.4.5 更新版本所做的更改。

我做对了吗?还有另一种方法吗?任何帮助将不胜感激。

4

1 回答 1

1

您对如何覆盖模板中的布局文件是正确的。不幸的是,它将您的覆盖绑定到特定模板 - 安装不同的模板并将其设置为默认值将丢失您的覆盖。

您可以使用插件覆盖组件中的任何其他文件并拦截对组件控制器的调用,替换为您自己的。您必须使用这种方法复制入口点(控制器)和要应用更改的文件之间的所有 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 的类加载器结合起来,以避免必须直接复制 Jomsocial 文件才能将它们的include语句更改为您的覆盖文件。在这种方法中,您将覆盖上面的控制器并从该覆盖的控制器中调用 Jomsocial 控制器。但在你这样做之前,你会添加你的覆盖base.php或其他类加载器。我不确定新版本的 Jomsocial 是否使用自动加载(即import(),而不是include())。

于 2017-11-03T13:29:27.113 回答