如何从Joomla的前端完全删除Bootstrap?


14

最近,我尝试从Joomla前端删除所有Bootstrap实例,以进行调试。我在安装相对较新的Joomla 3.3时使用了框架模板。我从模板中删除了所有Bootstrap包含的内容,并关闭了所有可能加载的插件和模块。我还清除了Joomla缓存。尽管如此,firebug告诉我Joomla仍在尝试从/media/jui/js/bootstrap.min.js加载bootstrap.min.js。

我通过临时重命名bootstrap文件来解决这个问题,但这让我感到奇怪。

  • 这会在所有Joomla 3.3安装中发生还是仅仅是我的?
  • 有什么办法可以确定从哪里加载引导程序?
  • 有什么办法可以禁止引导加载?

Answers:


15

这会在所有Joomla 3.3安装中发生还是仅仅是我的?

在版本:3.2-3.7(我测试过)。

有什么办法可以禁止引导加载?

就在这里。使用事件onBeforeCompileHead(在文档中有更多信息),只需在构建标题之前将其删除即可。

考虑到可以通过各种扩展随时附加库。从模板和模块中删除几行是不够的。这不是一个完美的解决方案。但是您可以确定它不会加载。

在我的项目中,我使用的是bootstrap 3.2。我花了一整天的时间来找到一种方法来删除引导程序2。

唯一的解决方案是在构建标头之前删除脚本。

我的解决方案是建立一个插件:

class plgSystemYourPlugin extends JPlugin
{
    public function onBeforeCompileHead()
    {
        // Application Object
        $app = JFactory::getApplication();

        // Front only
        if( $app instanceof JApplicationSite )
        {
            $doc            = JFactory::getDocument();
            // Remove default bootstrap
            unset($doc->_scripts[JURI::root(true).'/media/jui/js/bootstrap.min.js']);
        }
    }
}

它可以在Joomla中使用!3.2-3.6

(有兴趣的话)我还需要删除此内容:

    unset($doc->_scripts[JURI::root(true).'/media/system/js/frontediting.js']);
    unset($doc->_scripts[JURI::root(true).'/media/system/js/html5fallback.js']);

2
大!感谢您,我花了5分钟创建了自己的“删除jquery和boostrap”插件。
亚历山大·保罗

16

我不喜欢编辑核心文件,这是我一直喜欢抛出的另一种方法,那就是在模板中用空白的CSS文件覆盖CSS文件。这仍然会导致调用服务器以加载资源,但是您不必具有任何引导样式。

只需在此处添加一个空文件:templates/YOUR_TEMPLATE/css/jui/bootstrap.min.csstemplates/YOUR_TEMPLATE/js/jui/bootstrap.min.js

自然,任何使用引导程序的组件设置看起来都是没有样式的,浏览器仍然会调用加载CSS和js文件。但是,文件将为空(较小的下载大小),并且不会影响样式。


没想到那样,太酷了!!!
Mohd Abdul Mujib

7

只是一个想法(未经测试),但是如何构建一个可以使Bootstrap复位的小插件呢?

像这样:

public function onAfterRender() {
    //get the array containing all the script declarations
     $document = JFactory::getDocument(); 
     $headData = $document->getHeadData();
     $scripts = $headData['scripts'];

     //remove script
     unset($scripts['/media/jui/js/bootstrap.min.js']);
     $headData['scripts'] = $scripts;
     $document->setHeadData($headData);
}

4

如果您不想创建自己的插件,那么一个简单的解决方案是尝试:

在模板中未设置

//JS
unset($doc->_scripts[$this->baseurl.'/media/jui/js/bootstrap.min.js']);
// CSS    
unset($doc->_stylesheets[$this->baseurl.'/media/jui/js/bootstrap.css']);

但是-即使您将其删除,某些扩展程序仍会插入js或css。我发现的最可靠的方法是:

JCC-JS CSS控制插件

http://extensions.joomla.org/extensions/extension/core-enhancements/performance/js-css-control

但是-您有时仍然会在模板中插入js内联。因此-有时您需要为内联js做preg_replace。


4

从Joomla 3.x开始到今天,这一直困扰着我,至今还没有做任何事情为用户提供防止加载引导文件的选项。

不幸的是,Bootstrap是从Joomla的核心加载的,这是由于某些核心功能需要它起作用,因此,将其完全删除将阻止某些功能(例如工具提示)起作用。

删除它的唯一方法(我知道)是通过以下文件中的核心hack :(不推荐

库\ cms \ html \ bootstrap.php

我唯一想到的另一种方法是为调用引导程序库并将其删除的每个模块,组件和插件创建模板替代。

这两种方法都不是很好,但是Joomla 3.x是在Bootstrap上构建的,因此我们必须忍受它


1
谢谢罗德。他们没有关闭按钮似乎有点短视。希望他们将其添加到Joomla 3.4中:)
TryHarder 2014年

