如何省略 realurl 中的空(可选)段?
How to omit empty (optional) segment in realurl?
目前我正在尝试为我的自定义扩展创建漂亮的 URL。
我正在使用页面 "Products" (uid: 3) 上的插件来列出所有类别。
例如有以下几类:
- Men
- Shirts
- Sweatshirts
- Women
- Shoes
- Dresses
我想要这些对应的 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
第一个级别的类别"Men"没有父类别,因此该段为空。有了父类就万事大吉
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
),
所以,这是我的问题:
有什么方法可以跳过可选路径段(如果它是空的)吗?
提前感谢您的浏览。
这是我用于 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);
}
}
}
如果您有任何其他改进想法,请告诉我。
目前我正在尝试为我的自定义扩展创建漂亮的 URL。
我正在使用页面 "Products" (uid: 3) 上的插件来列出所有类别。
例如有以下几类:
- Men
- Shirts
- Sweatshirts
- Women
- Shoes
- Dresses
我想要这些对应的 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
第一个级别的类别"Men"没有父类别,因此该段为空。有了父类就万事大吉
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
),
所以,这是我的问题: 有什么方法可以跳过可选路径段(如果它是空的)吗?
提前感谢您的浏览。
这是我用于 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);
}
}
}
如果您有任何其他改进想法,请告诉我。