Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Тематические форумы > TypoScript практикум

Ответ
 
Опции темы Опции просмотра
Старый 16.01.2008, 18:48   #1
Sergey M Nikitin
Administrator
 
Аватар для Sergey M Nikitin
 
Регистрация: 10.07.2007
Адрес: Moscow
Сообщений: 181
Отправить сообщение для Sergey M Nikitin с помощью ICQ Отправить сообщение для Sergey M Nikitin с помощью Skype™
По умолчанию [solved] Собираем все записи дочерних узлов

Представим что есть каталог вида при этом вложенность у него переменная

Код:
+ Узел 1
+-+ Узел 2
  +- Узел 3
    + Узел N
Можно ли как-то средствами TS сделать (без USER func) в CONTENT либо RECORDS собрать все записи дочерних узлов, другими словами чтобы в узле 1 возваращались все записи с PID 1,2,3 узла, во втором 2,3 и т.д., в следствии того что вложенность у нас не известной величины то вариант pidInList.cObject = CONTENT (и выборка всех узлов с pidInList = this не подходит) так как надо двигатся бесконечно в низ по дереву, а не на один уровень.

Если реализоовать через USER то сталкиваюсь с такой проблемой что одним запросом к базе выбрать все дочернии узлы не реально (либо я еще не придумал такой запрос) приходиться рекурсивно проверять все узлы - приводит к тому что количество выборок более чем 3 уровня становятся в кол-ве всех узлов - что не есть гуд ... тормоза ... может все таки можно как то грамотно составить запрос к базе ?

У кого есть решение плииз помогите !
__________________
nikitinsm.ru

Последний раз редактировалось Sergey M Nikitin; 17.01.2008 в 16:08 Причина: [solved]
Sergey M Nikitin вне форума   Ответить с цитированием
Старый 16.01.2008, 18:59   #2
Pavel Antonov
Senior Member
 
Аватар для Pavel Antonov
 
Регистрация: 01.10.2004
Адрес: Россия, Москва
Сообщений: 1,204
Отправить сообщение для Pavel Antonov с помощью ICQ
По умолчанию

Никак. Что бы сделать грамотный запрос, сначала должна быть грамотная структура базы данных, чего в структуре БД TYPO3 нет в реализации деревьев.

Делайте кучу запросов... сама TYPO3 так же делает при построении HMENU.
__________________
Павел Антонов
Rich Media Development Ltd.
Блог: http://codeline.richmd.ru/
Pavel Antonov вне форума   Ответить с цитированием
Старый 17.01.2008, 16:07   #3
Sergey M Nikitin
Administrator
 
Аватар для Sergey M Nikitin
 
Регистрация: 10.07.2007
Адрес: Moscow
Сообщений: 181
Отправить сообщение для Sergey M Nikitin с помощью ICQ Отправить сообщение для Sergey M Nikitin с помощью Skype™
По умолчанию Вдруг кому понадобится.

Функция возвращает список всех дочерних узлов для pidInList в CONTENT
Код:
smCntnt = CONTENT
smCntnt{
  table = smTable
  select{
    pidInList.cObject = USER
    pidInList.cObject{
      userFunc = user_commonfuns->childNodes
    }
  }
}
PHP код:
class user_commonfuns extends tslib_pibase{
    
//getChilds properties
    
var $uidList = array();
    var 
$uidCheckList = array();
    
    function 
arrayToCommaList($arr,$sep ","){
        foreach (
$arr as $v){
            
$result .= $v.",";
        }
        
$result rtrim($result,",");
        return 
$result;
    }
    
    
//Call from TS user_commonfuns->childNodes
    
function childNodes($conf,$content){
        global 
$TSFE;
        
$this->uidCheckList[] = $TSFE->id;
        
$this->getChilds();
        return 
$this->arrayToCommaList($this->uidList);
    }
    
    function 
getChilds(){
        
$curUid array_pop($this->uidCheckList);
        
$this->uidList[] = $curUid;

        
$query "SELECT uid FROM pages WHERE pid = ".$curUid." AND deleted <> 1 AND hidden <> 1";
        
$res $GLOBALS['TYPO3_DB']->sql(TYPO3_db$query);
        while(
$row $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)){
            
$tempUids[] = $row['uid'];
            
$this->uidCheckList[] = $row['uid'];
        }
        if(
count($this->uidCheckList) != 0){
            
$this->getChilds();
        }
    }

__________________
nikitinsm.ru
Sergey M Nikitin вне форума   Ответить с цитированием
Старый 17.01.2008, 22:31   #4
void
Senior Member
 
Аватар для void
 
Регистрация: 14.03.2006
Адрес: Russia, Penza
Сообщений: 1,504
Отправить сообщение для void с помощью ICQ
По умолчанию

Ну зачем изобретать велосипед, если в tslib_cObj есть метод getTreeList ?
__________________
TYPO3 FAQ
void вне форума   Ответить с цитированием
Старый 17.01.2008, 22:47   #5
Pavel Antonov
Senior Member
 
Аватар для Pavel Antonov
 
Регистрация: 01.10.2004
Адрес: Россия, Москва
Сообщений: 1,204
Отправить сообщение для Pavel Antonov с помощью ICQ
По умолчанию

Цитата:
Сообщение от void Посмотреть сообщение
Ну зачем изобретать велосипед, если в tslib_cObj есть метод getTreeList ?
Да можно обойтись и одним HMENU, собрать строку id очень просто.
__________________
Павел Антонов
Rich Media Development Ltd.
Блог: http://codeline.richmd.ru/
Pavel Antonov вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в sr_feuser_admin все выводится вопросами demav Общие вопросы 1 09.09.2006 21:55


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


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

Хостинг и техническая поддержка: TYPO3 Лаборатория