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

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

Ответ
 
Опции темы Опции просмотра
Старый 28.12.2010, 13:27   #1
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
Question Использование общей GET переменной (аналог L) только на отдельных ветках сайта

Широко известно использование GET-переменной L для многоязычных сайтов. При соответствующей настроке TYPO3 и передаче ее через GET она автоматически добавляется ко всем ссылкам на внутренние страницы.

В одном из проектов хочется сделать региональные версии сайта аналогичным способом. Через TS и RealURL (префиксная переменная) настроена переменная R, которая задает регион. Т.е. при входе на сайт по адресу example.com все ссылки будут example.com/... При входе через example.com/region1/ все ссылки будут example.com/region1/... Соответственно в зависимости от этой переменной на страницах выводится регионально ориентированный контент.

Но есть одна проблема. Хочется что бы некоторые страницы не имели региональной привязки. Например, страница "контакты" (example.com/contacts/) не должна быть регионально зависимой, так как ее содержание не будет меняться в зависимости от региона. А дублирование этой страницы под разными адресами плохо для SEO.

Нужно что бы ссылки и со страниц example.com/... и со страниц example.com/region1/... одинаково ссылались на example.com/contacts/ (а не на example.com/contacts/ и на example.com/region1/contacts/).

Таких общих страниц и подразделов на сайте несколько.

Как этого добиться?
dmartynenko вне форума   Ответить с цитированием
Старый 28.12.2010, 15:18   #2
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Пока из вариантов нашел такую возможность в RealURL
Цитата:
encodeSpURL_postProc

This hook is called before the RealURL returns created URL to the caller. This allows extensions to modify URL in the way they want. The hook receives an array with parameters
Кто нибудь использовал на практике?
dmartynenko вне форума   Ответить с цитированием
Старый 29.12.2010, 10:16   #3
Андрей Аксенов
Senior Member
 
Регистрация: 12.04.2008
Адрес: Россия, Москва
Сообщений: 706
Отправить сообщение для Андрей Аксенов с помощью ICQ Отправить сообщение для Андрей Аксенов с помощью Skype™
По умолчанию

а может быть сделать специфичное меню на сайте и определенное дерево страниц:
То есть, сделать такое дерево страниц:
домашняя
region1
region2
...
regionN
contacts
другие спец. страницы

и дополнить основное меню специальным (special.list), в котором указать страницы - contacts (id) и т.п.
либо использовать special.directory, где указать id текущей и id домашней страниц...

Как-то так, додумывать нужно в процессе...
При этом придется покопаться с меню, а пути будут формироваться нормально без каких-либо специальных настроек.

Как-то так...

Последний раз редактировалось Андрей Аксенов; 29.12.2010 в 12:38
Андрей Аксенов вне форума   Ответить с цитированием
Старый 29.12.2010, 12:57   #4
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Если делать дерево страниц, в котором есть region1, region2 и т.д., то придется дублировать в каждом регионе все дерево подразделов.

Этого не хочется - так как работа механическая, придется для каждого поддерева все id страниц в CE и FF ручками переписывать. Конечно у подхода есть и достоинства - например возможность кастомизировать дерево страниц для каждого региона. Но такой задачи у нас сейчас не стоит.

То как сейчас работает в целом устраивает:
1. Если пользователь заходит на сайт без куки "регион", то его по GeoID редиректит на example.com/?R=XX
2. Он может выбрать регион - т.е. по сути сменить R=YY, при этом для него сохраняется кука "регион"

Соответсвенно вся региональность завязана на GET переменную R. Ее можно использовать как в своих экстеншенах, так и в TS условиях для донастройки других экстеншенов. При этом не надо завязываться на id конкретных страниц в дереве.
dmartynenko вне форума   Ответить с цитированием
Старый 29.12.2010, 13:56   #5
-=UncleByte=-
Senior Member
 
Регистрация: 14.04.2006
Сообщений: 1,159
Отправить сообщение для -=UncleByte=- с помощью ICQ Отправить сообщение для -=UncleByte=- с помощью Skype™
По умолчанию

Так а id страницы с контактами известен? Почему бы не использовать TS condition чтобы настроить именно для этой страницы отображение без региональной переменной?
-=UncleByte=- вне форума   Ответить с цитированием
Старый 29.12.2010, 14:15   #6
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Этого и хочется! Как сделать?
dmartynenko вне форума   Ответить с цитированием
Старый 29.12.2010, 14:25   #7
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

В HMENU есть только опция protectLvar, которая делает то что нужно, только для L. Только все завязано на "Alternative Page Language record": если перевода нет, то ссылка формируется без на страницу без учета L.

То есть в TYPO3 не хватает еще одной опции для страницы "не учитывать переменные из config.linkVars".
dmartynenko вне форума   Ответить с цитированием
Старый 29.12.2010, 15:19   #8
-=UncleByte=-
Senior Member
 
Регистрация: 14.04.2006
Сообщений: 1,159
Отправить сообщение для -=UncleByte=- с помощью ICQ Отправить сообщение для -=UncleByte=- с помощью Skype™
По умолчанию

А если добавить condition по id старницы и обнулить там linkVars? Такое пробовали? Т.е. логика такова: поскольку linkVars указывает те get переменные, которые разрешаются для использования, то в случае прямого указания что ни одна не должна пройти Typo3 не должен пропустить в обработку ничего, кроме id страницы.
-=UncleByte=- вне форума   Ответить с цитированием
Старый 29.12.2010, 15:22   #9
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Не пробовал, но здравый смысл мне подсказывает что при этом ссылки с этой страницы будут без linkVars. А в ссылках на эту страницу с других ничего не поменяется.
dmartynenko вне форума   Ответить с цитированием
Старый 05.04.2011, 19:36   #10
dmartynenko
Senior Member
 
Аватар для dmartynenko
 
Регистрация: 20.07.2007
Адрес: Беларусь, Минск
Сообщений: 957
Отправить сообщение для dmartynenko с помощью ICQ
По умолчанию

Решение:
1. Настраиваем в linkVars нашу переменную R
2. Пишем экст, который добавит в pages поле ignore_region - "не учитывать R для это страницы", потом в BE ставим флаг для нужных страниц.
2. Используя хук encodeSpURL_postProc делаем следующее:
PHP код:
    public function postProcessRealURL($params$pObj) {
        
// if page record has "ignore region" flag
        
if ($params['params']['args']['page']['ignore_region']) {
            
$query_params = array();
            
parse_str($params['params']['LD']['linkVars'], $query_params);
            
// remove first URL segments if not in default region
            
if (intval($query_params['R']) > 0) {
                
$params['URL'] = preg_replace('|/[a-z]+/|''/'$params['URL'], 1);
            }
        }
    } 
Все, готово.
Использование хука позволяет решать исходную задачу несколькими способами.
dmartynenko вне форума   Ответить с цитированием
Ответ


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

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

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


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


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

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