2017-02-14 1 views
0

В настоящее время я пытаюсь создать красивый URL для моего пользовательского расширения.Как опустить пустой (необязательный) сегмент в realurl?

Я использую плагин на странице «Продукты» (uid: 3), чтобы перечислить все категории.

К примеру есть следующие категории:

  • Мужчины
    • Рубашки
    • фуфайки
  • Женщины
    • Обувь
    • Платья

Я хотел бы иметь эти соответствующие URL-х:

www.mydomain.com/products/men.html

WWW. mydomain.com/products/men/shirts.html

Это, что я получаю:

www.mydomain.com/products//men.html

www.mydomain.com/products/men/shirts.html

Категория «Мужчины» на первом уровне не имеет родительской категории, поэтому этот сегмент остается пустым. Как только есть родительская категория, все в порядке.

TYPO3 Версия: 7.6.15

RealURL Версия: 2.1.6

Это моя текущая конфигурация для fixedPostVars:

'fixedPostVars' => array ( 
// EXT: productsDb start   
'productsDbConfiguration' => array(
    array(
     'GETvar' => 'tx_productsdb_categories[action]', 
     'valueMap' => array(
     ), 
     'noMatch' => 'bypass' 
    ), 
    array(
     'GETvar' => 'tx_productsdb_categories[controller]', 
     'valueMap' => array(
     ), 
     'noMatch' => 'bypass' 
    ), 
    array(
     'GETvar' => 'tx_productsdb_categories[parent]', 
     'lookUpTable' => array(
      'table' => 'tx_productsdb_domain_model_category', 
      '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, 
     ), 
     // 'valueDefault' => '', 
    ), 
    array(
     'GETvar' => 'tx_productsdb_categories[category]', 
     'lookUpTable' => array(
      'table' => 'tx_productsdb_domain_model_category', 
      '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, 
     ) 
    ), 
), 
'3' => 'productsDbConfiguration', 
// EXT: productsdb end 

),

Итак, вот мой вопрос: Есть ли способ и что мне нужно сделать, чтобы пропустить необязательный сегмент пути, если он пуст?

Заранее благодарим за это.

+0

Поскольку, похоже, нет другого решения, я решил теперь использовать ** encodeSpURL_postProc ** hook of realurl, чтобы изменить кодированный URL-адрес на мои нужды, хотя он выглядит грязным, чтобы сделать это таким образом. – IhsakoOti

ответ

0

вот код, который я использовал для RealURL encodeSpURL_postProc крюк:

public function encodeUrl(&$params) { 
    $originalParameters = $params['pObj']->getOriginalUrlParameters(); 

    if(array_key_exists('tx_productsdb_categories[category]', $originalParameters)===TRUE) { 
     if (strpos($params['URL'], '//')) { 
      $encodedSegments = explode('/', $params['URL']); 
      $modifiedSegments = array_filter($encodedSegments, 'strlen'); 
      $params['URL'] = implode('/', $modifiedSegments); 
     } 
    } 
} 

дайте мне знать, если у вас есть какие-либо другие идеи для улучшения.