web-dev-qa-db-ja.com

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

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

bootstrapファイルの名前を一時的に変更して問題を解決しましたが、不思議に思いました。

  • これはすべてのJoomla 3.3インストールで起こりますか、それとも私だけですか?
  • bootstrapがどこから読み込まれているかを特定する方法はありますか?
  • bootstrapの読み込みを無効にする方法はありますか?
14
TryHarder

これはすべてのJoomla 3.3インストールで起こりますか、それとも私だけですか?

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

bootstrapの読み込みを無効にする方法はありますか?

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

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

私のプロジェクトでは、bootstrap 3.2を使用しています。bootstrap 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']);
15
Jacek Labuda

コアファイルの編集を含まないため、私がいつも捨てたい別のハックは、テンプレートのcssファイルを空のcssファイルで上書きすることです。これでもサーバーを呼び出してリソースをロードすることになりますが、bootstrapのスタイルを設定する必要はありません。

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

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

17
David Fritsch

ただのアイデア(テストされていません)ですが、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);
}
7
johanpw

独自のプラグインの作成を検討していない場合、簡単な解決策は次のようにすることです。

テンプレートで設定解除

//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
iamrobert

これは、Joomla 3.xの登場以来私を悩ませてきたものであり、現在でも、bootstrapファイルが読み込まれないようにするオプションをユーザーに提供することは何も行われていません。

残念ながら、BootstrapはJoomlaのコアからロードされますが、これは機能するために必要ないくつかのコア機能が原因です。したがって、完全に削除すると、ツールチップなどの一部の機能が機能しなくなります。

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

libraries\cms\html\bootstrap.php

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

どちらの方法も適切ではありませんが、Joomla 3.xはBootstrapに基づいて構築されているので、それと共存する必要があります

4
Lodder

2つの方法があります。

  1. テンプレート内のインクルードファイルの設定を解除し、オーバーライドを作成して、使用している可能性のあるモジュールまたはコンポーネントがそれらを再度インクルードしないようにします(思ったほどの作業ではありません)。

    1. これを実行できる多数のシステムプラグインのいずれかを使用します。個人的には、これをお勧めします https://github.com/phproberto/plg_sys_mootable ファイルを削除するタイミングと場所を完全に制御できるため、フロントエンド編集を中断しないように設定できますたとえば(これを削除すると、すべてが正常に機能しなくなります)。

オプション2には使いやすさの利点がありますが、サイトを散らかしているBootstrap 2.xマークアップを使用する必要があります。オプション1は少し手間がかかりますが、Bootstrapのすべてのトレース;常に私の優先オプションです。コードの例は http://joomlafuture.com/ を参照してください。

3
Seth Warburton

Joomlaは自動的にbootstrap 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ファイルはロードされません。テンプレートファイルから行を削除し、どのヘッドファイルがなくなったかを確認することで、テストできます。

bootstrap CSSはテンプレートによって読み込まれます。Joomla(2.5以降)は、簡単にアクセスできるようにメディアファイルにBootstrap 2.xを含めています。プロトスター理由は、メディアファイルからbootstrapを呼び出しません。代わりに、bootstrap CSS全体をtemplate.cssファイルにコピーして貼り付けました。他のフレームワークはBootstrapを呼び出しますたとえば、ワープ7には、ブートストラップを有効または無効にするチェックボックスがあります。

フロントエンドとバックエンドは異なるテンプレートを持っているため、Bootstrapは一方に対してのみロードまたは無効化できます。無効化したい場合、依存関係はありませんBootstrapバックエンドではなくフロントエンドから。

私の好みはBootstrap 3なので、いくつかの異なるカスタムテンプレートで、私はテンプレートヘッドのjoomlaヘッドラインの後に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などのフレームワークでは少し異なります。必要に応じて、bootstrap CDN urlから直接ロードすることもできます。

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

2
Quinn

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

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

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

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

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

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

1
Sami