JoomlaのフロントエンドからBootstrapを完全に削除するにはどうすればよいですか?


14

最近、デバッグのために、JoomlaのフロントエンドからBootstrapのすべてのインスタンスを削除しようとしました。Joomla 3.3の比較的新しいインストールでスケルトンテンプレートを使用していました。テンプレートからBootstrapのすべてのインクルードを削除し、それをロードできると考えたすべてのプラグインとモジュールをオフにしました。Joomlaキャッシュもクリアしました。それにも関わらず、firebugは、Joomlaが/media/jui/js/bootstrap.min.jsからbootstrap.min.jsをロードしようとしていることを教えてくれました

ブートストラップファイルの名前を一時的に変更することで問題を回避しましたが、不思議に思いました。

  • これはすべてのJoomla 3.3インストールで発生しますか、それとも私のものですか?
  • ブートストラップのロード元を特定する方法はありますか?
  • ブートストラップの読み込みを無効にする方法はありますか?

回答:


15

これはすべてのJoomla 3.3インストールで発生しますか、それとも私のものですか?

バージョン:3.2-3.7(テスト済み)。

ブートストラップの読み込みを無効にする方法はありますか?

はいあります。イベントonBeforeCompileHeadを使用して、ヘッダーを作成する前にそれを削除するだけです(詳細はドキュメントをご覧ください。)。

さまざまな拡張機能によってライブラリをいつでもアタッチできる可能性を考慮して。テンプレートとモジュールから数行削除するだけでは不十分です。これは完璧なソリューションではありません。しかし、あなたはそれがロードしないことを確信することができます。

私のプロジェクトでは、ブートストラップ3.2を使用しています。ブートストラップ2を削除する方法を見つけるために1日を費やしました。

唯一の解決策は、ヘッダーを作成する前にスクリプトを削除することでした。

私の解決策はプラグインを作成することです:

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
すごい!おかげで、自分で「jqueryとboostrapを削除」プラグインを作成するのに5分かかりました。
アレクサンドルパウロ

16

コアファイルの編集を伴わないため、私が常に捨てたい代替ハックは、テンプレート内の空のcssファイルでcssファイルをオーバーライドすることです。これにより、リソースをロードするためにサーバーが呼び出されますが、ブートストラップスタイルを設定する必要はありません。

ここに空のファイルを追加するだけです:templates/YOUR_TEMPLATE/css/jui/bootstrap.min.cssおよびtemplates/YOUR_TEMPLATE/js/jui/bootstrap.min.js

当然、ブートストラップを使用するためにセットアップされるコンポーネントはスタイル付けされていないように見え、ブラウザによってcssおよびjsファイルをロードするための呼び出しがまだあります。ただし、ファイルは空(ダウンロードサイズが小さい)であり、スタイリングには影響しません。


そのように考えたことはありません、クール!!!
モハドアブドゥルムジブ

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のコアからロードされます。これは、動作に必要ないくつかのコア機能のためです。したがって、完全に削除すると、Tooltipなどの一部の機能が動作しなくなります。

それを削除する唯一の方法(私が知っている)は、次のファイルのコアハックを使用することです:(非推奨

libraries \ cms \ html \ bootstrap.php

私が考えることができる他の唯一の方法は、ブートストラップライブラリを呼び出して削除するすべてのモジュール、コンポーネント、およびプラグインのテンプレートオーバーライドを作成することです。

どちらの方法も良い方法ではありませんが、Joomla 3.xはBootstrapで構築されているため、一緒に生きる必要があります


1
どうもありがとう。彼らはオフボタンを持っていません少し目が見えるようです。彼らがJoomla 3.4に追加することを願っています:)
TryHarder 14年

コアファイルは必要ありません。限目。コアファイルをハッキングすることなく、Bootstrapのすべてのトレースを削除する方法は他にもたくさんありますが、それらはすべて望ましい方法です。それらはすべて、ハッキングされたコアファイルとは言えないJoomlaの更新後も存続します。
セスウォーバートン

@seth、はい、今は他の方法があります。この回答は9か月前に書かれたもので、当時は他の方法は知りませんでした
Lodder

@Valentin Despa、できませんので、この回答を削除してもらえますか?
ロッダー

@oooooo-ここでは解決策ではないため、回答から "accepted"フラグを削除するよう要求しました。彼らがそうすることができない場合、誰か他の人の答えを「受け入れられた」とマークしてください。
ロッダー

3

2つの方法があります。

  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 3なので、いくつかの異なるカスタムテンプレートで、joomlaの見出し行の後、テンプレートヘッドタグ内にテンプレートヘッドにブートストラップ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から直接読み込むこともできます。

したがって、Joomlaは、少なくともCSSに対して、BootstrapまたはBootstrapの任意のバージョンを使用することを強制しません。必要に応じて、他のレスポンシブフレームワークを使用できます。すべてテンプレートで行われます。ハックやプラグインは不要です。


1

Joomla 3.3(未満)は、Bootstrap 3.XではなくBootstrap 2.3に基づいています

私はBootstrapの新しいリリースに移行したかったのですが、もちろん私の考えに基づいて多くのポジションを変更する必要がありました。私はそれをやったが、非常に最近。

多くのコードで、以下のコードのようなBootstrapを無効にする必要がありました。

// JavaScriptフレームワークを追加JHtml :: _( 'bootstrap.framework');

それを行うための新しい完全なJoomlaテンプレートを作成しました。しかし、別のUIフレームワークに移行する場合は、これらのプロセスも継続する必要があり、少なくとも30を超えるコンポーネント、モジュール、プラグイン、およびいくつかのJoomlaレガシーコードを再開発する必要があります。簡単ですが、時間がかかります。

2015年7月2日の新しい認識:Joomlaの「unset」メソッドに基づいて、このフォーラムで友人の何人かが以前のバージョンのBootstrapおよびMootoolsまたはその他のJavascriptライブラリまたはCSSファイルを完全に無効にできると述べました。悪い解決策について言及する前に申し訳ありません。この投稿を読んで、ブートストラップを無効にするための詳細情報を取得できます。


ナイスキャッチ。ブートストラップ3は間違いです。今すぐ編集します。
TryHarder

-2

または、Yoothemeのテンプレートを使用してデフォルトとして設定し、そのテンプレート設定で「ブートストラップをロードしない」を選択できます。


3
あなたは基本的にブートストラップを削除するために49ユーロもオプションだと言っていますか?
ローダー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.