Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   TypoScript практикум (http://forum.typo3.ru/forumdisplay.php?f=27)
-   -   tt_news и realurl кеш (http://forum.typo3.ru/showthread.php?t=9083)

ParserYa 16.12.2010 14:18

tt_news и realurl кеш
 
После долгих попыток самостоятельно решить проблему, решил обратиться за помощью к профессионалам.

Я разрабатываю сайт, использую templaVoila, realUrl и tt_news. Все расширения настроены по официальным мануалам. В настройках realUrl небольшие изменения, заточенные под конкретный случай.

Структура сайта стандартная: главная страница http://site.ru/ и разделы http://site.ru/news/ , http://site.ru/about/ и так далее.

Хочу на каждую страницу добавить в левую колонку новости в режиме LIST. В templaVoila замэпил блок под новости - typoscriptObjectPath, библиотека lib.leftnews. В TS пишу, согласно мануала tt_news,

Код:

plugin.tt_news {
  dontUseBackPid = 1
  templateFile = fileadmin/templates/news/tt_news_v3_template.html
  singlePid = 3
 }

# ...

lib.newsList < plugin.tt_news
lib.newsList {
code >
code = LIST
pid_list >
pid_list = #айдишник где лежат новости
catImageMode = 0
catTextMode = 0
}

lib.leftnews = COA
lib.leftnews.wrap = <!-- noindex -->|<!-- /noindex -->
lib.leftnews {
10 = TEXT
10.wrap = <h2>|</h2>
10.value = Новости
20 < lib.newsList
}

Вроде все хорошо.. Далее начинается самое интересное:
Сохраняю TS, сбрасываю кеш, открываю главную станицу, новости появились.
Перехожу в любой другой раздел: загаловок <h2>Новости</h2> есть, самих новостей нет.
Сбрасываю кеш в backend, открываю любой раздел: Новости появились.
Открываю главную страницу: загаловок <h2>Новости</h2> есть, самих новостей нет.

То есть после сброса кеша новости появляются либо на главной странице, либо в разделах, в зависимости от того, что первое было открыто в браузере и закешировалось.

Как избавиться от подобного?

Андрей Аксенов 17.12.2010 12:53

Почти все верно...
Используйте оператор =< - это ссылка на объект!
А оператор < - это копия объекта! То есть совсем другой объект.
Вот что написано в "Синтаксис TypoScrypt и его всестороннее изучение":
Цитата:

Пример:
myObject = HTML
myObject.value = <BLINK> HTML - code </BLINK>

myOtherObject < myObject

В этом случае получим два независимых дублирующих набора объектов/свойств. Они не зависят друг от друга, а яв­ляются лишь копиями.
....
Примечание о ссылках на объекты (в Шаблонах TypoScript):
Когда TypoScript используется в контексте Шаблонов TypoScript, можно обнаружит, что на объекты содержимого ино­гда можно ссылаться вместо копирования. Ссылки означают, что множество объектов дерева могут использовать один и тот же объект, без создания фактической его копии, просто указывая его полный путь.
Пример на основе предыдущего кода:
0: myObject = HTML
1: myObject.value = <BLINK> HTML - code </BLINK>
2:
3: pageObj {
4: 10 = < myObject
5: }
Присмотритесь к строке 4: похоже на свойство TypoScript, но это не так!!! Эта возможность появляется на уровне контекста, то есть это будет работать только потому, что движок Шаблонов TypoScript запрограммирован на распозна­вание названий объектов содержимого, начинающихся с "<", как ссылок на пути объектов после знака <.

dmartynenko 17.12.2010 20:08

По идее копии должны показывать то же самое, ведь настройки то нормальные и одни и те же.

Присмотритесь еще к эксту coago - он позволяет сделать индивидуальное кэширование блока на указанный период (или вечно). Причем блок отрендеренный для одной страницы будет выводиться на других из кэша - что сильно экономит время генерации в случае tt_news.

ParserYa 28.12.2010 02:03

Что бы не создавать новой темы, задам свой другой вопрос здесь же.
Есть TS для меню:
Код:

lib.mainMenu.wrap = <ul>|</ul>
lib.mainMenu.1 = TMENU
lib.mainMenu.1.NO.allWrap = <li>|</li>

Он генерирует меню такого вида:
Код:

<ul>
  <li><a href="#">1 пункт</a></li>
  <li><a href="#">2 пункт</a</li>
</ul>

Можно ли как-то поправив TS, сделать меню такого вида:
Код:

<ul>
  <li><a href="#"><b></b>1 пункт</a></li>
  <li><a href="#"><b></b>2 пункт</a</li>
</ul>

Важно, что тег <b> вложен в ссылку, а не с наружи ее.

dmartynenko 28.12.2010 13:05

Посмотрите другие варианты wrap-ов в доке TSRef. Все это сделать можно.

ParserYa 28.12.2010 13:46

Да действительно.. вот решение:
Код:

lib.mainMenu.1.NO.stdWrap.dataWrap = <b></b>|
Спасибо, dmartynenko :)


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

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