Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Joomla 3中的管理员覆盖_Joomla_Joomla3.0 - Fatal编程技术网

Joomla 3中的管理员覆盖

Joomla 3中的管理员覆盖,joomla,joomla3.0,Joomla,Joomla3.0,我正试图超越 /administrator/components/com_media/views/imageslist 为了使显示更加用户化,当文件夹中有大量大型图像时,列表加载速度非常慢。但是,我无法使覆盖生效: 我已经复制了这些文件 /administrator/components/com_media/views/imageslist/tmpl/default.php and /administrator/components/com_media/views/imageslist/t

我正试图超越

/administrator/components/com_media/views/imageslist 
为了使显示更加用户化,当文件夹中有大量大型图像时,列表加载速度非常慢。但是,我无法使覆盖生效: 我已经复制了这些文件

/administrator/components/com_media/views/imageslist/tmpl/default.php and 
/administrator/components/com_media/views/imageslist/tmpl/default_image.php 

isis设置为安装中的默认管理模板。在administrator(iframe)中显示com_介质时,使用以下url:

/administrator/index.php?option=com_media&view=imagesList&tmpl=component&folder=
但它总是直接从com_介质加载文件,而不是从模板覆盖加载文件。(我注意到视图显示imagesList,而文件夹名为imagesList)。这可能只是joomla的一只虫子。有什么想法吗

关于乔纳斯

编辑:试图在这方面深入挖掘。似乎当JViewLegacy调用loadtemplate时,路径如下所示:

Array ( 
[0] => /home/XXX/www/administrator/components/com_media/views/imageslist/tmpl/ 
[1] => /home/XXX/www/administrator/templates/isis/html/com_media/imageslist/ 
[2] => /home/XXX/www/administrator/components/com_media/views/imageslist/tmpl/ )

因此,即使覆盖的路径在路径中,它也不会作为第一个命中,而是加载原始组件中的文件,而不是覆盖。然而,我仍然不知道为什么会发生这种情况。谢谢你的帮助

这很有趣,我认为这与使用组件格式而不是html格式有关。。。如果您查看插件,您将看到如下链接:

$link='index.php?option=com\u media&;视图=图像&;tmpl=组件和;e_name='$名字。”&;资产='$资产。”&;作者='$作者

tmpl=component这一事实意味着它不会使用index.php,而是使用component.php


除此之外,我还没有深入研究代码,但我认为覆盖将因此无法工作

这很有趣,我认为这与使用组件格式而不是html格式有关。。。如果您查看插件,您将看到如下链接:

$link='index.php?option=com\u media&;视图=图像&;tmpl=组件和;e_name='$名字。”&;资产='$资产。”&;作者='$作者

tmpl=component这一事实意味着它不会使用index.php,而是使用component.php


除此之外,我还没有深入研究代码,但我认为覆盖将因此无法工作

这个帖子已经9个月了,但我也有同样奇怪的行为。。。问题出在com_媒体控制器中。。。具体来说,组件将模板路径添加到第68行的路径列表中


我删除了核心组件中的行,覆盖工作。

这篇文章已经9个月了,但我有同样奇怪的行为。。。问题出在com_媒体控制器中。。。具体来说,组件将模板路径添加到第68行的路径列表中


我删除了核心组件中的行,覆盖可以工作。

对于com_媒体覆盖,我解决这个问题的一种方法是创建一个带有onAfterRoute()事件处理程序的系统插件,以捕获和评估请求URL参数。然后,我可以设置模板覆盖路径,并对视图和模板使用包含。我的示例系统插件代码位于/plugins/system/mycommedia/mycommedia.php

// no direct access
defined ( '_JEXEC' ) or die ( 'Restricted access' );

jimport('joomla.plugin.plugin');

class plgSystemMyComMedia extends JPlugin { 

    public function onAfterRoute() {

        if('com_media' == JRequest::getCMD('option')) {

            $view = JRequest::getCMD('view');

            if (('images' == $view) || ('imageslist' == $view)) {

                $overridePath = FOFPlatform::getInstance()->getTemplateOverridePath('com_media', true) . '/' . $view;

                require_once $overridePath . '/view.html.php';
            }
        }
    }
}
上面这个版本的onAfterRoute()函数演示了如何仅对后端(管理)视图和模板应用覆盖

public function onAfterRoute() {

    $app = JFactory::getApplication();

    if ($app->isAdmin()) {

        if('com_media' == JRequest::getCMD('option')) {

            $view = JRequest::getCMD('view');

            if (('images' == $view) || ('imageslist' == $view)) {

                $overridePath = FOFPlatform::getInstance()->getTemplateOverridePath('com_media', true) . '/' . $view;

                require_once $overridePath . '/view.html.php';
            }
        }
    }
}
通过将com_媒体组件复制到模板文件夹中,创建新的自定义模板和视图。例如,如果要为管理员isis模板自定义media manager:

