JomSocial写入核心并需要升级

时间:2017-11-02 09:51:51

标签: php joomla jomsocial

我正在接管一个原始开发人员自定义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更新版本所做的更改。

  3. 我说得对吗?还有另一种方法吗?任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

您正确了解如何覆盖模板中的布局文件。不幸的是,它将您的覆盖与特定模板联系在一起 - 安装不同的模板并将其设置为默认模板将失去您的覆盖。

您可以使用插件覆盖组件中的任何其他文件,并拦截对组件控制器的调用,替换您自己的。您必须使用此方法将入口点(控制器)和要应用更改的文件之间的所有Jomsocial文件复制到此方法,这可能是原始开发人员直接覆盖核心组件文件的原因(可以' t无论如何都要安全地使用这种方法进行更新,而不检查您从核心组件文件复制到覆盖中的代码的更改。这种方法看起来像:

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())。