8

カスタム コンポーネントを Joomla 3 に適応させています。これは、以前に自分でロードした jQuery に依存しています。基本テンプレートに含まれているので、その必要はありません。ただし、jQuery に依存するカスタム JavaScript が最初に読み込まれます。次のフォームを使用してそれらをロードします。

$document = JFactory::getDocument();
$document->addScript( PATH TO SCRIPT);

これにより要素に適切に含まれますが、<head>jQuery の前に読み込まれます。

いくつかの簡単な検索で明らかabstract class JHtmlJqueryになりlibraries/cms/html/jquery.phpますが、これがどこから呼び出されたのかわかりません。

jQuery に依存するスクリプトの前に jQuery がロードされるようにロード順序を変更するにはどうすればよいですか? そして、コアコードに入らずにこれを行うことはできますか?

4

4 に答える 4

10

マリオの答えは正しい方向に進んでいますが、うまくいきません。JHtml::('bootstrap.framework'); 追加のスクリプトをロードする前に、(テンプレート ファイルだけでなく) コンポーネント内に のコードを含める必要があることが判明しました。テンプレート index.php に twitter ブートストラップを含むストック J3 テンプレート protostar を使用していました。

カスタム view.html.php のコードは次のようになりました。

class MyView extends JViewLegacy
{
    function display($tpl = null)
    {
        $document = JFactory::getDocument();
        JHtml::_('bootstrap.framework');

        $document->addScript( PATH_TO_SCRIPT );

        ...
    }
}

これは期待どおりに動作し、jQuery および Bootstrap ファイル ( jquery.min.jsjquery-noconflict.js、およびbootstrap.min.js) が<head>カスタム スクリプトの前に含まれています。

于 2012-10-29T16:02:27.357 に答える
6

解決策を見つけました。テンプレートとコンポーネントの両方にブートストラップをロードさせたくありませんでした。さらに、いくつかのモジュールをロードする単一の記事であるページでは、各モジュールにもブートストラップをロードさせたくありませんでした.. (つまり、これは少しばかげている..) そこで、テンプレートからブートストラップを完全に取り除くことに決め、ブートストラップをロードするだけのシステム プラグインを構築し、プラグインのロード順序を最初にロードするように設定しました。よく働く..

// Bootstrap Loader


    jimport('joomla.plugin.plugin');

    class plgSystemBootstrapLoader extends JPlugin {

        function onAfterRoute() {

            // Load Bootstrap
            JHtml::_('bootstrap.framework');
            $document = JFactory::getDocument();
            $document->addStyleSheet('/media/jui/css/bootstrap.min.css');
            $document->addStyleSheet('/media/jui/css/bootstrap-responsive.css');
        }

    }
于 2013-04-08T20:30:41.270 に答える
2

どのテンプレートを使用していますか? J3 では、ページの読み込みを高速化するために、jQuery プラットフォームをページの下部に読み込むのが常識です。テンプレートを JHtml::_('bootstrap.framework'); // Loads the jQuery js scripts 調べて、この後に js をロードしてみてください。

于 2012-10-26T00:39:15.387 に答える
1

$document->addScript( PATH TO SCRIPT);Joomla はおそらく、コンポーネントとモジュールのコードを実行することによって、その方法に含まれるスクリプトと css ファイルを追加された順序で記述します。

少し検索しましたが、個別の宣言または jQuery の読み込みに影響を与える方法が見つかりませんでした。しかし、私は別の解決策を提供できます。

あなたのコードが何をするのか、またはいつ何かをする必要があるのか​​ についての手がかりがないので、これがあなたの問題の解決策になると確信しているとは言えません. だから私は可能な限り幅広い修正をしています;)

ページの準備が整う前にコードをアクティブにする必要がない限り、これは機能します。

カスタム コードを js on ready ステートメントでラップして、ページまで何も実行しないようにします (その結果、jQuery が読み込まれます)。

if (document.readyState === "complete") { 
    DoYourStuff(); 
}
于 2012-10-26T09:12:59.043 に答える