PDA

Просмотр полной версии : Динамическая замена тега Body


javaPro
27.09.2009, 18:23
Доброго времени суток!
У меня появилась надобность в динамической замене тега <body>.

К примеру на одной странице мне нужно что-бы тег был такой: <body onload="function(1)">

А на другой странице что-бы был такой: <body onload="function2(123)">

Как такое можно сделать через BE?

Зарание спасибо за помощь!

void
27.09.2009, 20:59
Не используйте onload="", используйте обработчик события DOMContentLoaded, как это делают любые js-фреймворки типа jQuery/mooTools/ExtJS.

Соответственно, задача сводится к вставке разного джаваскрипта на разных страницах. Что решается как-то так
[globalVar = TSFE:id = 15]
page.includeJS.something = /path/to/one.js
[else]
page.includeJS.something = /path/to/another.js
[end]

javaPro
28.09.2009, 02:59
Не используйте onload="", используйте обработчик события DOMContentLoaded, как это делают любые js-фреймворки типа jQuery/mooTools/ExtJS.

Соответственно, задача сводится к вставке разного джаваскрипта на разных страницах. Что решается как-то так
[globalVar = TSFE:id = 15]
page.includeJS.something = /path/to/one.js
[else]
page.includeJS.something = /path/to/another.js
[end]
Спасибо за совет! Попробую!
А можно как-то это все прописывать в свойствах самой страници (в TSconfig), а не в шаблоне?

Вопрос другой (для общего знания): почему не использовать onload="" ?

void
29.09.2009, 23:05
Вот если честно, то по-моему нельзя. pageTSconfig он немного для других вещей: настройки RTE там, например. С другой стороны, page TS config - это обычное текстовое поле в таблице pages, то есть может быть им можно воспользоваться, если ваш кастомный код какими-то маркерами пометить и через какой-нибудь парсер на userFunc прогнать.
Но мне кажется, что овчинка не стоит выделки, и лучше либо воспользоваться полем Media для указания используемых файлов, либо написать своё расширение и в нём добавить поле в pages. Или найти ещё какой-нибудь вариант (например, определять текущее местонахождение прямо из javascript-а и прописывать условия в нём).

Относительно onload есть два соображения.
Во-первых, onload вызывается сильно позже domcontentloaded, что не есть хорошо - ваши скрипты в общем случае должны отрабатывать как можно раньше. Во-вторых, писать javascript прямо в HTML не есть хорошо по идеологическим соображениям - смешивать структуру (HTML) и поведение (javascript). Все эти <a onclick="" или <body onload="" должны навешиваться самим javascript-ом