Переопределите scripts.js шаблона Joomla

Im работает в Joomla! 3.4.8.

... так, как мне переопределить шаблоны /my_template / scripts.js ?

...

ОБНОВЛЕНИЕ. Я говорю о шаблоне интерфейса, шаблоне сайта.

Я купил шаблон в Themeforest. Шаблон имеет файл в шаблонах /my_template /js /scripts.js.

Проблема очевидна. Если в будущем я обновлю шаблон, все мои изменения будут потеряны. : (

1 голос | спросил George Berkeley 19 62016vEurope/Moscow11bEurope/MoscowSat, 19 Nov 2016 01:44:55 +0300 2016, 01:44:55

3 ответа


2

Edited

Как вы достигнете этого, это будет зависеть от области объекта сценария.

Поиск в файле сценариев для функции, выполняемой при загрузке окна. Он должен начинаться с:

window.onload = function...

или

window.addEventListener("load"...

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

Вам нужно узнать имя основного контейнерного объекта сценария. Вероятно, это называется чем-то вроде «themeForest». Вы ищете что-то вроде:

var themeForest = new ThemeForest

или (как это возможно, он был создан с использованием диспетчера пакетов JS), может быть, что-то вроде:

var themeForest = __webpack_require__(391);

Точная реализация будет отличаться.

Теперь вы хотите, чтобы этот объект был доступен в глобальной области . Итак, используя приведенные выше примеры, они выглядят так:

var themeForest = window.themeForest = new ThemeForest

или

var themeForest = window.themeForest = __webpack_require__(391);   

Важным битом является то, что скрипт превращается в свойство объекта window . Если window.themeForest уже есть, то он уже доступен в глобальной области. Если не добавить его, как я сделал выше.

Теперь вы можете переопределить любые отдельные методы, функции и переменные, переназначив их в своем скрипте переопределения. Предположим, что существует метод, называемый init(), который вы хотите переопределить. В своем скрипте добавьте:

window.themeForest.init = function() {
    // Function contents
}

Убедитесь, что ваш скрипт загружен в ваш шаблон после файла scripts.js шаблона.

Все остальные свойства themeForest останутся такими, какими они были, но свойство init теперь будет вашей функцией.

Вы также можете добавить это в начало своего скрипта, чтобы сделать обновление объектов быстрее:

window.themeForest = themeForest

Теперь приведенный выше пример переопределения будет выглядеть так:

themeForest.init = function() {
    // Function contents
}

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

ответил chrBrd 19 62016vEurope/Moscow11bEurope/MoscowSat, 19 Nov 2016 03:08:51 +0300 2016, 03:08:51
2

Это зависит от того, как этот js включен в голову. И по пути я думаю, что это прямой JDocument->addScript, который не реализует логику переопределения.

Исходя из этого, в данной ситуации я предлагаю вам создать системный плагин, который поймает onBeforeCompileHead() и отключит этот scripts.js из массива scripts и просто добавьте тот, который вам нужно [ваше переопределение].

ответил Alexandr 8 Jpm1000000pmSun, 08 Jan 2017 19:27:30 +030017 2017, 19:27:30
0

Идея @Alexandr о создании плагина для снятия сценариев является хорошей - конечно, это зависит от того, как разработчики шаблонов выполняют вызов.

Другим простым способом, который я иногда делаю, является небольшое изменение шаблона index.php, а затем загрузка любых js или css-файлов, которые я хочу, так, как я хочу.

Просто найдите вызовы в js-файлах и прокомментируйте их, затем добавьте свои.

Обычно это всего лишь несколько строк модификации, которые можно легко поддерживать в будущем обновлении.

ответил FFrewin 9 Jpm1000000pmMon, 09 Jan 2017 19:21:48 +030017 2017, 19:21:48

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132