Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   Доступ к TV field (http://forum.typo3.ru/showthread.php?t=7737)

romix 05.06.2009 05:27

Доступ к TV field
 
Господа, подскажите как реализовать?
есть структура страниц типа этой:

--level1.1 (menu)
|--level2.1 (TV-element [field=header,text,image])
|--level2.2 (TV-element [field=header,text,image])
|--level2.3 (TV-element [field=header,text,image])


Нужно сгенерить меню на первом уровне.
Но проблема в том что меню должно иметь картинки.
ОЧЕНЬ хорошо бы было чтобы картинку выбрать из ТВ поля.

Меню :
level2.1.FLEXIBLE_CONTENT(level2.1).field_image.

ТВ имеет вроде очень слабую возможность доступу извне и даже внутри проблема из контейнерами.

Ну вобщем можно нормально сделать в пейдж/ресоррсес добавить картинку и генерить меню но страниц много.

Кто что может подсказать ? Буду благодарен за ответы.

Pavel Antonov 07.06.2009 17:54

Цитата:

Сообщение от romix (Сообщение 24611)
Господа, подскажите как реализовать?
есть структура страниц типа этой:

--level1.1 (menu)
|--level2.1 (TV-element [field=header,text,image])
|--level2.2 (TV-element [field=header,text,image])
|--level2.3 (TV-element [field=header,text,image])


Нужно сгенерить меню на первом уровне.
Но проблема в том что меню должно иметь картинки.
ОЧЕНЬ хорошо бы было чтобы картинку выбрать из ТВ поля.

Меню :
level2.1.FLEXIBLE_CONTENT(level2.1).field_image.

ТВ имеет вроде очень слабую возможность доступу извне и даже внутри проблема из контейнерами.

Ну вобщем можно нормально сделать в пейдж/ресоррсес добавить картинку и генерить меню но страниц много.

Кто что может подсказать ? Буду благодарен за ответы.

Я бы рекомендовал крепить картинку к странице. Самый простой и эффективный метод.

Можно конечно добраться до полей с помощью kb_tv_cont_slide. Но ладно бы был лишний запрос на извлечение из базы поля и его разбор... Но судя по описанию расширения, еще и полный рутлайн будет строится для каждой страницы. С какой скоростью это будет работать, можете представить. :(

void 07.06.2009 23:41

Рутлайн в любом случае кешируется, можно брать всё из кеша.

romix 09.06.2009 02:59

Сейчас есть около 1000 страниц, и вводить для каждой картинку мой напарник сильно бы не хотел))
потому просьба показать как это сделать на примере меню, если меню очень сложно то просто вывод картинок-ТВ из подстраниц. Пример можно глянуть тут
Спасибо.

Pavel Antonov 09.06.2009 16:05

Цитата:

Сообщение от void (Сообщение 24620)
Рутлайн в любом случае кешируется, можно брать всё из кеша.

Если бы еще все пункты меню попадали в рутлайн...
не вариант.

Pavel Antonov 09.06.2009 16:10

Цитата:

Сообщение от romix (Сообщение 24634)
Сейчас есть около 1000 страниц, и вводить для каждой картинку мой напарник сильно бы не хотел))
потому просьба показать как это сделать на примере меню, если меню очень сложно то просто вывод картинок-ТВ из подстраниц. Пример можно глянуть тут
Спасибо.

Я бы сделал так... выбрал бы все элементы через CONTENT и отобразил стандартными средствами TV, только для меню сделал бы свой TV-шаблон со своим типом (по аналогии с type=print).

romix 20.06.2009 05:26

Цитата:

Сообщение от Pavel Antonov (Сообщение 24638)
Я бы сделал так... выбрал бы все элементы через CONTENT и отобразил стандартными средствами TV, только для меню сделал бы свой TV-шаблон со своим типом (по аналогии с type=print).

Не сильно понимаю о чем речь, "выбрал бы все элементы через CONTENT"- это означает сделал слайс со все подстраниц на корневую через КБ_екст?
Дальше не понял, если можно то подробно. Можно со ссылками на ключевые вещи которые нужно знать.

Lucifer 20.06.2009 11:27

вот вырезка из какого то моего TS. Надеюсь, смысл понятен.
Код:


    1 = CONTENT
    1 {
    table = tt_content
    select {
      where="тип элемента и ПИД"
    }
  }
}


Pavel Antonov 20.06.2009 16:06

Цитата:

Сообщение от romix (Сообщение 24806)
Не сильно понимаю о чем речь, "выбрал бы все элементы через CONTENT"- это означает сделал слайс со все подстраниц на корневую через КБ_екст?
Дальше не понял, если можно то подробно. Можно со ссылками на ключевые вещи которые нужно знать.

Почитайте FTB. Здесь есть про то что такое тип в шаблона TV, на примере print version. Тип швблона означает что вы можете иметь несколько вариантов отображение одного и того же FCE: полная версия контента, отображение контента как строчка в меню и т.д.

