Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   получение в темплейт переменных из extension (http://forum.typo3.ru/showthread.php?t=8278)

3ton 04.01.2010 14:45

получение в темплейт переменных из extension
 
можно ли, и если можно то как, получить в шаблон необходимые мне данные из моего расширения???

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

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

dmartynenko 04.01.2010 17:05

Поищите tt_news + breadcrumb

Задача регулярно обсуждается и в гугле можно найти ее решение.
Например: http://www.typo3-jack.net/typo3-proj...umb-trail.html

Для вашего экстеншена делается по аналогии.

3ton 04.01.2010 19:17

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

к примеру есть расширение Test
в нем объявлены атрибуты title и mode

как находясь в шаблоне получить в
temp.mainTemplate.subparts.CONTENT_TITLE = TEXT
temp.mainTemplate.subparts.CONTENT_TITLE.value = ????title????

либо проверить

[?????????mode=5?????]
temp.mainTemplate.subparts.CONTENT_CONTENT < tx_test_pi1
[end]

dmartynenko 04.01.2010 19:47

Я не знаю что вы имеете в виду под атрибутами расширения. В TYPO3 таких терминов я не встречал. Уточните откуда вы ожидаете получить title (БД, GET/POST, FF, TypoScript) ?

В примере по ссылке (и аналогичных) три основных момента:
1. RECORDS - получение записей из БД.
2. source.data = GPvar:tx_ttnews|tt_news - из переменной GET берется параметр tx_ttnews[tt_news]=ID и используется для поиска по PK таблицы tt_news (т.е. возвращается одна запись с указаным в url ID)
3. conf.* - это описание того, что и как должно быть возвращено (выведено на страницу).

Все параметры подробно описаны в TSRef.

3ton 04.01.2010 19:55

я имел ввиду файл-класс расширения и как любой класс - он имеет атрибуты и методы

я предполагаю что если и есть доступ к объекту расширения, то либо это какой то гетер, либо чтение public атрибутов

в моем случае я себе представляю такой механизм действий (не уверен что это возможно)
при генерации страницы, вызывается расширение находящееся на этой странице которое сохраняет в своих public атрибутах значения мне необходимые, потом я из TypoScript(из шаблона) обращаюсь к этому объекту и получаю его атрибуты
использую их в условии и подставляю в шаблон

в данный момент я как раз руководствуюсь этим справочником(TSRef), но к сожалению по моей проблеме ничего найти не смог

не исключаю что более продвинутыми людьми это решается другими методами

jettero 05.01.2010 12:23

можно передать через GLOBALS['TSFE']->applicationData['tx_ext_key'] (я иногда и просто GLOBALS['tx_ext_key'] юзаю, хотя это не кошерно)
в шаблоне это будет TSFE:applicationData|tx_ext_key (но тут еще надо понимать область видимости - где можно использовать эти данные, я обычно пользуюсь этим внутри TS объекта, который генерируется из php кода плагина через tslib_cObj::cObjGetSingle)

можно через TS константы
прописать в ext_localconf.php:
Код:

t3lib_extMgm::addTypoScriptConstants('tx_ext_key_var1 = 123')
в шаблоне это будет {$tx_ext_key_var1}
но тут минус что тяжелый код не должен помещаться в ext_localconf.php т.к. он инклюдится при любом вызове, здесь лучше размещать только какие-то глобальные переменные конфигурации

dmartynenko 05.01.2010 12:58

Непосредственно обращаться к методам и атрибутам класса из TS нельзя.

В общем случае шаблон обрабатывается до выполнения пользовательских PHP скриптов из расширений, поэтому applicationData установятся после парсинга шаблона и проверки TS условий.

Но есть еще в TS механизм userFunc - когда вызывается указанный метод вашего класса, ему передается часть TS кода шаблона, и он возвращает контент в TYPO3. Аналогичная возможность есть в TS-условиях.

ПС: хотя вам 3ton это и не нравится, но иногда быстрее помочь найти решения зная общую решаемую задачу, а не отдельный ее кусок, который TYPO3-способом может быть не решить.

3ton 05.01.2010 13:06

Цитата:

Сообщение от dmartynenko (Сообщение 26701)
ПС: хотя вам 3ton это и не нравится, но иногда быстрее помочь найти решения зная общую решаемую задачу, а не отдельный ее кусок, который TYPO3-способом может быть не решить.

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

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

если есть возможность ее решить другими способами - буду рад выслушать их

dmartynenko 05.01.2010 14:56

Было бы проще, что бы ваше расширение само показывало ту, вторую часть. Тогда вы в своем коде можете обрабатывать нужные вам условия.

Вы, например, можете в коде своего расширения создавать и выводить "результат" куска TS кода.
Так проще задействовать стандартные средства TYPO3 из вашего PHP кода (например, http://typo3.toaster-schwerin.de/typ.../msg00030.html)

Можно и в шаблоне условия прописывать. Каких-то особенных переменных из RealURL не существует - существуют переменные из GET, а RealURL лишь промежуточное звено, о котором ни TS ни ваш PHP код не знает. Если его отключить - сайт будет работать точно также, только URL будут выглядеть по другому.
Единственная проблема - сложность ваших условий. Пременные из GET/POST использовать просто:
Код:

[globalVar = GP:print > 0]
А вот из TS и FF напрямую нельзя.
Кроме того, TS-условия создают дополнительные копии контента в кэше. Чем больше условий, тем больше (и медленней) будет кэш TYPO3.

3ton 05.01.2010 15:01

в моем случае в зависимости от 2 параметра в URL 3 и 4 могут держать в себе разные переменные для этого расширения, что не позволит в тот момент знать что же я хочу проверить

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

можно об этом поподорбнее?


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

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