Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   Порядок обработки TS - объекты USER (http://forum.typo3.ru/showthread.php?t=3768)

c0d3r 20.06.2007 12:54

Порядок обработки TS - объекты USER
 
Уважаемые, в доках пишется, что TS обрабатывается последовательно по строкам.

Но так ли это применительно к объектам USER?

Код:

lib.test1 = USER
lib.test1 {
        userFunc = user_view->test1
}

lib.test2 = USER
lib.test2 {
        userFunc = user_view->test2
}

Я добавил отладку (echo) в оба метода test.
test2 отрабатывает первым.
Хочется понять как такое может быть и почему?

ps Оба определения не обязательно в одном конфиги, могут последовательно подгружаться файлы .ts

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

Pavel Antonov 20.06.2007 14:31

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

если lib.test2 подключен на странице "выше" чем lib.test1, то он будет обработан первым

c0d3r 20.06.2007 15:22

Спасибо, так оно и есть.
Хотя для TV столкнулся с несколько иным поведением - порядок обработки соответствует порядку в DS, а не в TS.

c0d3r 29.08.2007 15:39

Возвращаясь к напечатанному. Всё-таки столкнулся с непонятным :(
Есть блок контента и пейджеры вверху и внизу.

Вот как это прописано в DS:
...
mainContent
mainTopPager
mainBottomPager
...

Вот как это прописано в TS setup:
Код:

lib.mainContent = USER_INT
lib.mainContent {
        userFunc = user_view->mainContent
}

// пейджеры нужны только на определённых страницах
[PIDinRootline = {$PAGE_ID1}] [PIDinRootline = {$PAGE_ID2}] ...
lib.mainTopPager = USER_INT
lib.mainTopPager {
        userFunc = user_view->mainPager
}

lib.mainBottomPager = USER_INT
lib.mainBottomPager {
        userFunc = user_view->mainPager
}
[GLOBAL]

При выводе debug() отладки для TV получаем:
tx_templavoila_pi1->processdatavalues: field_maincontent
tx_templavoila_pi1->processdatavalues: field_maintoppager
tx_templavoila_pi1->processdatavalues: field_mainbottompager

Но если вставить отладочные эхи в оба метода, то получается, что mainPager отрабатывает раньше, чем mainContent.

Кто-нибудь сталкивался с таким?
Мне важно, чтобы mainContent отрабатывался раньше mainPager.

Ещё вопрос можно ли второму, нижнему пейджеру, передать контент ($content) из первого, верхнего с помощью TS?
Сейчас там тупо через PHP static свойство...

Заранее благодарю за любую помощь!

void 29.08.2007 16:54

А почему бы не сделать так:
Код:

lib.mainContent = USER_INT
lib.mainContent {
        userFunc = user_view->justMain
        whoiam = content
}

// пейджеры нужны только на определённых страницах
[PIDinRootline = {$PAGE_ID1}] [PIDinRootline = {$PAGE_ID2}] ...
lib.mainTopPager = USER_INT
lib.mainTopPager {
        userFunc = user_view->justMain
        whoiam = pagerTop
}

lib.mainBottomPager = USER_INT
lib.mainBottomPager {
        userFunc = user_view->justMain
        whoiam = pagerBottom
}
[GLOBAL]

и
PHP код:

class user_singleton{
 static 
$instance;
  static 
$generated;
  static 
$content;
  static 
$pagerTop;
  static 
$pagerBottom;

 private function 
__construct() {}
 
   public static function 
getInstance() {
     if (!
self::$instance instanceof self) {
       
self::$instance = new self();
     }
     return 
self::$instance;
   }
 function 
justMain($content,$conf){
   if (!
$generated){
      
$this->content $this->genContent();
      
$this->pagerTop $this->genPagerTop();
      
$this->pagerBottom $this->genPagerBottom();
      
$generated true;
   }
   switch (
$conf['whoiam']){
    case 
'content':return $this->content;
    case 
'pagerTop':return $this->pagerTop;
    case 
'pagerBottom':return $this->pagerBottom;
  }
 }
}
class 
user_view
  
$inst;
  function 
__construct(){
     
$this->inst user_singleton::getInstance();
  }
  function 
justMain($content,$conf){
     
$this->inst->justMain($content,$conf);
  }



c0d3r 29.08.2007 17:06

Большое спасибо за пример, это реальная помощь. Можно сделать и так. Я уже подумал, что можно объединить в одну функцию, правда, тогда придётся немного перемапить страницу, ну что ж, можно и перемапить ради результата :)

А по поводу второго вопроса есть опыт? :) Чисто для багажа знаний, там ещё не вагон и тележка.

Цитата:

Ещё вопрос можно ли второму, нижнему пейджеру, передать контент ($content) из первого, верхнего с помощью TS?

void 29.08.2007 17:47

Средствами TS сделать это невозможно.

c0d3r 29.08.2007 18:02

Благодарю за помощь!


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

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