PDA

Просмотр полной версии : Порядок обработки TS - объекты USER


c0d3r
20.06.2007, 12:54
Уважаемые, в доках пишется, что 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]

и

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
Благодарю за помощь!