PDA

Просмотр полной версии : Передача параметров в userFunc


c0d3r
14.05.2007, 15:36
Возможно ли такое? Не нашёл.

lib.items = USER
lib.items {
userFunc = user_Class->items
}



function items($topic) {
...
}


Требуется в TS указать аргумент $topic для метода items.
Аргумент виден в TTS, например, это ID текущей страницы.
Заранее благодарю за помощь!

P.S. Судя по http://wiki.typo3.org/index.php/TSrefConditions#userFunc
lib.items = USER
lib.items {
userFunc = user_Class->items(topic)
}

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

P.P.S. Что-то меня совсем коротнуло, вопрос вдогонку: как в функцию передать значение ID текущей страницы?
Обыскался по page_id, но, по-моему, переменная по-другому называется.

void
14.05.2007, 18:21
Вы всё перепутали...
userFunc cObject'a USER всегда принимает только два параметра: $content и $conf. Первый в данном случае не используется, а во втором содержится массив TS-параметров.

Ссылка ведёт на описание userFunc-ов TS-условий, это совсем другое!

В функцию плагина можно передать данные следующими способами:
1) через TS-параметры, например
lib.items = USER
lib.items{
userFunc = tx_class->main
topic = 15
}
class tx_class{
function main($content,$conf){
echo $conf['topic'];//выведет "15"
}
}

2) через флексформу
3) через внешнее окружение - GET/POST, кроме того, существует множество тайпо3-объектов с нужными параметрами. $GLOBALS['TSFE']->id, например, содержит id текущей страницы.

c0d3r
14.05.2007, 18:32
Большое спасибо.
Да, я путаюсь, поэтому завёл в нашей интранет-вики уже 2 доки по TYPO3.
Разжёвываю там себе переваренное, чтоб не забыть.
Ну, у меня не плагин, просто PHP-класс, попробую завтра TS-параметры.
2) пропускаю, мал ещё (а можно ткнуть в пример?)
3) интересует значение ID страницы в самом TS, а не в PHP :)

lib.items = USER
lib.items{
userFunc = tx_class->main
topic = переменная_c_ID_страницы
}

void
14.05.2007, 19:52
Если я правильно вас понимаю, вам нужно нечто типа
lib.items = USER
lib.items{
userFunc = tx_class->main
topic.data = page:id
}

class tx_class extends tslib_pibase{
function main($cnt,$conf){
$topic = $this->cObj->stdWrap($conf['topic'],$conf['topic.']);
return $topic;
}
}

c0d3r
15.05.2007, 10:09
Опять замечу, что речь идёт не о плагине, а о отдельном от TYPO3 классе.
class user_class {
function test($topic){
...
return $content;
}
}

В метод test мне нужно передать параметр из TS.

Из Вашего примера выше я понял, что это возможно:
1) через TS-параметры, например
lib.items = USER
lib.items{
userFunc = tx_class->main
topic = 15
}

но в следующим Вашем ответе TS выглядит уже немного другим.

Пошёл пробовать.
Попробовал. Код topic = 15 через TS не катит.

Pavel Antonov
15.05.2007, 13:15
Опять замечу, что речь идёт не о плагине, а о отдельном от TYPO3 классе.

А какая разница?

c0d3r
15.05.2007, 13:22
Может быть, это? :)
... extends tslib_pibase{...

void
15.05.2007, 14:48
Да это не влияет, собственно. Всё что есть USER, может считаться плагином.
Неясно, почему не катит topic = 15 и чем вас не устраивает вариант topic.data = page:title? Можно вообще написать нечто вродеlib.items = USER
lib.items{
userFunc = tx_myclass->main
topic = TEXT
topic.data = page:title
topic.wrap = <h1>|</h1>
}class tx_myclass{
function main($cnt,$conf){
$cobj = t3lib_div::makeInstance('tslib_cObj');
return $cobj->cObjGetSingle($conf['topic'],$conf['topic.']);
}
}
Опишите лучше свою цель. Чего вы хотите-то?)

c0d3r
15.05.2007, 15:29
Спасибо, думаю, Ваш пример работоспособный. Но хотел я немного другого - передать входной параметр в userFunc и там работать с ним БЕЗ использования TYPO3-кода ($conf и т.д.). То есть TS устанавливает входной аргумент для userFunc, PHP берёт его и работает внутри метода - как c $topic.

function test($topic){
...
$content = "Крутой " . $topic;
return $content;
}

Похоже, предполагается, что userFunc (плагин или не-плагин) принимает только 2 аргумента: $content и $conf. Про второй я уже понял, что передаётся в первом - ещё нет :)

Я хотел создать CMS-независимую либу, но всё это, похоже, идиллия :(

Pavel Antonov
15.05.2007, 16:12
Похоже, предполагается, что userFunc (плагин или не-плагин) принимает только 2 аргумента: $content и $conf. Про второй я уже понял, что передаётся в первом - ещё нет :)

$content - текуще содержимое буфера вывода. Обычно пустое для плагинов. RTFM!!!

Я хотел создать CMS-независимую либу, но всё это, похоже, идиллия :(

Либа, отдельно, плагин отдельно... В чем проблема то? Вам токое понятие как API, что нибудь говорит?

c0d3r
15.05.2007, 16:19
Говорит. Осталось его прочитать :)
Всё же кол-во документации по TYPO3 просто угнетает, к тому же кол-во переходит в качество крайне тяжело.
Я её уже распечатываю в режиме две страницы на листе а4, берегу природу.
К тому же много приходится постоянно перечитывать - происходит метание туда-сюда по каждому мелкому затыку.
Этот форум для меня оказался, как это обычно и бывает, эффективнее документации и RTFM.
Что, конечно, не умаляет её какой-никакой пользы :)