抄袭 /管理员/组件/com_媒体/视图/图像 到 /管理员/模板/isis/html/com_媒体/图像

抄袭 /管理员/组件/com_介质/视图/图像列表 到 /管理员/模板/isis/html/com_媒体/图像列表

然后修改view.html.php的两个副本,以包含各自的默认模板副本

在显示功能结束时,注释掉或替换

parent::display($tpl);
使用模板副本的include指令

include( dirname(__FILE__) . '/tmpl/default.php');
还要注释或替换imageslist默认模板中的loadTemplate(“文件夹”)和loadTemplate(“图像”)函数调用,以包括各自的文件和文件夹默认模板副本

例如,在/administrator/templates/isis/html/com_media/imageslist/tmpl/default.php中

<?php for ($i = 0, $n = count($this->folders); $i < $n; $i++) :
    $this->setFolder($i);
    //echo $this->loadTemplate('folder');
    include( dirname(__FILE__) . '/default_folder.php');
endfor; ?>

<?php for ($i = 0, $n = count($this->images); $i < $n; $i++) :
    $this->setImage($i);
    //echo $this->loadTemplate('image');
    include( dirname(__FILE__) . '/default_image.php');
endfor; ?>

com_媒体视图和模板现在将被加载,而不是它们的核心副本,并且可以在不攻击任何核心Joomla文件的情况下进行定制


更多信息@

对于com_媒体覆盖,我解决这一问题的一种方法是创建一个带有onAfterRoute()事件处理程序的系统插件,以捕获和评估请求URL参数。然后,我可以设置模板覆盖路径,并对视图和模板使用包含。我的示例系统插件代码位于/plugins/system/mycommedia/mycommedia.php

// no direct access
defined ( '_JEXEC' ) or die ( 'Restricted access' );

jimport('joomla.plugin.plugin');

class plgSystemMyComMedia extends JPlugin { 

    public function onAfterRoute() {

        if('com_media' == JRequest::getCMD('option')) {

            $view = JRequest::getCMD('view');

            if (('images' == $view) || ('imageslist' == $view)) {

                $overridePath = FOFPlatform::getInstance()->getTemplateOverridePath('com_media', true) . '/' . $view;

                require_once $overridePath . '/view.html.php';
            }
        }
    }
}
上面这个版本的onAfterRoute()函数演示了如何仅对后端(管理)视图和模板应用覆盖

public function onAfterRoute() {

    $app = JFactory::getApplication();

    if ($app->isAdmin()) {

        if('com_media' == JRequest::getCMD('option')) {

            $view = JRequest::getCMD('view');

            if (('images' == $view) || ('imageslist' == $view)) {

                $overridePath = FOFPlatform::getInstance()->getTemplateOverridePath('com_media', true) . '/' . $view;

                require_once $overridePath . '/view.html.php';
            }
        }
    }
}
通过将com_媒体组件复制到模板文件夹中,创建新的自定义模板和视图。例如,如果要为管理员isis模板自定义media manager:

抄袭 /管理员/组件/com_媒体/视图/图像 到 /管理员/模板/isis/html/com_媒体/图像

抄袭 /管理员/组件/com_介质/视图/图像列表 到 /管理员/模板/isis/html/com_媒体/图像列表

然后修改view.html.php的两个副本,以包含各自的默认模板副本

在显示功能结束时,注释掉或替换

parent::display($tpl);
使用模板副本的include指令

include( dirname(__FILE__) . '/tmpl/default.php');
还要注释或替换imageslist默认模板中的loadTemplate(“文件夹”)和loadTemplate(“图像”)函数调用,以包括各自的文件和文件夹默认模板副本

例如,在/administrator/templates/isis/html/com_media/imageslist/tmpl/default.php中

<?php for ($i = 0, $n = count($this->folders); $i < $n; $i++) :
    $this->setFolder($i);
    //echo $this->loadTemplate('folder');
    include( dirname(__FILE__) . '/default_folder.php');
endfor; ?>

<?php for ($i = 0, $n = count($this->images); $i < $n; $i++) :
    $this->setImage($i);
    //echo $this->loadTemplate('image');
    include( dirname(__FILE__) . '/default_image.php');
endfor; ?>

com_媒体视图和模板现在将被加载,而不是它们的核心副本,并且可以在没有黑客攻击的情况下进行定制