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)

dmartynenko 05.01.2010 15:14

Все довольно просто. В своем расширении создаете массив аналогичный TS коду. И потом передаете в cObjGetSingle().
Код:

$TS['conf'] = 'RECORDS';
$TS['conf.']['tables']='tt_content';
$TS['conf.']['source'] = '151,99,113,199,163,208';
$TS['conf.']['dontCheckPid'] = 1;
$TS['conf.']['conf.']['tt_content'] = 'TEXT';
$TS['conf.']['conf.']['tt_content.']['field'] = 'bodytext';
$content = $this->cObj->cObjGetSingle($TS['conf'],$TS['conf.']);

Есть функции cObjGetSingle() или cObjGet(), вторая более "продвинутый" вариант для сложных TS скриптов.

Примеры того, как это используется в более сложном варианте (с подстановкой TS констант) есть в:
http://typo3.org/extensions/reposito..._code/current/
http://typo3.org/extensions/reposito...marty/current/

3ton 05.01.2010 15:16

а можно совместить вывод результата в HTML и после него дать TypoScript ???

dmartynenko 05.01.2010 15:41

Вопрос недопонял, в каком месте совместить, в первой или второй ваших частях?

Вызов cObjGetSingle() вернет вам HTML код, который вы должны еще вернуть TYPO3 из функции main(). Иначе он никуда не попадет.

Исключение - если ваш TS объект будет типа USER_INT/COA_INT. Тогда вам вернется "маркер" (такой специальынй HTML код), который вы должны будете вернуть TYPO3 из функции main(). А сам контент будет вызван и сформирован асинхронно, без кэширование (почитайте отличие в TSRef между USER и USER_INT).

3ton 05.01.2010 15:52

судя по вашему посту, я могу делать все так же как и раньше в своем расширении, но перед return'om результата из main функции я могу добавить TypoScript код к результату который будет так же обработан, как если бы он был прописан в шаблоне

я прав?

если да, то интересует - в какой момент будет обработан возвращаемый скрипт, в момент когда я передаю результат выполнения расширения в subparts
temp.mainTemplate.subparts.CONTENT_BLOCK < plugin.tx_astro7experts_pi1
или по завершению обработки скрипта шаблона?

кстати возвращаемый из расширения TypoScript должен будет сделать следущее

temp.mainTemplate.subparts.MODE_BLOCK = TEXT
temp.mainTemplate.subparts.MODE_BLOCK.value = tra-la-la

jettero 06.01.2010 05:39

Цитата:

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

к атрибутам можно

3ton 06.01.2010 11:50

Цитата:

Сообщение от jettero (Сообщение 26712)
к атрибутам можно

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

jettero 06.01.2010 14:24

Я не очень понимаю что вы имеете в виду под срабатыванием расширения. Пример я привел выше TSFE:applicationData|tx_ext_key - здесь доступ к атрибуту ->applicationData['tx_ext_key'] объекта TSFE.
Чтобы это работало проще всего ренедрить TS объект внутри самого плагина вручную вызывая cObjGetSingle()

3ton 06.01.2010 14:42

вот пример

я вызываю свой плагин
temp.mainTemplate.subparts.CONTENT_BLOCK < plugin.tx_astro7experts_pi1

и мне надо чтоб после этого вызова в коде я мог получить значение переменной mode которая является атрибутом класса
class tx_astro7experts_pi1 extends tslib_pibase

и применить ее значение в сравнивании
[полученая переменная = 3]
выполнится то что мне нужно
[end]

как его можно реализовать?

jettero 06.01.2010 15:20

Цитата:

Сообщение от 3ton (Сообщение 26715)
вот пример

я вызываю свой плагин
temp.mainTemplate.subparts.CONTENT_BLOCK < plugin.tx_astro7experts_pi1

тут плагин не вызывается, тут вы просто копируете строку
после парсинга шаблона ветка temp.* удаляется и соответственно плагин оттуда не вызовется

Цитата:

Сообщение от 3ton (Сообщение 26715)
и мне надо чтоб после этого вызова в коде я мог получить значение переменной mode которая является атрибутом класса
class tx_astro7experts_pi1 extends tslib_pibase

из TS можно получить доступ только к атрибутам глобальных объектов
и для пользовательских данных уже придумано место где их можно хранить и передавать (GLOBALS['TSFE']->applicationData)

3ton 06.01.2010 15:42

к примеру я в своем расширении сделал так

Код:

$_GLOBALS['TSFE']->applicationData['tx_astro7experts_mode'] = 'sdfgsdf';
как мне в шаблоне получить это значение???

Код:

temp.mainTemplate.subparts.BREADCRUMB = TEXT
temp.mainTemplate.subparts.BREADCRUMB.value < TSFE:applicationData|tx_astro7experts_mode

так не получается


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

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