Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Генерация JS + CSS (http://forum.typo3.ru/showthread.php?t=5134)

Feo 15.11.2007 13:13

Генерация JS + CSS
 
Здравствуйте,

Возможна ли генерация JS и CSS непосредственно из тела расширения? То есть, отдельных файлов с изменяемым в процессе выполнения скрипта данными, которые будут связаны со выводимой страницей.

В идеале - Smarty-конфигурируемые.

Спасибо.

void 15.11.2007 14:36

Довольно странная задача... Обычно есть некие файлы, которые надо поключить, а затем где-нибудь в <head> вставить <script> только с изменяемыми в этом случае JS-переменными.
Добавить некий код в <head> можно через $GLOBALS['TSFE']->includeAdditionalCSS/includeAdditionalJS
Для smarty смотрите расширение smarty, рекомендую в зависимостях указывать точную версию, т.к. расширение, видимо, будет часто изменяться в будущем.

Feo 15.11.2007 16:08

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

Мои шаблоны CSS и JS - сквозные, идущие через весь сайт, с различными настройками каждый раз.

Они должны быть динамическими, то есть создающимися на уровне PHP.
Кроме того, я предпочитаю не загромождать код скрипт-переменными. И не создавать несколько десятков отдельных подключний.

В идеале было бы наиболее уместно использовать отдельные Smarty-шаблоны CSS и JS, где переменные задаются на уровне Typo3, логика на уровне PHP, и презентация как финал процесса.

dmartynenko 15.11.2007 16:20

Цитата:

Сообщение от Feo (Сообщение 15977)
В идеале было бы наиболее уместно использовать отдельные Smarty-шаблоны CSS и JS, где переменные задаются на уровне Typo3, логика на уровне PHP, и презентация как финал процесса.

Можно использовать, и где-то я такое видел, генерить CSS и JS при помощи самого тайпо просто как страницы!

То есть делать в шаблоне отдельный page.typeNum = XX
Для него как угодно создавать контент - через TS или плагин (заголовки только указать правильные для http ответа).

А на обычных страницах вместо
page.includeCSS.main = fileadmin/style.css
писать
page.includeCSS.main = http://domain.com/?id=12&type=XX

Можно даже попробовать сделать так, что бы стили и JS брались для каждой страницы по тому же id просто с другим параметром type.

Feo 15.11.2007 19:01

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

Спасибо.

void 15.11.2007 20:04

page.includeCSS.main = http://domain.com/?id=12&type=XX включает скрипт в <head> всего сайта.

Конфиг будет при этом примерно такой:
Код:

printform = PAGE
printform {
  typeNum = 1337

  10 < plugin.tx_yourext_pi1
 
  config {
    disableAllHeaderCode = 1
    xhtml_cleaning = 0
    admPanel = 0
    additionalHeaders = Content-type:text/javascript
  }
}

Но при этом нужно учитывать, что при каждом вызове любой страницы будут вызываться фактически две страницы... Хотя конечно можно закешировать всё, и тогда всё будет быстрее.
Существует другой подход - использовать технологию eID, но в этом случае кеширование вы должны будете реализовывать сами (если нуждаетесь в нем).

Feo 16.11.2007 00:17

Я думал над данным методом и задался вопросом в его гибкости.
Если скажем необходимо изменять параметры CSS файла в зависимости от результатов выполнения кода модуля - разве это достижимо здесь.
Ведь TS - это самый первый этап в процессе исполнения. А если необходимо модифицировать оформление уже после генерации содержимого?

dmartynenko 16.11.2007 14:39

Цитата:

Сообщение от Feo (Сообщение 16002)
А если необходимо модифицировать оформление уже после генерации содержимого?

Конечно во время вызова плагина вся страница до него и весь заголовок уже сформированы (или взяты из кеша).

Поэтому в таком случае Вы можете включить стили или JS в вашем плагине внутрь HTML кода (внутрь BODY) - перед или после вашего HTML контента.
В таком случае стили добавятся или переопределятся, а JS подгрузится.

void 16.11.2007 16:59

Если вам нужна зависимость содержимого css/js от результата работы плагина, то можно добавлять их примерно так:
в плагине пишете
PHP код:

$conf = array(
 
'parameter' => $GLOBALS['TSFE'],
 
'additionalParams' => '&type=1337&mygeneratedparam='.$this->doTheMagick()
);
$GLOBALS['TSFE']->additionalJS .= '<script type="text/javascript" src="'.$this->cObj->typolink_URL($conf).'"></script>'

, а затем в другом плагине, который вставлен на страничный объекст с типом 1337, уже анализируете get-параметр 'mygeneratedparam'.

z0r1k 16.11.2007 19:28

Да, я еще можно поробовать хук:
Код:

$TYPO3_CONF_VARS["SC_OPTIONS"]["tslib/class.tslib_fe.php"]["contentPostProc-output"] = array("EXT:plugin/class.plugin.php:user_PluginPostProc->sParseOutput");
и там проанализировать параметры: id, etc. и в зависимости от них уже вставить куда угодно, что угодно.
Хотя это может быть и не очень удобно....


Часовой пояс GMT +4, время: 07:13.

Работает на vBulletin® версия 3.8.1.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot