Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   Передача данных из PHP в TS или TV-FCE (http://forum.typo3.ru/showthread.php?t=3293)

c0d3r 03.05.2007 12:20

Передача данных из PHP в TS или TV-FCE
 
Уважаемые, подскажите как реализовать сабж.

У меня есть своя библиотека, генерящая HTML.

Создал HTML шаблон, подключил через TV.

Как мне залить HTML данные из PHP скрипта в TS или FCE TV-шаблона?

Если у кого есть пример, я бы оттолкнулся от него, разжёвывать не надо, мне нужно просто понять на пальцах, как брать данные из внешних PHP скриптов.

то есть вот это мне понятно
page.10.userFunc = tx_templavoila_pi1->main_page

но вот как задать данные конкретному блоку этого шаблона?

Кое-что нашёл в вики: http://wiki.typo3.org/index.php/Typo...HP_Interaction, но там речь о своём плагине и без TV.

Ещё вот что нашёл:
TypoScript by example - PHP include-scripts
http://typo3.org/documentation/docum...0.16/view/8/1/

TSref - PHP include scripts
http://typo3.org/documentation/docum...1.0/view/13/1/

Но все эти доки - без применения к TV.

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

PhilD 03.05.2007 14:02

включаемый скрипт - это обычный TS объект. значит можно замапить нужную область как TS object path (как меню) и передать туда нужный объект

c0d3r 03.05.2007 17:04

Работающий код:
Код:

lib.myObject = TEXT
lib.myObject {
    value = РУССКИЙ TEST!!!
}

превращаем в неработающий парой движений руки %)
Код:

lib.myObject = PHP_SCRIPT
lib.myObject {
    file = fileadmin/inc/test.inc
}

test.inc:
PHP код:

$content 'ТЕСТИРУЕМ PHP_SCRIPT!'

Результат отрицательный.

Код:

lib.myObject = PHP_SCRIPT
lib.myObject {
    file = fileadmin/inc/test.php
}

test.php:
PHP код:

class testClass {
    
    function 
testClass() {}
    
    function 
output() {
        return 
'PHP_SCRIPT ТЕСТИРУЕМ!';
    }
}

$content testClass::output(); 

Результат отрицательный.

Где я туплю в синтаксисе TS?

gunner 04.05.2007 11:27

Цитата:

Сообщение от c0d3r (Сообщение 11730)
Работающий код:
Код:

lib.myObject = TEXT
lib.myObject {
    value = РУССКИЙ TEST!!!
}

превращаем в неработающий парой движений руки %)
Код:

lib.myObject = PHP_SCRIPT
lib.myObject {
    file = fileadmin/inc/test.inc
}

test.inc:
PHP код:

$content 'ТЕСТИРУЕМ PHP_SCRIPT!'

Результат отрицательный.

попробуй еще так:

Setup:
Код:

lib.myObject = PHP_SCRIPT
lib.myObject {
    file = fileadmin/inc/test.inc
}

test.inc:
Код:

<?

class testClass {
   
    function testClass() {}
   
    function output() {
        return 'PHP_SCRIPT!';
    }
}

$content = testClass::output(); 

?>

проверено, работает... удачи =)

c0d3r 04.05.2007 12:47

У меня не работало, пока я не перенёс конфу объекта выше подключения TV.

Код:

lib.myObject = PHP_SCRIPT
lib.myObject {
    file = fileadmin/inc/test.inc
}
....
page.10.userFunc = tx_templavoila_pi1->main_page

хотя исходный тестоый код класса TEXT работал и ниже

Код:

page.10.userFunc = tx_templavoila_pi1->main_page
...
lib.myObject = TEXT
lib.myObject {
    value = РУССКИЙ TEST!!!
}

Вот такие пироги, получается, что описания FCE на основе CObject PHP_* должны идти раньше подключения TV шаблона - оно и логично, конечно...

c0d3r 04.05.2007 15:54

Появился вот ещё какой интересный вопрос. Назначение FCE вроде бы понятно - генерация и выдача контента :) Но на каждый чих создавать FCE тоже как-то неоптимально. Например, есть заголовок сайта "Добро пожаловать на сайт SITE.RU!", входящий в шаблон с несколькими FCE, в этом заголовке, например, для нескольких доменов меняется только маленькая строковая переменная - написание домена (.NET, .COM и .т.д.). Можно ли передать из TS шаблона эту строку в шаблон? Может быть, использовать включения на PHP? Но, по-моему, они вырезаются при обработке шаблона (я имею в виду обработку TV замапенного HTML-шаблона).

Что-то в этом роде:
Код:

...<td>Добро пожаловать на сайт SITE.<?php echo$TSparserObject->setup['site.']['domainCode']?><td>...
P.S. Конечно, можно создать более крупный FCE и там уже генерить всё что угодно в PHP $content.
Но весь сыр-бор от желания максимально разместить HTML разметку в одном файле - шаблоне, для общей наглядности.

PhilD 04.05.2007 17:38

Для таких вещей существует наследование и подключение TS-шаблонов. Т.е. все общее выносится в один шаблон, а отальные делаются based on на нем.
http://typo3.org/documentation/docum...2/6/#id3038155

c0d3r 07.05.2007 16:20

Спасибо. К сожалению, у меня нет опыта в построении многошаблонной иерархии, да и тема это несколько другая. Меня устраивает 1 шаблон для TV. Вопрос был несколько другого плана: подстановка имеющихся TS-данных в шаблон.

То есть в TS-setup происходит инициализация некоторых данных, а в TV шаблоне есть какой-то способ отображения этой информации (без создания FCE).

Или я что-то не просёк из предыдущего ответа?

PhilD 07.05.2007 17:11

скорее я не понял вопроса. Если я не ошибаюсь, так просто как вы хотите - не получится. Т.е. придется отдельно замапить .first-level-domain причем outer (или SITE.SMTH), а потом в него выводить нужное значение из TS или php. Причем я бы сделал строго наоборот, чем вы - замапил все приветствие, и весь его текст ввел вы в template setup. Или (более изящное решение) - ввел вы этот текст как контент-элемент на странице-хранилище, ввел бы в него маркер вместо имени сайта, и вставил бы с заменой маркера.

c0d3r 07.05.2007 17:31

> как контент-элемент на странице-хранилище
Спасибо.
"контент-элемент" - имеется в виду FCE?
И можно ли пример более изящного решения разжевать для чайника? Заранее благодарю за помощь.
+ Не понял термин "маркер".

И ещё. Я, конечно, сейчас больше мыслю как PHP-кодер, а не как TYPO3-разработчик - практики мало, теории много - запутаться легко. Поэтому пока у меня алгоритм такой - замапить несколько мега-FCE сайта, например, блок "новости". А все наполнение блоков делать через подключаемые PHP классы ну и плюс некоторое кол-во TS-setup.

То есть пока понимание TV/FCE на самом общем уровне типа
Код:

lib.htmlHeaderTop = PHP_SCRIPT
lib.htmlHeaderTop {
    file = fileadmin/inc/test.inc
}
...
lib.htmlHeaderTop2 = USER
lib.htmlHeaderTop2 {
    userFunc = testClass2->output
}

Настройку DS внутри FCE даже не пробовал пока.


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

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