Russian TYPO3 community

Russian TYPO3 community (http://forum.typo3.ru/index.php)
-   Общие вопросы (http://forum.typo3.ru/forumdisplay.php?f=12)
-   -   Использование общей GET переменной (аналог L) только на отдельных ветках сайта (http://forum.typo3.ru/showthread.php?t=9114)

dmartynenko 28.12.2010 13:27

Использование общей 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

Пока из вариантов нашел такую возможность в 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
Кто нибудь использовал на практике?

Андрей Аксенов 29.12.2010 10:16

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

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

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

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

dmartynenko 29.12.2010 12:57

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

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

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

Соответсвенно вся региональность завязана на GET переменную R. Ее можно использовать как в своих экстеншенах, так и в TS условиях для донастройки других экстеншенов. При этом не надо завязываться на id конкретных страниц в дереве.

-=UncleByte=- 29.12.2010 13:56

Так а id страницы с контактами известен? Почему бы не использовать TS condition чтобы настроить именно для этой страницы отображение без региональной переменной?

dmartynenko 29.12.2010 14:15

Этого и хочется! Как сделать?

dmartynenko 29.12.2010 14:25

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

То есть в TYPO3 не хватает еще одной опции для страницы "не учитывать переменные из config.linkVars".

-=UncleByte=- 29.12.2010 15:19

А если добавить condition по id старницы и обнулить там linkVars? Такое пробовали? Т.е. логика такова: поскольку linkVars указывает те get переменные, которые разрешаются для использования, то в случае прямого указания что ни одна не должна пройти Typo3 не должен пропустить в обработку ничего, кроме id страницы.

dmartynenko 29.12.2010 15:22

Не пробовал, но здравый смысл мне подсказывает что при этом ссылки с этой страницы будут без linkVars. А в ссылках на эту страницу с других ничего не поменяется.

dmartynenko 05.04.2011 19:36

Решение:
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);
            }
        }
    } 

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


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

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