Bagaimana saya bisa menghapus Bootstrap sepenuhnya dari frontend Joomla?

14

Baru-baru ini, saya mencoba untuk menghapus semua instance Bootstrap dari ujung depan Joomla untuk keperluan debugging. Saya menggunakan kerangka kerangka dengan instalasi Joomla 3.3 yang relatif baru. Saya menghapus semua inklusi Bootstrap dari template dan saya mematikan semua plugin dan modul yang saya pikir bisa memuatnya. Saya juga membersihkan cache Joomla. Meskipun demikian, firebug memberi tahu saya bahwa Joomla masih mencoba memuat bootstrap.min.js dari /media/jui/js/bootstrap.min.js

Saya menyelesaikan masalah dengan mengubah nama sementara file bootstrap, tapi itu membuat saya bertanya-tanya.

  • Apakah ini terjadi dengan semua instalasi Joomla 3.3 atau hanya milikku?
  • Apakah ada cara saya dapat mengidentifikasi dari mana bootstrap sedang dimuat?
  • Apakah ada cara saya bisa menonaktifkan bootstrap dari memuat?
Berusaha lebih keras
sumber

Jawaban:

15

Apakah ini terjadi dengan semua instalasi Joomla 3.3 atau hanya milikku?

Dalam versi: 3.2-3.7 (Saya diuji).

Apakah ada cara saya bisa menonaktifkan bootstrap dari memuat?

Ya ada. Hapus saja sebelum membangun tajuk, menggunakan acara diBeforeCompileHead ( Info selengkapnya di dokumen. ).

Mengingat kemungkinan melampirkan perpustakaan setiap saat dengan berbagai ekstensi. Tidak cukup hanya dengan menghapus beberapa templat dari modul dan modul. Ini bukan solusi yang sempurna. Tetapi Anda dapat yakin bahwa itu tidak akan memuat.

Dalam proyek saya, saya menggunakan bootstrap 3.2. Saya menghabiskan sepanjang hari untuk menemukan cara untuk menghapus bootstrap 2.

Satu-satunya solusi adalah menghapus skrip sebelum membuat header.

Solusi saya adalah membuat sebuah plugin:

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']);
        }
    }
}

Ini bekerja di Joomla! 3.2-3.6

(Untuk yang tertarik) Saya juga harus menghapus ini:

    unset($doc->_scripts[JURI::root(true).'/media/system/js/frontediting.js']);
    unset($doc->_scripts[JURI::root(true).'/media/system/js/html5fallback.js']);
Jacek Labuda
sumber
2
Bagus! Butuh waktu 5 menit untuk membuat plugin "hapus jquery dan boostrap" saya sendiri terima kasih.
Alexandre Paulo
16

Peretasan alternatif yang selalu ingin saya buang, karena tidak melibatkan pengeditan file inti adalah mengganti file css dengan file css kosong di template Anda. Ini masih akan menyebabkan panggilan ke server Anda untuk memuat sumber daya, tetapi Anda tidak harus memiliki styling bootstrap.

Cukup tambahkan file kosong di sini: templates/YOUR_TEMPLATE/css/jui/bootstrap.min.cssdan templates/YOUR_TEMPLATE/js/jui/bootstrap.min.js.

Secara alami setiap pengaturan komponen untuk menggunakan bootstrap akan terlihat tidak bergoyang, dan masih akan ada panggilan untuk memuat file css dan js oleh browser. Namun, file akan kosong (ukuran unduhan kecil) dan tidak berdampak pada gaya.

David Fritsch
sumber
Tidak pernah terpikir seperti itu, keren !!!
Mohd Abdul Mujib
7

Hanya sebuah gagasan (tidak diuji), tetapi bagaimana dengan membangun sebuah plugin kecil yang tidak memenuhi Bootstrap?

Sesuatu seperti ini:

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);
}
johanpw
sumber
4

Jika Anda tidak ingin membuat plugin sendiri, solusi sederhana adalah dengan mencoba:

Tidak disetel di Templat

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

Namun - beberapa ekstensi masih memasukkan js atau css bahkan jika Anda menghapusnya. Cara paling andal yang saya temukan adalah dengan:

JCC - JS CSS Plugin Control

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

Namun - terkadang Anda masih memiliki js inline yang masih disisipkan di templat Anda. Jadi - terkadang Anda perlu melakukan preg_replace untuk js inline.

iamrobert
sumber
4

Ini adalah sesuatu yang telah mengganggu saya sejak awal Joomla 3.x dan sampai hari ini, belum ada yang dilakukan untuk memberikan pengguna pilihan untuk mencegah file bootstrap dari dimuat.

Sayangnya, Bootstrap dimuat dari inti Joomla dan ini disebabkan oleh beberapa fitur inti yang mengharuskannya bekerja, sehingga menghapusnya sepenuhnya akan mencegah beberapa fitur bekerja seperti Tooltip.

Satu-satunya cara untuk menghapusnya (yang saya ketahui) adalah melalui peretasan inti pada file berikut: ( tidak disarankan )

perpustakaan \ cms \ html \ bootstrap.php

Satu-satunya cara lain yang dapat saya pikirkan adalah membuat override template untuk setiap modul, komponen dan plugin yang memanggil perpustakaan bootstrap dan menghapusnya.

Tidak ada metode yang baik namun Joomla 3.x dibangun di atas Bootstrap jadi kita harus menjalaninya

