Russian TYPO3 community Форум больше не используется. Присоединяйтесь к каналу #community-ru в Slack for TYPO3 community  

Вернуться   Russian TYPO3 community > Обсуждение общих технических вопросов > Общие вопросы

Ответ
 
Опции темы Опции просмотра
Старый 21.08.2012, 12:12   #1
3ton
Senior Member
 
Регистрация: 25.12.2009
Сообщений: 106
Question клонирование расширения на подстраницы

создал галерею

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

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

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

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

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

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

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

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

если присутствует сегмент "page" - отрабатываем пагинацию независимо от режима - список или просмотр
3ton вне форума   Ответить с цитированием
Старый 21.08.2012, 19:10   #2
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

URL вы как формируете?
Экстеншен у вас наверное свой и вставлен как USER?
Если код экстеншена на базе tslib_pibase, то может стоит $this->pi_USER_INT_obj = 1;?
dmartynenko вне форума   Ответить с цитированием
Старый 21.08.2012, 22:44   #3
3ton
Senior Member
 
Регистрация: 25.12.2009
Сообщений: 106
По умолчанию

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
3ton вне форума   Ответить с цитированием
Старый 22.08.2012, 12:23   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Ну так как все таки формируете 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]" в коде самого экста.
dmartynenko вне форума   Ответить с цитированием
Старый 22.08.2012, 12:55   #5
3ton
Senior Member
 
Регистрация: 25.12.2009
Сообщений: 106
По умолчанию

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Ну так как все таки формируете 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 Посмотреть сообщение
Что касается условия, такой вариант пробовали?
Код:
plugin.tx_3tgallery_pi1.mode = GALERY
# если 3t_gallery[gallery] не задан, то показываем список
[globalVar = GP:3t_gallery|gallery = ]
plugin.tx_3tgallery_pi1.mode = LISTING
[GLOBAL]
не пробовал, спасибо за совет(ценно для саморазвития) но пока решил оставить рутинг режима на РНР

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Посмотри 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 Посмотреть сообщение
Еще дополню касательно условия в TS. Каждое TS условие создает в кэше страниц отдельную, так сказать, ветку кэша. Если сайт большой и страниц много, то кэш может сильно разрастаться. Поэтому я лично предпочитаю делать переключение режима плагина по условия вида "есть 3t_gallery[gallery]" в коде самого экста.
так и сделал пока
3ton вне форума   Ответить с цитированием
Старый 22.08.2012, 13:05   #6
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

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

Код:
$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].
dmartynenko вне форума   Ответить с цитированием
Старый 22.08.2012, 13:18   #7
3ton
Senior Member
 
Регистрация: 25.12.2009
Сообщений: 106
По умолчанию

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

Код:
$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 Посмотреть сообщение
Тут предполагается что $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]'
          )
        ),
      )
    ),
3ton вне форума   Ответить с цитированием
Старый 22.08.2012, 13:38   #8
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Решит, только если у вас в эксте прописано $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));
Короче одно другому должно соответствовать.
dmartynenko вне форума   Ответить с цитированием
Старый 22.08.2012, 14:21   #9
3ton
Senior Member
 
Регистрация: 25.12.2009
Сообщений: 106
По умолчанию

Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Решит, только если у вас в эксте прописано $this->pi_USER_INT_obj = 0. Я вас спрашивал что у вас с этим параметром, вы не ответили.
а где его глянуть???
это имеется ввиду???
Код:
t3lib_extMgm::addPItoST43($_EXTKEY, 'pi1/class.tx_3tgallery_pi1.php', '_pi1', 'list_type', 0);
Цитата:
Сообщение от dmartynenko Посмотреть сообщение
Что касается page, то в предложеном мной варианте нужно в конфиге RealURL сделать так:

Код:
'page' => array(
  array(
    'GETvar' => '3t_gallery[page]'
  )
),
Если не хотите для RealURL менять, то тогда ссылку сделайте так
Код:
$urlP = $this->pi_getPageLink($pageId, '', array('page' => $page_id));
Короче одно другому должно соответствовать.
скорее второй вариант использую, так как страница должна быть доступна для/из любого расширения
3ton вне форума   Ответить с цитированием
Старый 22.08.2012, 14:30   #10
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Цитата:
Сообщение от 3ton Посмотреть сообщение
а где его глянуть???
это имеется ввиду???
В PHP коде вашего экста, в основном классе плагина, в функции main()
В том же коде у у вас $this->pi_getPageLink, "$this" на это намекает

Цитата:
Сообщение от 3ton Посмотреть сообщение
скорее второй вариант использую, так как страница должна быть доступна для/из любого расширения
Ну как сказать. Чаще наоборот пагинация не должна влиять на другие плагины. Например у вас есть основной список "новостей" и в правой колонке какие-то "топ 10" по популярности. Если вы перейдете в основном списке на 2-ю, то "топ 10" обычно не должен стать "топ с 10 по 20".
dmartynenko вне форума   Ответить с цитированием
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB code is Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Кэширование расширения (4 варианта: кэшировать, не кэшировать, управлять, по времени. Ивано Разработка расширений / TYPO3 extension development 15 24.02.2013 00:30
не устанавливаются расширения YurLu Разработка расширений / TYPO3 extension development 10 06.05.2012 11:03
Не загружаются расширения SergeyS Общие вопросы 2 05.05.2011 13:42
Установка расширения Seminar Manager ddt Общие вопросы 11 14.10.2009 16:42
Как правильно выставить документацию для расширения? KortS Организационные вопросы и встречи TUG 0 30.03.2005 17:31


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


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

Хостинг и техническая поддержка: TYPO3 Лаборатория