您不应该拥有核心文件。期。还有很多其他方法可以删除Bootstrap的所有痕迹,而不会破坏核心文件,所有这些方式都是可取的。所有这些都将在Joomla更新中幸存下来,不能说被黑的核心文件。
塞斯·沃伯顿

@seth,是的,现在还有其他方法。这个答案是9个月前写的,当时,我不知道别的什么方式
肺癌》杂志(Lodder),2015年

@Valentin Despa,您不能为我删除此答案吗?
罗德

@oooooo-我请求从我的答案中删除“已接受”标志,因为这不是解决方案。如果他们不能这样做,您是否可以将其他人的回答标记为“已接受”?
罗德(Lodder)

3

有两种方法:

  1. 从模板中取消设置所包含的文件,然后创建替代以防止您正在使用的任何模块或组件再次包含它们(听起来不那么有效)。

    1. 使用众多可以执行此操作的系统插件中的任何一个。就个人而言,我建议使用此https://github.com/phproberto/plg_sys_mootable,因为它可以完全控制何时何地删除文件,因此可以将其设置为例如不破坏前端编辑(如果删除,一切都会正常破裂)。

选项2具有易用性的优点,但是您仍然必须忍受不整洁的Bootstrap 2.x标记,使您的网站乱七八糟。选项1需要做更多的工作,但意味着您可以删除Bootstrap的每条痕迹。始终是我的首选。有关示例代码,请参见http://joomlafuture.com/


2

Joomla不会自动加载引导CSS,但会加载JS。如果您的模板使用标准方法加载Joomla头:

<jdoc:include type="head" />

它将按以下顺序加载mootools,jquery和bootstrap文件:

<script src="/media/system/js/mootools-core.js" type="text/javascript"></script>
<script src="/media/system/js/core.js" type="text/javascript"></script>
<script src="/media/system/js/caption.js" type="text/javascript"></script>
<script src="/media/system/js/mootools-more.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery.min.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery-noconflict.js" type="text/javascript"></script>
<script src="/media/jui/js/bootstrap.min.js" type="text/javascript"></script>

它不会加载CSS文件。您可以通过从模板文件中删除该行,然后检查哪些头文件丢失来对其进行测试。

引导CSS由您的模板加载。Joomla(我相信是2.5版本)在其媒体文件中包含了Bootstrap 2.x,以便于访问。由于某种原因,Protostar不会从媒体文件中调用引导程序。相反,他们将整个引导CSS复制并粘贴到了template.css文件中。其他框架称为Bootstrap。例如,Warp 7确实具有用于启用或禁用Bootstrap的复选框。

由于前端和后端具有不同的模板,因此可以为一个加载或禁用Bootstrap,而不能为另一个加载或禁用。如果您希望从前端而不是后端禁用Bootstrap,则没有依赖性。

我的偏好是Bootstrap 3,因此在几个不同的自定义模板上,我已经在joomla标题行之后的模板标题中以及模板head标签中下载并包含了bootstrap 3 css:

$document = JFactory::getDocument();
$document->setMetaData( 'viewport', 'width=device-width, initial-scale=1, minimum-scale=1' );
$document->addStyleSheet($this->baseurl.'/templates/'.$this->template.'/css/bootstrap.min.css');

对于诸如Warp 7之类的框架,该方法略有不同。如果愿意,也可以直接从引导CDN URL加载。

因此,至少在CSS中,Joomla不会强迫您使用Bootstrap或任何版本的Bootstrap。如果愿意,可以使用其他响应式框架。全部在模板中完成。无需黑客或插件。


1

Joomla 3.3(小于)基于Bootstrap 2.3而不是Bootstrap 3.X

我想迁移到新版的Bootstrap,并且根据我的想法,我当然要更改很多职位。我已经做到了,但是最近。

在很多代码位置,我不得不禁用Bootstrap,例如以下代码:

//添加JavaScript框架JHtml :: _('bootstrap.framework');

并制作了一个全新的完全Joomla模板来做到这一点;但是,如果我想迁移到另一个UI框架,则也必须继续执行这些过程,至少必须拥有30多个组件,模块,插件和一些Joomla旧代码才能重新开发。这很简单,但需要很多时间。

新感觉2015年7月2日:基于Joomla中的“未设置”方法,我们在该论坛中提到了一些朋友,我可以完全禁用早期版本的Bootstrap和Mootools或任何其他Javascript库或CSS文件。在提到不好的解决方案之前,我很抱歉。您可以阅读这篇文章以获取更多信息来禁用Bootstrap


不错的收获。Bootstrap 3是一个错误。我现在将对其进行编辑。
TryHarder 2014年

-2

或者,您可以使用Yootheme的模板,将其设置为默认模板,然后在该模板配置中选择“不加载引导程序”。


3
您基本上是说49欧元来删除Bootstrap也是一种选择?
Lodder
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.