Просмотр полной версии : Порядок обработки 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, то он будет обработан первым
Спасибо, так оно и есть.
Хотя для TV столкнулся с несколько иным поведением - порядок обработки соответствует порядку в DS, а не в TS.
Возвращаясь к напечатанному. Всё-таки столкнулся с непонятным :(
Есть блок контента и пейджеры вверху и внизу.
Вот как это прописано в 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 свойство...
Заранее благодарю за любую помощь!
А почему бы не сделать так:
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);
}
}
Большое спасибо за пример, это реальная помощь. Можно сделать и так. Я уже подумал, что можно объединить в одну функцию, правда, тогда придётся немного перемапить страницу, ну что ж, можно и перемапить ради результата :)
А по поводу второго вопроса есть опыт? :) Чисто для багажа знаний, там ещё не вагон и тележка.
Ещё вопрос можно ли второму, нижнему пейджеру, передать контент ($content) из первого, верхнего с помощью TS?
Средствами TS сделать это невозможно.
Работает на vBulletin® версия 3.8.1. Copyright ©2000-2024, Jelsoft Enterprises Ltd. Перевод: zCarot