#javascript #jquery #typo3 #typoscript #extbase
#javascript #jquery #typo3 #typoscript #extbase
Вопрос:
Я создал расширение в Typo3 6.2 с помощью extension builder, extbase и fluid.
Я хочу добавить указатель времени во внешний интерфейс.
Я нашел файл .js в Интернете и хочу включать его всякий раз, когда расширение активно, потому что оно мне часто нужно.
Я разместил этот файл здесь: EXT:/Resources/Public/JS/timepicker.js .
Я видел решение в этой статье, но добавление
page.includeJS.tx_myExtension = EXT:/Resources/Public/JS/timepicker.js
в нижней части моего setup.txt это не работает.
Я все равно не определял page
там, поэтому я думаю, что это может быть причиной, но я действительно понятия не имею — это мой setup.txt (автоматически сгенерированный) в /typo3conf/ext//Configuration/TypoScript/:
plugin.tx_myext_test {
view {
templateRootPath = {$plugin.tx_myext_test.view.templateRootPath}
partialRootPath = {$plugin.tx_myext_test.view.partialRootPath}
layoutRootPath = {$plugin.tx_myext_test.view.layoutRootPath}
}
persistence {
storagePid = {$plugin.tx_myext_test.persistence.storagePid}
}
}
В конечном счете, я хочу, чтобы работала моя интерфейсная функция, которая уже работает с datepicker, потому что я включил jQuery в свой корневой шаблон. Но я не хочу включать туда timepicker, только для моего расширения.
<script>
$(function () {
$('.lc-datepicker').datepicker();
$('.lc-timepicker').timepicker();
});
</script>
Ответ №1:
Вы можете использовать правильный синтаксис для EXT:
этого:
page.includeJS.myextension = EXT:extkey/Resources/Public/JS/timepicker.js
(Вы забыли extkey
.)
Имейте в виду, что использование вместо этого может повысить производительность вашего веб includeJSFooter
includeJS
-сайта.
page.includeJS
это свойство TypoScript, доступное во всем мире. Поэтому, если вы используете это в корневом шаблоне TS вашего сайта, файл JavaScript будет встроен на каждую страницу, независимо от того, используется плагин или нет. Поэтому я предлагаю использовать описанный ниже гибкий подход, если вы хотите использовать JS только на страницах, в которые встроен плагин.
Для достижения этой цели используйте ViewHelper ресурса в вашем шаблоне:
<script src="{f:uri.resource(path: 'JS/timepicker.js')}"></script>
<script>
$(function () {
$('.lc-datepicker').datepicker();
$('.lc-timepicker').timepicker();
});
</script>
Средство просмотра ресурсов использует путь относительно Resources/Public
каталога вашего расширения.
Комментарии:
1. Сейчас это не работает — с помощью «page.includeJSFooter.tx_myExtension = EXT:tx_myExtension/Resources/Public/JS/timepicker.js «Какой кэш я должен очистить, чтобы быть уверенным, что это не из-за него (внешний интерфейс, общий или системный)? И какое именно имя расширения имеется в виду, где оно было определено? Не название плагина, верно?
2. Ваш второй пример наконец-то сработал … но странная вещь: мне пришлось начинать с JS / … not Public, иначе результат был «Public / Public», Хотел бы я выяснить, какая проблема у меня с вашим первым решением…
3. Извините, мой плохой, путь в
f:uri.resource
VH относительноResources/Public
. Исправлено. Я также изменилmyextension
extkey
, чтобы подчеркнуть, что необходим ключ расширения, который равен каталогу расширения внутриtypo3conf/ext
. Кроме обычного кэша страницы, вам не нужно удалять что-либо еще. Попробуйте просмотреть дерево TypoScript в серверной части, чтобы узнать, правильно ли применен ваш TS.4. хорошо, спасибо за исправления — итак, если
extkey
= каталог расширения, то чтоmyextension
вpage.includeJS.myextension
?5. Я отредактировал вопрос. Для ваших нужд используйте подход Fluid или подход jokumer, который я лично не предпочел бы.
Ответ №2:
Вы могли бы включить JS в свой класс контроллера, чтобы убедиться, что он загружается только для вашего расширения.
В TypoScript, чтобы иметь настраиваемый файл JS:
plugin.tx_myext.settings.javascript.file = EXT:myext/Resources/Public/JS/timepicker.js
В действии контроллера:
$this->response->addAdditionalHeaderData('<script src="' .
$GLOBALS['TSFE']->tmpl->getFileName($this->settings['javascript']['file']) .
'" type="text/javascript"></script>');
Комментарии:
1. но могу ли я добавить typoscript в свой setup.txt файл в моей папке расширения? до сих пор он не работает 🙁 это загрузить пустой заголовок <script src=»» type=»text/javascript»></script>» Я написал plugin.tx_myext.settings.javascript.file = EXT:myext/Resources/Public/JS/timepicker.js в нижней части моего setup.txt файл, как вы сказали.
2. Недостатком этого решения является то, что оно каким-то образом негибкое — необходимо изменить код, если скрипт загружен иначе (например, в глобальном контексте).