RealURL: необязательные сегменты в FixedPostVars

Я использую RealURL в своем проекте Typo3 4.5.16 для озвучивания URL-адресов определенной страницы. Для этого я использую таблицу поиска, которая сопоставляет определенное количество идентификаторов с их эквивалентами URL.

Например,
http://www.example.com/path/to/catalog/chapter1/section1/group1/prod-123/
будет отображаться на страницу «Каталог» с параметрами, сопоставленными для chapter, section, group и product, соответственно. Обратите внимание, что только ПОСЛЕДНИЙ из этих параметров является релевантным и имеет реальное сопоставление, остальные используются только для "красивого" пути.

Теперь моя проблема: не каждый продукт имеет все уровни предшествующих сегментов пути. Например, URL-адрес другого продукта может быть таким:
http://www.example.com/path/to/catalog/chapter1/section4/prod-789/

База данных будет выглядеть так:

Id  | seg0      | seg1      | seg2      | seg3      | dummy0    | dummy1    | dummy2    | MapId
----|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------
1   | chapter1  | section1  | group1    | prod-123  | 1         | 1         | 1         | 123
2   | chapter1  | section4  |           | prod-789  | 1         | 4         | 0         | 789

Вы видите, что отображение имени сегмента просто пусто.

Однако RealURL будет использовать в качестве группы пустую строку и создать
chapter1/section4//prod-789

Есть ли способ подавить такое пустое отображение? Будет ли декодирование передавать сегмент следующему параметру (например, noMatch => bypass для карт значений)

Если нет, можно ли сопоставить сразу несколько сегментов пути с помощью таблицы поиска? (т.е. сопоставление всего пути с настоящим идентификатором)?


person king_nak    schedule 18.06.2012    source источник


Ответы (2)


Вы можете попробовать хуки, которые предоставляет realUrl, см. Эту статью

person Tomaž Zaman    schedule 21.06.2012
comment
Хуки применяются ко всем URL-адресам, но мне это нужно только для 2-х страниц ... Но попробовать стоит! - person king_nak; 22.06.2012

Что ж, я сам нашел обходной путь.

Он использует userFunctions, которые в основном имитируют поведение lookupTable. Для каждого уровня есть одна такая функция. Он изменяет массив $params['pathParts'], который передается функциям unser

Кодировка:

  • Для «родительских» уровней просто сопоставьте сегмент. Это вернет пустые строки, если они не сопоставлены.
  • Для сопоставленного уровня удалите все пустые элементы в конце переданного массива $params['pathParts']
  • => Удаляет пустые части

Расшифровка:

  • Для «родительских» уровней проверьте, есть ли еще элементы в $params['pathParts']. В противном случае это «пропущенный» родитель. Просто добавьте текущее значение к $params['pathParts'], которое будет передано на следующий уровень с помощью RealURL.
  • Отображенный уровень в конечном итоге вызывается с правильным значением. Просто карта

Он работает до тех пор, пока RealURL не слишком сильно меняет обработку пользовательских функций ...

person king_nak    schedule 19.06.2012