Смешанные языковые URL от TYPO3 и RealURL

Я настроил RealURL для генерации URL-адресов, но после смены языка он генерирует смешанные языковые URL-адреса. После очистки кеша и без смены языка URL-адреса остаются на активном языке, без проблем. Но после смены языка URL-адрес стал смешанным. Языковая предустановка и название страницы остаются правильными, но описание представляет собой смесь двух языков. Например, приведенные ниже URL-адреса ссылок генерируются на той же странице:

/de/anzeige/kategorie/1/vorrat/all.html (this is correct)
/de/anzeige/categorie/1/voorraad/all.html (mix between german & dutch)

Похоже на проблему с кэшем? Я исправил это сейчас, создав все комбинации между языками в файле конфигурации realurl, но это делает файл сложным.

В конфигурационном файле realurl я вначале использую следующий код для выбора языков:

$lang = substr($_SERVER['REQUEST_URI'], 1, 2);

if($lang=='de') {
    $cat = 'kategorie';
    $alias = 'COALESCE(name_de, name_en, name_nl)';
}
else {
    $cat = 'categorie';
    $alias = 'COALESCE(name_nl, name_en, name_de)';
}

Эта часть используется в postVarSets для получения имени категории из базы данных. Может быть проблема в том, как я могу получить название категории из базы данных?

$cat => array(
     array (
         'GETvar' => 'extension[catname]',
                    'lookUpTable' => array (
                        'table' => 'database_table',
                        'id_field' => 'uid',
                        'alias_field' => 'uid',
                        'addWhereClause' => ' AND NOT deleted',
                        'useUniqueCache' => '1',
                        'useUniqueCache_conf' => array (
                            'strtolower' => '1',
                            'spaceCharacter' => '-',
                        ),
                    ),
                ),
                array (
                    'GETvar' => 'extension[catname]',
                    'lookUpTable' => array (
                        'table' => 'database_table',
                        'id_field' => 'uid',
                        'alias_field' => $alias,
                        'addWhereClause' => ' AND NOT deleted',
                        'useUniqueCache' => '1',
                        'useUniqueCache_conf' => array (
                            'strtolower' => '1',
                            'spaceCharacter' => '-',
                        ),
                    ),
               ),
         ),
   ),

person Tom    schedule 04.05.2015    source источник


Ответы (1)


Похоже, вы не создали перевод своей фактической страницы в дереве страниц. Идентификатор языка по-прежнему "de" в обеих ваших ссылках. Итак, первый шаг — создать перевод.

Следующий шаг — сделать так, чтобы ваше расширение поддерживало несколько языков, что добавит несколько полей language_* в вашу таблицу. Если все сделано правильно, вы можете создавать переводы своих категорий, не имея нескольких языков в одной записи базы данных. В итоге вы получите по одной записи на каждый язык.

Затем вам нужно добавить языковую конфигурацию в вашу конфигурацию realurl, как в расширении новостей:

    array(
            'GETvar' => 'tx_news_pi1[news]',
            'lookUpTable' => array(
                'table' => 'tx_news_domain_model_news',
                'id_field' => 'uid',
                'alias_field' => 'title',
                'addWhereClause' => ' AND NOT deleted',
                'useUniqueCache' => 1,
                'useUniqueCache_conf' => array(
                    'strtolower' => 1,
                    'spaceCharacter' => '-',
                ),
                'languageGetVar' => 'L',
                'languageExceptionUids' => '',
                'languageField' => 'sys_language_uid',
                'transOrigPointerField' => 'l10n_parent',
                'autoUpdate' => 1,
                'expireDays' => 180,
            ),
        ),

Тогда готово :-)

person Michael    schedule 04.05.2015
comment
Но каким должно быть значение cat? Или следует скопировать этот массив для каждого языка с собственным значением cat? - person Tom; 05.05.2015
comment
Это значение cat не соответствует выбранному языку. - person Tom; 05.05.2015
comment
Без копии (разумеется). Пожалуйста, ознакомьтесь со структурой новостного расширения. Есть категории, используемые так, как вы хотите (я думаю). Новостное расширение также предоставляет пример конфигурации, может найти решение проблемы с вашей категорией. Но, как указано в ответе, вы должны сделать другие шаги раньше. - person Michael; 05.05.2015
comment
А вот с именами kategorie и categorie уже что-то не так. Это имя берется не из базы данных, а из конфигурационного файла realurl. Для меня непонятно, как задать имя массива в соответствии с языком? Или это невозможно? Спасибо уже. - person Tom; 05.05.2015
comment
Использование categorie/1 должно быть необходимо. Вместо этого при загрузке из базы данных должно быть (переведенное) название категории. Предположим, что у вас есть категории с названиями фруктов и овощей, они должны заменить часть категории/1. =› /de/anzeige/fruits/vorrat/all.html - person Michael; 05.05.2015
comment
Я добавил таблицу базы данных для полей перевода, но до сих пор не знаю, как это меняет поле $cat (в данном случае значение Kategorie)? Итак, я получаю правильное имя из базы данных, но тогда URL-адрес будет /de/anzeige/kategorie/fruits/vorrat/all.html'. How can we remove the name /categorie/` из URL-адреса, поскольку это исправлено в моем файле конфигурации? - person Tom; 05.05.2015
comment
Ключевое слово fixedPostVars, как описано в этом сообщении в блоге (на немецком языке) . - person Michael; 05.05.2015