Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   клонирование расширения на подстраницы (http://forum.typo3.ru/showthread.php?t=10275)

3ton 21.08.2012 12:12

клонирование расширения на подстраницы
 
создал галерею

дерево галереи - обычные старницы сайта
элементы галереи - объекты моего расширения - вставляются как обычный контент на страницы в админке

элемент галереи содержит название, описание и фотки

для клонирования механизма использовал подключение расширения в корневой папке галереи через тупоскрипт (там же механизм отрабатывания листинг или сама галерея и превьюшки)

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

если вставлять расширение на страницу как объект в контентную область - все отрабатывается как нужно даже в режиме кеширования страницы, но это неудоство - страниц может быть более сотни и на все вставлять расширение - глупо, думается тут должен быт ьдругой механизм

использую typo3 4.6 и TV

в пределах старницы урл меняется по следующим правилам

если присутствует сегмент "gallery" - считается что мы отображаем не список галерей а просматриваем галерею

если присутствует сегмент "page" - отрабатываем пагинацию независимо от режима - список или просмотр

dmartynenko 21.08.2012 19:10

URL вы как формируете?
Экстеншен у вас наверное свой и вставлен как USER?
Если код экстеншена на базе tslib_pibase, то может стоит $this->pi_USER_INT_obj = 1;?

3ton 21.08.2012 22:44

URL формирую и отрабатываю вручную

расширение вставлено как

Код:

lib.ts_content = COA
plugin.tx_3tgallery_pi1.mode = LISTING
[globalString = GP:3t_gallery|gallery=/[0-9a-zA-Z_]/]
plugin.tx_3tgallery_pi1.mode = GALERY
[end]
lib.ts_content.10 = CONTENT
lib.ts_content.10 < plugin.tx_3tgallery_pi1


кстати может есть какой-то более корректный способ проверки наличия переменной gallery
потому как регулярка всетаки на мой взгляд тут лишняя, а другого рабочего варианта не обнаружил

на всякий случай - временно вышел из ситуации отработкой режима на стороне расширения в РНР
потому часть кода можно убрать



Код:

lib.ts_content = COA
lib.ts_content.10 = CONTENT
lib.ts_content.10 < plugin.tx_3tgallery_pi1


dmartynenko 22.08.2012 12:23

Ну так как все таки формируете URL? Приведите код.
Просто если ваш плагин кэшируемый и вы формируете URL корректно через typolink, то к URL добавляется параметр cHash. Он позволяет кэшировать содержание страницы по URL, с учетом разных параметров.
Подробнее http://typo3.org/documentation/artic...ies-of-chash-1
Кстати при использовании RealURL cHash в ссылке не виден, но он есть.

Если вы формируете URL как-то сами минуя typolink (то есть там нет cHash), то ваш плагин будет работать нормально только если будет не кэшируемым (USER_INT). Иначе механизм кэширования TYPO3 будет вам "мешать".

Что касается условия, такой вариант пробовали?
Код:

plugin.tx_3tgallery_pi1.mode = GALERY
# если 3t_gallery[gallery] не задан, то показываем список
[globalVar = GP:3t_gallery|gallery = ]
plugin.tx_3tgallery_pi1.mode = LISTING
[GLOBAL]

Посмотри TSRef, в TS нет закрывающего тэга [end], есть тэг перехода в область глобальной видимости [GLOBAL]

Еще дополню касательно условия в TS. Каждое TS условие создает в кэше страниц отдельную, так сказать, ветку кэша. Если сайт большой и страниц много, то кэш может сильно разрастаться. Поэтому я лично предпочитаю делать переключение режима плагина по условия вида "есть 3t_gallery[gallery]" в коде самого экста.

3ton 22.08.2012 12:55

Цитата:

Сообщение от dmartynenko (Сообщение 34358)
Ну так как все таки формируете URL? Приведите код.
Просто если ваш плагин кэшируемый и вы формируете URL корректно через typolink, то к URL добавляется параметр cHash. Он позволяет кэшировать содержание страницы по URL, с учетом разных параметров.
Подробнее http://typo3.org/documentation/artic...ies-of-chash-1
Кстати при использовании RealURL cHash в ссылке не виден, но он есть.

Если вы формируете URL как-то сами минуя typolink (то есть там нет cHash), то ваш плагин будет работать нормально только если будет не кэшируемым (USER_INT). Иначе механизм кэширования TYPO3 будет вам "мешать".

спасибо, покурю доки в этом направлении
на данный момент линк формируется вручную так
Код:

$urlA = $this->pi_getPageLink($pageId).'\gallery\'.$gallery['alias'];

$urlP = $this->pi_getPageLink($pageId).'\page\'.$page;

Цитата:

Сообщение от dmartynenko (Сообщение 34358)
Что касается условия, такой вариант пробовали?
Код:

plugin.tx_3tgallery_pi1.mode = GALERY
# если 3t_gallery[gallery] не задан, то показываем список
[globalVar = GP:3t_gallery|gallery = ]
plugin.tx_3tgallery_pi1.mode = LISTING
[GLOBAL]


не пробовал, спасибо за совет(ценно для саморазвития) но пока решил оставить рутинг режима на РНР

Цитата:

Сообщение от dmartynenko (Сообщение 34358)
Посмотри TSRef, в TS нет закрывающего тэга [end], есть тэг перехода в область глобальной видимости [GLOBAL]

информацию брал из доков typo3
Doc Core TS
Цитата:

So in this example the line “[GLOBAL]” is a condition (built-in, always returns true) and the line “[ condition 1 ][ condition 2]” is a condition. If “[ condition 1 ][ condition 2]” is true then the TypoScript in the middle would be parsed until [GLOBAL] (or [END]) resets the conditions and parses the TypoScript for any case again.
Цитата:

Сообщение от dmartynenko (Сообщение 34358)
Еще дополню касательно условия в TS. Каждое TS условие создает в кэше страниц отдельную, так сказать, ветку кэша. Если сайт большой и страниц много, то кэш может сильно разрастаться. Поэтому я лично предпочитаю делать переключение режима плагина по условия вида "есть 3t_gallery[gallery]" в коде самого экста.

так и сделал пока

dmartynenko 22.08.2012 13:05

Ссылки вам нужно формировать так:

Код:

$urlA = $this->pi_getPageLink($pageId, '', array($this->prefixId => array('gallery' => $gallery_id)));
$urlP = $this->pi_getPageLink($pageId, '', array($this->prefixId => array('page' => $page_id)))

Тут предполагается что $this->prefixId у вас задан как 3t_gallery. Хотя обычно, после кикстартера и по хорошему тону TYPO3, он вида tx_3tgallery_pi1.

Ну а что-бы такие URL стали "красивыми", то нужен конфиг для RealURL. Хотя полагаю у вас он уже есть, ведь вы как-то получаете из красивого URL обратно 3t_gallery[gallery].

3ton 22.08.2012 13:18

Цитата:

Сообщение от dmartynenko (Сообщение 34360)
Ссылки вам нужно формировать так:

Код:

$urlA = $this->pi_getPageLink($pageId, '', array($this->prefixId => array('gallery' => $gallery_id)));
$urlP = $this->pi_getPageLink($pageId, '', array($this->prefixId => array('page' => $page_id)))


спасибо, попробую... это решит проблемы с кешированием содержимого эксетншена подключенного через тупоскрипт???

Цитата:

Сообщение от dmartynenko (Сообщение 34360)
Тут предполагается что $this->prefixId у вас задан как 3t_gallery. Хотя обычно, после кикстартера и по хорошему тону TYPO3, он вида tx_3tgallery_pi1.

Ну а что-бы такие URL стали "красивыми", то нужен конфиг для RealURL. Хотя полагаю у вас он уже есть, ведь вы как-то получаете из красивого URL обратно 3t_gallery[gallery].

они описаны, но только в разделе postVarSets

Код:

   
'postVarSets' => array(
      '_DEFAULT' => array(
        'page' => array(
          array(
            'GETvar' => 'page'
          )
        ),
        'gallery' => array(
          array(
            'GETvar' => '3t_gallery[gallery]'
          )
        ),
      )
    ),


dmartynenko 22.08.2012 13:38

Решит, только если у вас в эксте прописано $this->pi_USER_INT_obj = 0. Я вас спрашивал что у вас с этим параметром, вы не ответили.

Что касается page, то в предложеном мной варианте нужно в конфиге RealURL сделать так:

Код:

'page' => array(
  array(
    'GETvar' => '3t_gallery[page]'
  )
),

Если не хотите для RealURL менять, то тогда ссылку сделайте так
Код:

$urlP = $this->pi_getPageLink($pageId, '', array('page' => $page_id));
Короче одно другому должно соответствовать.

3ton 22.08.2012 14:21

Цитата:

Сообщение от dmartynenko (Сообщение 34364)
Решит, только если у вас в эксте прописано $this->pi_USER_INT_obj = 0. Я вас спрашивал что у вас с этим параметром, вы не ответили.

а где его глянуть??? :)
это имеется ввиду???
Код:

