Как я могу полностью удалить Bootstrap из интерфейса Joomla?

14

Недавно я попытался удалить все экземпляры Bootstrap из внешнего интерфейса Joomla для целей отладки. Я использовал шаблон скелета с относительно новой установкой Joomla 3.3. Я удалил все включения Bootstrap из шаблона и отключил все плагины и модули, которые, как я думал, могли загружать его. Я также очистил кеш Joomla. Несмотря на это, firebug сказал мне, что Joomla все еще пытается загрузить bootstrap.min.js из /media/jui/js/bootstrap.min.js

Я обошел проблему, временно переименовав файл начальной загрузки, но это заставило меня задуматься.

  • Это происходит со всеми установками Joomla 3.3 или только у меня?
  • Есть ли способ определить, откуда загружается начальная загрузка?
  • Есть ли способ отключить загрузку с загрузкой?
Стараться
источник

Ответы:

15

Это происходит со всеми установками Joomla 3.3 или только у меня?

В версии: 3.2-3.7 (я тестировал).

Есть ли способ отключить загрузку с загрузкой?

Да, есть. Просто удалите его перед построением заголовка, используя событие onBeforeCompileHead ( подробнее в документации. ).

Ввиду возможности подключения библиотеки в любое время используются различные расширения. Недостаточно удалить из шаблона и модулей несколько строк. Это не идеальное решение. Но вы можете быть уверены, что он не загрузится.

В моем проекте я использую bootstrap 3.2. Я потратил целый день, чтобы найти способ удалить загрузчик 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']);
Яцек Лабуда
источник
2
Большой! Спасибо вам за 5 минут, чтобы создать свой собственный плагин "remove jquery and boostrap".
Александр Пауло
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);
}
johanpw
источник
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. Так что - иногда вам нужно будет выполнить preg_replace для встроенной js.

iamrobert
источник
4

Это то, что беспокоило меня с самого начала Joomla 3.x и до сих пор, ничего не было сделано, чтобы дать пользователю возможность предотвратить загрузку файлов начальной загрузки.

К сожалению, Bootstrap загружается из ядра Joomla, и это связано с некоторыми основными функциями, которые требуют его работы, поэтому полное его удаление помешает работе некоторых функций, таких как всплывающая подсказка.

Единственный способ удалить его (который я знаю) - это взломать ядро ​​в следующем файле: ( не рекомендуется )

библиотеки \ CMS \ HTML \ bootstrap.php

Единственный другой способ, о котором я могу думать, - это создать переопределение шаблона для каждого модуля, компонента и плагина, который вызывает библиотеку начальной загрузки и удаляет ее.

Ни один из этих методов не хорош, однако Joomla 3.x был построен на Bootstrap, поэтому мы должны с этим смириться

Лоддер
источник
1
Спасибо, Лоддер. Кажется, это недальновидно, у них нет кнопки выключения. Надеюсь, они добавят его в Joomla 3.4 :)
TryHarder
Вы не должны иметь основные файлы. Период. Существует множество других способов удаления всех следов Bootstrap, без взлома основных файлов, и все они предпочтительнее. Все они также переживут обновление Joomla, чего нельзя сказать о взломанных файлах ядра.
Сет Уорбертон
@seth, да, теперь есть другие способы. Этот ответ был написан 9 месяцев назад, и в то время я не знал другого пути
Лоддер
@Valentin Despa, не могли бы вы удалить этот ответ для меня, потому что я не могу?
Лоддер
@oooooo - я попросил убрать флажок «принято» из моего ответа, поскольку здесь нет решения. Если они не могут этого сделать, не могли бы вы отметить чей-либо ответ как «принятый», пожалуйста?
Лоддер
3

Есть два способа:

  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 может быть загружен или отключен для одного, а не для другого. Нет никакой зависимости, если вы хотите отключить Bootstrap из внешнего интерфейса, а не из внутреннего интерфейса.

Я предпочитаю Bootstrap 3, поэтому я загрузил несколько различных пользовательских шаблонов и включил их в заголовок шаблона после заголовка joomla и внутри тегов заголовка шаблона:

$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. Вы также можете загрузить напрямую из URL начальной загрузки CDN, если хотите.

Так что Joomla не заставляет вас использовать Bootstrap или любую версию Bootstrap, по крайней мере, для CSS. Вы можете использовать другие адаптивные рамки, если хотите. Это все сделано в шаблоне. Нет необходимости в взломах или плагинах.

Quinn
источник
1

Joomla 3.3 (меньше чем) основана на Bootstrap 2.3, а не на Bootstrap 3.X

Я хотел перейти на новую версию Bootstrap, и было много позиций, которые я, конечно, сменил, основываясь на моей идее. Я сделал это, но в последнее время.

Во многих позициях кода мне пришлось отключить Bootstrap, как показано ниже:

// Добавить JavaScript Framework JHtml :: _ ('bootstrap.framework');

и сделал новый полностью шаблон Joomla для этого; но если вы хотите перейти на другую инфраструктуру пользовательского интерфейса, я думаю, вы должны продолжить этот процесс, и, по крайней мере, у вас есть более 30 компонентов, модулей, плагинов и некоторые устаревшие коды Joomla, которые вы должны разработать заново. Это просто, но нужно много времени.

Новое восприятие 02 июля 2015: на основе метода «unset» в Joomla, о котором некоторые из наших друзей упоминали на этом форуме, я мог полностью отключить предыдущую версию Bootstrap и Mootools или любую другую библиотеку Javascript или файл CSS. Извините, прежде чем я упомянул плохое решение. Вы можете прочитать этот пост, чтобы получить больше информации, чтобы отключить Bootstrap

Сами
источник
Хорошо поймал. Bootstrap 3 - это ошибка. Я отредактирую это сейчас.
TryHarder
-2

Или вы можете использовать шаблон из Yootheme, установить его по умолчанию, а затем в этом шаблоне конфигурации выбрать «не загружать начальную загрузку».

Джим Хилл
источник
3
Вы в основном говорите, 49 евро, чтобы удалить Bootstrap также вариант?
Лоддер