PDA

Просмотр полной версии : Доступ к константам TS в PHP


c0d3r
10.05.2007, 18:47
Знаю, что к значениям объекта config в PHP доступ можно получить вот так:
$GLOBALS['TSFE']->config['config'][...]

А как получить доступ к значениям объекта constants?

Например, есть такой TTS:

constants {
main_title = Мой сайт
}


Как получить значение main_title в PHP?

Заранее спасибо за помощь!

c0d3r
10.05.2007, 18:54
Вопрос закрыт:
$GLOBALS["TSFE"]->tmpl->setup["constants."][...]

Pavel Antonov
10.05.2007, 19:32
А можно узнать для чего нужно обращение к константам из PHP?
Просто интересно, обычно все делают через TS (там можно и константы подставить)

c0d3r
10.05.2007, 19:33
Павел, во-первых, чтобы знать, во-вторых, я хороший PHP-программист, но плохой TS-кодер, и пока мне тяжело даётся TYPO3.
Мне понравился объект USER и я его вовсю педалирую его userFunc :) Хочется использовать как можно более абстрактную common-либу. Поэтому пока явный крен в пользу PHP против TS. Болезнь роста.

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

Чувствую, что можно разрулить в пользу имспользования TS в тех же флехформах, но пока нет знаний...

В выходные буду смотреть подкасты - отдохну типо3 :)

c0d3r
10.05.2007, 19:39
Есть ещё вопрос - доступ к TS константам в HTML шаблоне.

Прочитал на форуме, что можно писать в шаблоне типа <!--###USERNAME###--> и в маркер будет подстановка соответствующей константы.

Если это так, как можно совместить сие чудо с TV?
Прописываю константу, маркер, но подстановки нет.
Ясно, что где-то туплю, но где?
Неужели надо соотв. плагин подключать?

Pavel Antonov
10.05.2007, 19:42
Павел, во-первых, чтобы знать, во-вторых, я хороший PHP-программист, но плохой TS-кодер, и пока мне тяжело даётся TYPO3.
Мне понравился объект USER и я его вовсю педалирую его userFunc :)

Ну так и кладите все параметры в USER. Они будут приходить в параметре $config в вызове функции.

Pavel Antonov
10.05.2007, 19:44
Есть ещё вопрос - доступ к TS константам в HTML шаблоне.

Прочитал на форуме, что можно писать в шаблоне типа <!--###USERNAME###--> и в маркер будет подстановка соответствующей константы.

Если это так, как можно совместить сие чудо с TV?
Прописываю константу, маркер, но подстановки нет.
Ясно, что где-то туплю, но где?
Неужели надо соотв. плагин подключать?

А зачем Вам маркеры в TV? Она для того и сделана что бы подменять напрямую код через меппинг... В шаблоне определяете что манять, в TS описываете на что менять. Маркеры ни к чему...

c0d3r
10.05.2007, 20:09
Ну так и кладите все параметры в USER. Они будут приходить в параметре $config в вызове функции.

Можно пример кода в студию? :)
Мне интересно, но я пока устал читать доки %)

По поводу маркеров - умом понимаю, что не нужны они в TV, а сердцем нет :)
Если серьёзно, то это отголоски темы http://forum.typo3.biz/showthread.php?t=3293,
там мой последний пост неотвечен, поэтому пошёл в обход, ухватившись за маркеры.

Pavel Antonov
10.05.2007, 21:20
Можно пример кода в студию? :)
Мне интересно, но я пока устал читать доки %)
Ну а посмотреть TS код любого плагина? Все плагины подключаются через USER или USER_INT


По поводу маркеров - умом понимаю, что не нужны они в TV, а сердцем нет :)
Если серьёзно, то это отголоски темы http://forum.typo3.biz/showthread.php?t=3293,
там мой последний пост неотвечен, поэтому пошёл в обход, ухватившись за маркеры.

Я не понял о чем Вы там спрашиваете.

c0d3r
12.05.2007, 17:43
Да, про $conf я вчера уже прочитал, вопрос снимаю, просто с ходу не понял, что это только для плагинов.
Я там сам ничего не понимаю уже. По моему, в голове каша из MTB1/FTB :(

P.S. Из-за постоянного белого экрана TV уже очень злой. Причём в превью всё нормально, а что ему не нравится в FE - не ясно! Пропускал HTML шаблон через Tidy, CSE, никаких ошибок верстки они не находят. Сегодня если не справлюсь, буду пробовать MTB, меня время просто поджимает уже.

P.S.S. Оказывается, WSOD появился из-за однострочного коммментария, это я украшал setup.ts по-пехапешному.
/*--- LIB. ---*/
Второй раз наступаю на грабли с окончанием комментария */ не с новой строки.
jEdit TS-синтаксис подсветил без ошибок, это меня и расслабило.

Соответственно, делаю вывод - если получаешь WSOD на FE, но в TV-превью всё хорошо, нужно искать ошибку в TTS.
Надеюсь, с терминологией не напутал ;)