Все это задается под-шаблонами основного шаблона, который может быть затем выбран при выводе FCE (в TS). Дополнительный тип шаблона TV создается через TSConfig, так как по умолчанию есть только один тип - "Print version".

Цитата:

Сообщение от Lucifer (Сообщение 24807)
вот вырезка из какого то моего TS. Надеюсь, смысл понятен.
Код:


    1 = CONTENT
    1 {
    table = tt_content
    select {
      where="тип элемента и ПИД"
    }
  }
}


Так, только тип относился к типу вложенного шаблона TV. Потребуется написать свой renderObj где указать в вызове TV нужный childTemplate.

Читайте тут:
http://accio.lv/en/services/for-typo...ndering-types/

romix 07.08.2009 06:29

lib.menu = CONTENT
lib.menu {
select {
pidInList = this
orderBy = sorting
}
table = tt_content
renderObj = USER
renderObj {
userFunc = tx_templavoila_pi1->main_record
ds = 2
to = 4
table = tt_content
}

подскажите какой же все таки должен быть ТС чтобы меню заработало.Исправте ошибки, если вобще это минамально по сути.
и еще как вывести весь контент с подстраниц типа слайд но в документации не нашел почему то.
Спасибо.

Sergey M Nikitin 08.08.2009 10:13

Думаю поможет
 
http://forum.typo3.biz/showthread.php?t=7895

romix 10.08.2009 04:26

Цитата:

Сообщение от Sergey M Nikitin (Сообщение 25259)

а может использовать чтото подобное этому

Код:

* lib.members = CONTENT
        * lib.members {
        *        select {
        *                pidInList = {$styles.content.loginform.pid}
        *                orderBy = tx_lglalv_mysorting,uid
        *        }
        *        table = fe_users
        *        renderObj = USER
        *        renderObj {
        *                userFunc = tx_templavoila_pi1->main_record
        *                ds = 2
        *                to = 4
        *                table = fe_users
        *        }
        * }

PHP код:

    function main_record($content$conf) {
        
$this->initVars($conf);

        
// Make a copy of the data, do not spoil original!
        
$data $this->cObj->data;

        
// setup ds/to
        
$data['tx_templavoila_ds'] = $conf['ds'];
        
$data['tx_templavoila_to'] = $conf['to'];

        
// prepare fake flexform
        
$values = array();
        foreach (
$data as $k => $v) {
            
// Make correct language identifiers here!
            
if ($GLOBALS['TSFE']->sys_language_isocode) {
                
$srcPointer $data['tx_templavoila_ds'];
                if (
t3lib_div::testInt($srcPointer))    {    // If integer, then its a record we will look up:
                    
$DSrec $GLOBALS['TSFE']->sys_page->checkRecord('tx_templavoila_datastructure'$srcPointer);
                    
$DS t3lib_div::xml2array($DSrec['dataprot']);
                } else {    
// Otherwise expect it to be a file:
                    
$file t3lib_div::getFileAbsFileName($srcPointer);
                    if (
$file && @is_file($file))    {
                        
$DS t3lib_div::xml2array(t3lib_div::getUrl($file));
                    }
                }
                if (
is_array($DS)) {
                    
$langChildren $DS['meta']['langChildren'] ? 0;
                    
$langDisabled $DS['meta']['langDisable'] ? 0;
                    
$lKey = (!$langDisabled && !$langChildren) ? 'l'.$GLOBALS['TSFE']->sys_language_isocode 'lDEF';
                    
$vKey = (!$langDisabled && $langChildren) ? 'v'.$GLOBALS['TSFE']->sys_language_isocode 'vDEF';
                }
                else {
                    return 
$this->formatError('
                        Couldn\'t find a Data Structure set with uid/file='
.$conf['ds'].'
                        Please put correct DS and TO into your TS setup first.'
);
                }
            }
            else {
                
$lKey 'lDEF'$vKey 'vDEF';
            }
            
$values['data']['sDEF'][$lKey][$k][$vKey] = $v;
        }
        
$ff t3lib_div::makeInstance('t3lib_flexformtools');                                                                                         
        
$data['tx_templavoila_flex'] = $ff->flexArray2xml($values);                                                                                   

        return 
$this->renderElement($data$conf['table']);
    } 

это отсюда http://209.85.129.132/search?q=cache...ient=firefox-a

кажеться это стандартная функция в ТВ но как гласит коментарий она не задокументована.
на сколько я понял там можна задать ТО и ДС через которые можно прорендерить только часть полей которые мне нужны, а это ли не то что мне нужно?или я ошибаюсь
если обладателю ответа не влом-напишите плз. более менее работоспобный код ,ато я не потяну ковыряться в пхп.

Sergey M Nikitin 10.08.2009 10:20

Скорей всего подойдет, мой пример делает то же самое только в очень упрощенном виде, у меня например скорей всего не будет работать поддержка многоязычности, кстати в последних версиях 5 mysql вроде бы есть поддержка парсинга xml из поля, можно попробовать использовать это чтобы добраться до значения идентификатора записей к таблей tt_content.


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

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