Làm cách nào để tải một JS cụ thể ở cuối tất cả các tệp JS được bao gồm khác?


8

Tôi có một tệp Fancybox.js cụ thể mà tôi muốn tải ở cuối tất cả các tệp JS có trong tệp local.xml của tôi

Nếu thứ tự tải có thể được thay đổi thì làm thế nào một tệp JS có thể được tải (bao gồm) ở cuối?

Cảm ơn.

Câu trả lời:


12

Bạn có thể sắp xếp thứ tự skinhoặc jscác tệp trong layout.xml bằng cách sử dụng phần tử params với thuộc tính name như câu trả lời này giải thích: -

<action method="addJs"><!-- this will be shown second -->
    <script>prototype/javascript1.js</script>
    <params><![CDATA[name="js002_second"]]></params>
</action>
<action method="addJs"><!-- this will be shown first -->
    <script>prototype/javascript2.js</script>
    <params><![CDATA[name="js001_first"]]></params>
</action>

Thật tuyệt ... tôi học được điều gì đó mới mỗi ngày.
Marius

Nếu tôi chỉ có một JS được bao gồm ở cuối tất cả các tệp JS thì phương thức trên sẽ hoạt động như thế nào?
Đánh dấu

Hãy thử <params><![CDATA[name="zjs_last"]]></params>và xem những gì sẽ xảy ra (Tôi không chắc chắn 100%). Báo cáo lại nếu điều đó không tải nó sau khi tất cả những người khác.
zigojacko

Không, nó không hoạt động bằng cách nào đó .. :(
Đánh dấu

@Mark - Hmm, được thôi, tôi đoán mỗi cuộc gọi js sẽ yêu cầu một yếu tố params với thuộc tính name hoặc bạn có thể thử sửa đổi để bạn có thể bao gồm một thứ tự sắp xếp hoặc không thể chỉ thực hiện cuộc gọi js Fancybox sau tất cả các cuộc gọi khác ?
zigojacko

2

Tôi không nghĩ bạn có thể chỉ định thứ tự sắp xếp cho các tệp js bạn thêm (rõ ràng bạn có thể thấy câu trả lời được cung cấp bởi @zigojacko), nhưng tôi nghĩ bạn có thể làm điều đó một chút khác biệt, mua thêm một khối con vào headkhối.
Tất cả các phần tử con của headkhối được hiển thị sau các phần tử js và css.

Đây là thứ mà bạn cần.

Thêm phần này vào một trong các tập tin bố trí của bạn.

<reference name="head">
    <block type="core/template" name="fancy" as="fancy" template="fancybox/fancybox.phtml" />
</reference>

Sau đó tạo tập tin app/design/frontend/{package}/{theme}/template/fancybox/fancybox.phtmlvới nội dung sau.

<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'/fancybox.js'?>"></script>

1

Tôi biết câu hỏi này đã cũ, nhưng đây là một cách đơn giản để đặt hàng các tệp tài sản của bạn bằng cách sử dụng một mô-đun tùy chỉnh đơn giản (đã thử nghiệm):

tạo nên

app/etc/modules/Company_ReorderAssets.xml

và chèn:

 <?xml version="1.0"?>

 <config>

     <modules>

         <Company_ReorderAssets>

             <active>true</active>

             <codePool>local</codePool>

         </Company_ReorderAssets>

     </modules>

 </config>

tạo app/code/local/Company/ReorderAssets/etc/config.xmlvà chèn:

<?xml version="1.0"?>

 <config>

     <modules>

         <Company_ReorderAssets>

             <version>1.0.0</version>

         </Company_ReorderAssets>

     </modules>

     <global>

         <blocks>

             <class>Company_ReorderAssets_Block</class>

             <page>

                 <rewrite>

                     <html_head>Company_ReorderAssets_Block_Page_Html_Head</html_head>

                 </rewrite>

             </page>          

         </blocks>

     </global>

 </config>

tạo ReorderAssets/Block/Page/Html/Head.phpvà chèn:

<?php



 class Company_ReorderAssets_Block_Page_Html_Head extends Mage_Page_Block_Html_Head {



    public function addItemFirst($type, $name, $params = null, $if = null, $cond = null) {



        if ($type === 'skin_css' && empty($params)) {

            $params = 'media="all"';

        }



        $firstElement = array();

        $firstElement[$type . '/' . $name] = array(

            'type' => $type,

            'name' => $name,

            'params' => $params,

            'if' => $if,

            'cond' => $cond,

        );



        $this->_data['items'] = array_merge($firstElement, $this->_data['items']);



        return $this;



    }



    public function addItemAfter($after, $type, $name, $params = null, $if = null, $cond = null) {



        if ($type === 'skin_css' && empty($params)) {

            $params = 'media="all"';

        }



        $firstElement = array();

        $firstElement[$type . '/' . $name] = array(

            'type' => $type,

            'name' => $name,

            'params' => $params,

            'if' => $if,

            'cond' => $cond,

        );



        if (array_key_exists($after, $this->_data['items'])){



            $pos = 1;

            foreach ($this->_data['items'] as $key => $options){

                if ($key == $after) :

                    break;

                endif;

                $pos +=1;

            }



            array_splice($this->_data['items'], $pos, 0, $firstElement);



        }



        return $this;



    }
 }

Ở đây chúng tôi tạo các hàm của chúng tôi addItemFirstaddItemAftercó thể được sử dụng như thế này (bên trong bất kỳ layout.xml nào).

Ví dụ về layout.xml:

 <?xml version="1.0"?>

 <layout version="0.1.0">

    <default>

         <reference name="head">

            <action method="addItemFirst"><type>skin_js</type><script>js/jquery.js</script></action>

            <action method="addItemAfter">

                <after>skin_js/js/jquery.js</after>

                <type>skin_js</type>

                <script>custom_folder/javascript.js</script>

            </action>

            <action method="addItemAfter">

                <after>skin_js/js/jquery.js</after>

                <type>skin_js</type>

                <script>custom_folder/another_javascript.js</script>

            </action>

         </reference>

    </default>

 </layout>

Xin lưu ý skin_js bên trong đường dẫn của bạn.

Đặc biệt cảm ơn Koncz Szabolcs.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.