Lodder
sumber
1
Terima kasih Lodder. Tampaknya agak pendek melihat mereka tidak memiliki tombol mati. Semoga mereka akan menambahkannya ke Joomla 3.4 :)
TryHarder
Anda seharusnya tidak memiliki file inti. Titik. Ada banyak cara lain untuk menghapus semua jejak Bootstrap, tanpa meretas file inti dan semuanya lebih disukai. Semuanya juga akan selamat dari pembaruan Joomla, yang tidak bisa dikatakan dari file inti yang diretas.
Seth Warburton
@seth, ya sekarang ada cara lain. Jawaban ini ditulis 9 bulan yang lalu dan pada saat itu, saya tidak tahu cara lain
Lodder
@Valentin Despa, bisa tolong hapus jawaban ini untuk saya karena saya tidak bisa?
Lodder
@oooooo - Saya sudah meminta agar bendera "diterima" dihapus dari jawaban saya karena bukan solusi di sini. Jika mereka tidak dapat melakukannya, maukah Anda menandai jawaban orang lain sebagai "diterima"?
Lodder
3

Ada dua cara:

  1. Hapus seting file yang disertakan dari dalam templat Anda, dan kemudian buat override untuk mencegah modul atau komponen apa pun yang mungkin Anda gunakan untuk memasukkannya lagi (tidak sesering yang terdengar).

    1. Gunakan salah satu dari banyak plugin sistem yang dapat melakukan ini. Secara pribadi, saya akan merekomendasikan ini https://github.com/phproberto/plg_sys_mootable karena memberikan kontrol penuh atas kapan dan di mana untuk menghapus file sehingga dapat diatur untuk tidak merusak pengeditan ujung depan misalnya (yang jika Anda menghapus semuanya akan rusak secara normal).

Opsi 2 memiliki keunggulan kemudahan penggunaan tetapi Anda masih harus hidup dengan markup Bootstrap 2.x jelek yang mengotori situs Anda. Opsi 1 membutuhkan lebih banyak pekerjaan tetapi berarti Anda dapat menghapus setiap jejak Bootstrap; selalu pilihan saya. Lihat http://joomlafuture.com/ untuk kode contoh.

Seth Warburton
sumber
2

Joomla tidak memuat bootstrap CSS secara otomatis, tetapi memuat JS. Jika templat Anda menggunakan metode standar untuk memuat kepala Joomla:

<jdoc:include type="head" />

Ini akan memuat file mootools, jquery, dan bootstrap dalam urutan ini:

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

Itu tidak memuat file CSS. Anda dapat mengujinya dengan menghapus baris dari file template Anda, lalu memeriksa file head mana yang hilang.

Bootstrap CSS dimuat oleh templat Anda. Joomla (sejak 2.5 saya percaya) termasuk Bootstrap 2.x dalam file media mereka untuk akses mudah. Protostar karena alasan tertentu tidak memanggil bootstrap dari file media. Sebagai gantinya, mereka telah menyalin dan menempelkan seluruh bootstrap CSS ke file template.css mereka. Kerangka kerja lain memanggil Bootstrap. Warp 7, misalnya, memang memiliki kotak centang untuk mengaktifkan atau menonaktifkan Bootstrap.

Karena frontend dan backend memiliki templat yang berbeda, Bootstrap dapat dimuat atau dinonaktifkan untuk satu dan tidak yang lain. Tidak ada ketergantungan jika Anda ingin menonaktifkan Bootstrap dari frontend dan bukan backend.

Preferensi saya adalah Bootstrap 3, jadi pada beberapa templat kustom yang berbeda, saya telah mengunduh dan menyertakan bootstrap 3 css di kepala templat saya setelah joomla head line dan di dalam tag head templat saya:

$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');

Metode ini sedikit berbeda untuk kerangka kerja seperti Warp 7. Anda juga dapat memuat langsung dari url bootstrap CDN jika Anda mau.

Jadi Joomla tidak memaksa Anda untuk menggunakan Bootstrap atau versi Bootstrap apa pun, setidaknya untuk CSS. Anda bisa menggunakan kerangka kerja responsif lainnya jika Anda mau. Semuanya dilakukan dalam templat. Tidak perlu peretasan atau plugin.

Quinn
sumber
1

Joomla 3.3 (kurang dari) didasarkan pada Bootstrap 2.3 bukan Bootstrap 3.X

Saya ingin bermigrasi ke rilis baru Bootstrap, dan ada banyak posisi yang harus saya ubah tentu saja berdasarkan ide saya. Saya sudah melakukannya tetapi belakangan ini.

Dalam banyak posisi kode saya harus menonaktifkan Bootstrap seperti kode di bawah ini:

// Tambahkan Kerangka JavaScript JHtml :: _ ('bootstrap.framework');

dan membuat template Joomla sepenuhnya baru untuk melakukan itu; tetapi jika Anda ingin bermigrasi ke kerangka UI lain saya pikir, Anda harus melanjutkan proses ini juga dan setidaknya Anda memiliki lebih dari 30 Komponen, Modul, Plugin, dan beberapa kode warisan Joomla yang harus Anda kembangkan lagi. Sederhana tapi butuh banyak waktu.

Persepsi baru 02 Juli 2015: berdasarkan metode "tidak disetel" di Joomla yang oleh beberapa teman kami sebutkan di forum ini, saya bisa sepenuhnya menonaktifkan Bootstrap dan Mootools versi sebelumnya atau pustaka Javascript atau file CSS lainnya. Saya minta maaf sebelum saya menyebutkan solusi buruk. Anda dapat membaca posting ini untuk mendapatkan informasi lebih lanjut untuk menonaktifkan Bootstrap

Sami
sumber
Tangkapan bagus. Bootstrap 3 adalah kesalahan. Saya akan mengeditnya sekarang.
TryHarder
-2

Atau Anda dapat menggunakan templat dari Yootheme, menetapkannya sebagai default, lalu dalam konfigurasi templat itu pilih "jangan memuat bootstrap."

Jim Hill
sumber
3
Anda pada dasarnya mengatakan 49 euro untuk menghapus Bootstrap juga merupakan opsi?
Lodder