t3lib_extMgm::addPItoST43($_EXTKEY, 'pi1/class.tx_3tgallery_pi1.php', '_pi1', 'list_type', 0);
Цитата:

Сообщение от dmartynenko (Сообщение 34364)
Что касается page, то в предложеном мной варианте нужно в конфиге RealURL сделать так:

Код:

'page' => array(
  array(
    'GETvar' => '3t_gallery[page]'
  )
),

Если не хотите для RealURL менять, то тогда ссылку сделайте так
Код:

$urlP = $this->pi_getPageLink($pageId, '', array('page' => $page_id));
Короче одно другому должно соответствовать.

скорее второй вариант использую, так как страница должна быть доступна для/из любого расширения

dmartynenko 22.08.2012 14:30

Цитата:

Сообщение от 3ton (Сообщение 34365)
а где его глянуть??? :)
это имеется ввиду???

В PHP коде вашего экста, в основном классе плагина, в функции main()
В том же коде у у вас $this->pi_getPageLink, "$this" на это намекает :)

Цитата:

Сообщение от 3ton (Сообщение 34365)
скорее второй вариант использую, так как страница должна быть доступна для/из любого расширения

Ну как сказать. Чаще наоборот пагинация не должна влиять на другие плагины. Например у вас есть основной список "новостей" и в правой колонке какие-то "топ 10" по популярности. Если вы перейдете в основном списке на 2-ю, то "топ 10" обычно не должен стать "топ с 10 по 20".


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

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