Pavel Antonov
13.05.2007, 01:50
"WSOD" - это уж через чур.... 8=)

c0d3r
13.05.2007, 15:16
Уж очень досадить хотелось этой фиче :)
Ничего личного, TYPO3 я уже почти люблю :)

c0d3r
01.06.2007, 15:11
В общем, в этом топике мы разобрались с FE-константами (из TS Setup).
А как получить в PHP значения константант из TS Constants?
Например:

TSC_DOMAIN = site.ru


Хочу использовать значение в PHP (в своих методах для объекта USER).

void
01.06.2007, 17:16
Проще всего сделать где-нибудь в EXT:my/static/setup.txt
plugin.tx_my{
domain = {$TSC_DOMAIN}
}
а затем использовать значение
$GLOBALS['TSFE']->tmpl->setup['plugin.']['tx_my.']['domain'];

c0d3r
01.06.2007, 17:30
Интересно, большое спасибо!
А без создания плагина? :)

void
01.06.2007, 19:13
Говорим USER - подразумеваем плагин.
Говорим "плагин" - подразумеваем USER.

c0d3r
04.06.2007, 10:48
Подразумеваете - оно конечно так...
Только вот есть у меня USER, да нет плагина - не до него пока.
Соотв., ваш совет насчёт plugin.tx_my{domain = {$TSC_DOMAIN}} не поможет :(
Попробую дампануть TSFE и вытащить путь :)

c0d3r
04.06.2007, 15:57
В общем, как я понял, описание TS констант в стиле PHP ни к чему не приводит, требуется добавлять константы в системные или user-классы.

Вот такие определения попросту нигде не всплывают в PHP, хотя TS с ними отлично работает.

TSC_DOMAIN = RU

void
04.06.2007, 15:57
Ну каким-то же образом вы его вставили?
Например,

config.includeLibs.my = fileadmin/php/mylib.php
lib.myplace = USER
lib.myplace.userFunc = user_my->main

А раз вставили, то значит, можете передать параметры:

config.includeLibs.my = fileadmin/php/mylib.php
lib.myplace = USER
lib.myplace.userFunc = user_my->main
lib.myplace.param = this_is_param

Причем параметры могут быть константами:

config.includeLibs.my = fileadmin/php/mylib.php
lib.myplace = USER
lib.myplace.userFunc = user_my->main
lib.myplace.param = {$TSC_DOMAIN}

c0d3r
04.06.2007, 17:03
Огромное спасибо за такой детальный ответ, Вы ответили на мой другой вопрос по поводу параметров в функции :) Сразу в догонку вопрос - а как должны быть описана в PHP эта функция с параметром? Насколько я понимаю, в параметрах классов типа user_ подразумевается наличие $content и $conf...

Я многое в тайпо пока что делаю по примерам, просветляясь по ходу дела или позже, спасибо участникам форума! Сидеть и раскуривать все доки оказалось крайне непрактичным делом :(

Передал я так:
const.ts (тут только константы для TS, их немного. так как они юзаются в разных .ts):

TSC_DOMAIN = RU
TSC_DOMAIN_FULL = SITE.{$TSC_DOMAIN}
...


setup.ts (здесь уже только те константы, которые уйдут в PHP):

constants {
TSC_WELCOME = Добро пожаловать на сайт {$TSC_DOMAIN_FULL}!
...
}



lib.myplace = USER
lib.myplace.userFunc = user_my->main


но так как мне константа нужна не как параметр, то в user_my создаём метод :)

/**
* Получение TS-константы в PHP
* setup.ts: constants {...}
* @param string $name
* @return mixed
* @static
*/
function cmsConst($name) {

if (!empty($GLOBALS['TSFE']->tmpl->setup['constants.'][$name])) {
return $GLOBALS['TSFE']->tmpl->setup['constants.'][$name];
} else {
return false;
}

}


и где надо, юзаем его:

echo $this->cmsConst('TSC_WELCOME');


В тайпо всё это так просто ;)

c0d3r
04.06.2007, 17:48
При изучении t3lib/config_default.php наткнулся на:

'defaultTypoScript_constants.' => Array(), // Lines of TS to include after a static template with the uid = the index in the array (Constants)


У кого-нибудь есть пример практического использования? :)