Вход

Просмотр полной версии : Странности Templavoila!?


Илья
03.02.2011, 23:38
Привет.
Уже весь мозг себе сломал, но не могу добится элементарной вещи.
Есть одна DS внутри нее две TO с немного разными html шаблонами (друг в друга не вложены). Хочу сделать возможность выбора дизайна страницы из BE.
Все размечено, ошибок нет.
Проблема в том, что один шаблон TO работает нормально (в FE страница показывается нормально), а вот второй УПОРНО не хочет показывать содержимое в FE. Причем сам html шаблон подключается (видно по скриптам внутри <head>, а вот внутри <body> </body> пусто.
Пробовал уже по-моему все:
вкладывал проблемный TO в работающий,
делал отдельную DS и внутри нее отдельный TO (почему это не заработало вообще большой вопрос! - все делал с нуля),
Играл с мепингом (убирал вообще все, включая root из ТО, и подключал в header'e тег body из html)
Не до конца понимаю надо ли вкладывать TO одну в другую в моем случае (наверное нет!), но не работает вообще никак.
Появилась мысль сделать все НА ОДНОЙ TO, заменяя подключаемый css через меппинг (выпадающее меню - меняющее attribute) - получится так? Хотя это не совсем то, что надо (к одному дизайну надо подключать php скрипт и соответственно в html надо его вывод добавлять)
Не дайте разрушить мозг в цвете лет.
PS DS пока не выкладываю, думаю проблема носит системный характер в недопонимании идеологии :(

Valery Romanchev
04.02.2011, 13:42
Не до конца понимаю надо ли вкладывать TO одну в другую в моем случае нет, подчиненные TO это, например, для версий для печати

Проблема в том, что один шаблон TO работает нормально (в FE страница показывается нормально), а вот второй УПОРНО не хочет показывать содержимое в FE.проверьте, валидный ли HTML код самого шаблона, который мепите
может там, к примеру, тег не закрыт

Илья
04.02.2011, 22:06
нет, подчиненные TO это, например, для версий для печати
То есть, для разного дизайна одной страницы правильнее все таки делать 2 TO на одном уровне?
А если дизайн (верстка html) различается - то наверное надо в разные DS разносить?

В итоге удалось добиться нормального вывода контента в FE, возможно проблема действительно связана с неправильной версткой (незакрытые теги). Просто внес изменения в работающий html и пересохранил.

Valery Romanchev
04.02.2011, 23:37
То есть, для разного дизайна одной страницы правильнее все таки делать 2 TO на одном уровне?
да

А если дизайн (верстка html) различается - то наверное надо в разные DS разносить?
зависит от того, различается ли структура
Например, 2х колоночный и 3х колоночный шаблон - это явно разные DS должны быть.
А если пара 3х колоночных, которые заличаются шириной колонок - то они могут быть и к одному DS привязаны.

Илья
04.02.2011, 23:46
да
Например, 2х колоночный и 3х колоночный шаблон - это явно разные DS должны быть.
Хммм, а я запихнул 2-х колоночный TO как потомок 3-х, все в одном DS и работает. Хотя это наверное скорее изврат, чем норма.
Спасибо за консультацию.
Можно еще уточнить про разные DS/TO. Мне надо к одному из дизайнов (TO) включить дополнительный php скрипт, остальный TO (ну или DS) должны быть без этого скрипта. Вопрос как это проще сделать? Можно ли включать PHP_SCRIPT прямо внутрь TV шаблона? Попробовал подключить к html файлы шаблона, так TV это не пропустила (вернее не дала добавить это). Или придется городить огород с TS и условиями (если такое получится)...

Valery Romanchev
05.02.2011, 13:18
Можно еще уточнить про разные DS/TO. Мне надо к одному из дизайнов (TO) включить дополнительный php скрипт, остальный TO (ну или DS) должны быть без этого скрипта. Вопрос как это проще сделать? Можно ли включать PHP_SCRIPT прямо внутрь TV шаблона? Попробовал подключить к html файлы шаблона, так TV это не пропустила (вернее не дала добавить это). Или придется городить огород с TS и условиями (если такое получится)...

можно так сделать:
в TS создаете
lib.sto-to-takoe = PHP_SCRIPT
добавляеете поле "TS код" в DS
а потом этот lib.sto-to-takoe мепите на нужный div или другой html тег только в нужном шаблоне

Илья
06.02.2011, 02:33
lib.sto-to-takoe = PHP_SCRIPT
добавляеете поле "TS код" в DS

Именно так и пробовал, но почему то не заработало...
Проверив все еще раз имею следующее:
TV - mapping switchpic на div
TS
lib.switchpic = PHP_SCRIPT
lib.switchpic.file = fileadmin/templates/scripts/switch.inc

switch.inc
...
echo "-NOT DIR !!!-";
...
$image = ...

Так вот в этом случае на странице в FE вижу -NOT DIR !!!-, причем сверху всего, а не внутри моего div'a. И вижу только есть делать mapping как INNER, иначе (OUTER) - в итоговый html из скрипта не попадает ничего.
В идеале хочется получить из php переменную $image и запихнуть ее в html шаблон так:
<img "src="<?php echo $image; ?>"
Насколько понимаю - для этого придется передавать через $content?
Хотя мне проще было бы вывести результат работы скрипта напрямую в НУЖНУЮ ЧАСТЬ html'a (через mapping в TV), если это вообще возможно сделать?..

Valery Romanchev
06.02.2011, 16:12
посмотрите пример использования PHP_SCRIPT
http://www.typo3wizard.com/en/snippets/general-config/count-file-downloads-with-awstats.html

там echo нет, вывод - переменная $content

Илья
07.02.2011, 05:11
Извините за назойливость, но куда попадет эта переменная $content, которую возвращает скрипт? Думаю, что сразу оперировать ей в html (куда вставляем скрипт) или в TS нельзя. Или как-то можно?

takitak
07.02.2011, 10:25
$content = '<img "src="'.$image.'/>';

попадает в lib.switchpic

Возможно вам нужен PHP_SCRIPT_EXT - какой смысл скрипта?

Илья
07.02.2011, 10:44
Возможно вам нужен PHP_SCRIPT_EXT - какой смысл скрипта?
Может быть и нужен, но судя по описанию в TSRef - нет.
Скрипт передает путь до картинки-бекграунда в html, как вы правильно заметили сюда: <img "src="'.$image.'/>
при каждом обновлении страницы берется новая картинка (случайно)...

$content = '<img "src="'.$image.'/>';
Вы предлагаете объединить мой и этот скрипт (по ссылке) или $content это какая-то зарезервированная переменная?

takitak
07.02.2011, 23:13
Да. ее надо использовать вместо echo.

Илья
07.02.2011, 23:45
Да. ее надо использовать вместо echo.
Спасибо. Все равно туплю.
Сначала в php сделать так:
$content = $image;
потом в html так:
<img src="<div id="phpscript"></div>" alt="" border="0" class="background"/>
и оно таки туда вставляется!
Осталось понять "Как это работает" (с).
Просто для себя, хочу разобраться... Или курить TSRef?

-=UncleByte=-
08.02.2011, 10:10
Именно TSRef + очень внимательно читать демо-исходники указанные в TSRef и поставляющиеся вместе с typo3.

Илья
08.02.2011, 15:06
Учится - всегда пригодится. Факт.
Но вот почему пустой php скрипт с тестовой заглушкой (PHP_SCRIPT!), подключенный в TV как описано выше генерирует в html не то, что хочется...
пример:<img src="fileadmin/templates/PHP_SCRIPT!">
И такая добавка в виде бесплатного довеска - fileadmin/templates/ добавляется ко всему, что выдает скрипт.
Подозреваю, что это настраивается через TS.
Из похожего в TSref нашел это: absRefPrefix, но я его не устанавливал...
Как удалить этот префикс?

-=UncleByte=-
08.02.2011, 16:02
Скорее это путь к файлам шаблона по умолчанию в TV. Поэтому копать надо где-то там.

Илья
08.02.2011, 16:36
Спасибо, только знать бы где там копать... :(
Нашел пару старых тем в листах рассылки насчет rewrite link path, но ответа не увидел.
В результате переместил папку туда, куда указывает TV :) и немного поменял свой скрипт.
Заработало, но осадочек остался...

-=UncleByte=-
08.02.2011, 18:36
Просто я никогда не пользовался мастером создания шаблона в TV и не знаю как оно работает. Я все по старому-старому мануалу вручную делаю даже в TV.
Ну и скрипты подключаю когда надо исключительно по примерам в TSRef:
includeLibs.user_clearKeywords = fileadmin/tmpl/clearKeywords.inc
...
lib.kwrd = TEXT
lib.kwrd {
data = page:keywords
ifEmpty {
data = page:title // field:subtitle // field:header
case = lower
preUserFunc = user_clearKeywords
}
}

Илья
09.02.2011, 04:57
Я рано стал радоваться... Почему то вставка через $content кеширует картинку для bg, и она так и остается неизменной, более того, даже при удалении этой картинки из папки в html все равно вписывается ее название... Нашел в TSref это: $GLOBALS["TSFE"]->set_no_cache(); но почему то и это не срабатывает
PS set_no_cache(); Вставлял в сам php скрипт.

Немного подумав, пошел на нужную страницу в BE и нажал галку "cache disable" и все чудестным образом заработало нормально.
Так что решение было на поверхности! :)

takitak
09.02.2011, 13:40
а может все-таки php_script_ext? Чтобы без кеша был только вывод скрипта, а страница - кешировалась?

Илья
09.02.2011, 13:43
Может быть, но я предпочту оставить как есть, как в старом анекдоте про программиста, сидящего глубоко в отладке :)
Тем более, что кроме картинки фона там только название сайта :)
Спасибо за помощь!