Как включить файлы .js в собственное расширение Typo3 6.2?

#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. Недостатком этого решения является то, что оно каким-то образом негибкое — необходимо изменить код, если скрипт загружен иначе (например, в глобальном контексте).