Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   Передача параметров в userFunc (http://forum.typo3.ru/showthread.php?t=3390)

c0d3r 14.05.2007 15:36

Передача параметров в userFunc
 
Возможно ли такое? Не нашёл.

Код:

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

PHP код:

function items($topic) {
...


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

P.S. Судя по http://wiki.typo3.org/index.php/TSre...tions#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
}
PHP код:

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
}

PHP код:

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 классе.
PHP код:

class user_class {
 function 
test($topic){
...
  return 
$content;
 }


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

Из Вашего примера выше я понял, что это возможно:
Цитата:

Сообщение от void (Сообщение 12007)
1) через TS-параметры, например
lib.items = USER
lib.items{
userFunc = tx_class->main
topic = 15
}

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

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

Pavel Antonov 15.05.2007 13:15

Цитата:

Сообщение от c0d3r (Сообщение 12019)
Опять замечу, что речь идёт не о плагине, а о отдельном от TYPO3 классе.

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

c0d3r 15.05.2007 13:22

Может быть, это? :)
PHP код:

... 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>
}

PHP код:

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.

PHP код:

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


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

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

Pavel Antonov 15.05.2007 16:12

Цитата:

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

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

Цитата:

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

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


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

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