检查 TYPO3 link 类型的流体
Check TYPO3 link type in fluid
我想以流畅的方式呈现拼写错误link,但我需要检查它是否是下载文件 (t3://file?uid=1)、页面 link ( t3://page?uid=1) 或外部 link (https://www.abc.de _blank)。
有没有办法或 viewhelper 来检查 link 流体类型?
我发现的只是通过打字错误或像 VHS 这样的 hacky 方式
<f:if condition="{target -> v:math.round()} > 0">
用于 TYPO3 9.x
$linkService = $this->objectManager->get(LinkService::class);
$result = $linkService->resolve($linkValue);
这可以在自定义 ViewHelper 中帮助您
$linkValue
的可能值:
t3://page?uid=1
=> [string (pageuid), 'page']
info@example.com
=> [字符串(电子邮件),'email']
https://typo3.org
=> [字符串 (url), 'url']
t3://file?uid=226
=> [TYPO3\CMS\Core\Resource\File, 'file']
$result
returns 一个数组。每个案例都有参数 "type"。根据类型,返回另一个值或对象。我已经在上面列出了。
class 可从 TYPO3 版本 8 获得。
您还可以检查带有 vhs 扩展名的链接类型,例如设置不同的目标:
{namespace v=FluidTYPO3\Vhs\ViewHelpers}
...
<f:variable name="target">_self</f:variable>
<v:condition.string.contains haystack="{url}" needle="t3://file?uid">
<f:variable name="target">_blank</f:variable>
</v:condition.string.contains>
<v:condition.string.contains haystack="{url}" needle="http">
<f:variable name="target">_blank</f:variable>
</v:condition.string.contains>
<v:condition.string.contains haystack="{url}" needle="www">
<f:variable name="target">_blank</f:variable>
</v:condition.string.contains>
<f:link.typolink parameter="{url}" target="{target}">the link</f:link.typolink>
这是我现在使用的ViewHelper:
/**
* A view helper for rendering the linktype
*
* = Examples =
*
* <code>
* {nc:linkType(parameter: link)}
* </code>
* <output>
* page, file, url, email, folder, unknown
* </output>
*/
class LinkTypeViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* Initialize arguments
*/
public function initializeArguments()
{
$this->registerArgument('parameter', 'string', 'stdWrap.typolink style parameter string', true);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return string Linktype (page, file, url, email, folder, unknown)
*/
public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
{
$parameter = $arguments['parameter'];
// workaround if parameter has _blank or other additional params
$arr = explode(' ',trim($parameter));
$firstparameter = $arr[0];
$linkService = GeneralUtility::makeInstance(LinkService::class);
$linkDetails = $linkService->resolve($firstparameter);
return $linkDetails['type'];
}
}
我想以流畅的方式呈现拼写错误link,但我需要检查它是否是下载文件 (t3://file?uid=1)、页面 link ( t3://page?uid=1) 或外部 link (https://www.abc.de _blank)。 有没有办法或 viewhelper 来检查 link 流体类型?
我发现的只是通过打字错误或像 VHS 这样的 hacky 方式
<f:if condition="{target -> v:math.round()} > 0">
用于 TYPO3 9.x
$linkService = $this->objectManager->get(LinkService::class);
$result = $linkService->resolve($linkValue);
这可以在自定义 ViewHelper 中帮助您
$linkValue
的可能值:
t3://page?uid=1
=> [string (pageuid), 'page']info@example.com
=> [字符串(电子邮件),'email']https://typo3.org
=> [字符串 (url), 'url']t3://file?uid=226
=> [TYPO3\CMS\Core\Resource\File, 'file']
$result
returns 一个数组。每个案例都有参数 "type"。根据类型,返回另一个值或对象。我已经在上面列出了。
class 可从 TYPO3 版本 8 获得。
您还可以检查带有 vhs 扩展名的链接类型,例如设置不同的目标:
{namespace v=FluidTYPO3\Vhs\ViewHelpers}
...
<f:variable name="target">_self</f:variable>
<v:condition.string.contains haystack="{url}" needle="t3://file?uid">
<f:variable name="target">_blank</f:variable>
</v:condition.string.contains>
<v:condition.string.contains haystack="{url}" needle="http">
<f:variable name="target">_blank</f:variable>
</v:condition.string.contains>
<v:condition.string.contains haystack="{url}" needle="www">
<f:variable name="target">_blank</f:variable>
</v:condition.string.contains>
<f:link.typolink parameter="{url}" target="{target}">the link</f:link.typolink>
这是我现在使用的ViewHelper:
/**
* A view helper for rendering the linktype
*
* = Examples =
*
* <code>
* {nc:linkType(parameter: link)}
* </code>
* <output>
* page, file, url, email, folder, unknown
* </output>
*/
class LinkTypeViewHelper extends AbstractViewHelper
{
use CompileWithRenderStatic;
/**
* Initialize arguments
*/
public function initializeArguments()
{
$this->registerArgument('parameter', 'string', 'stdWrap.typolink style parameter string', true);
}
/**
* @param array $arguments
* @param \Closure $renderChildrenClosure
* @param RenderingContextInterface $renderingContext
* @return string Linktype (page, file, url, email, folder, unknown)
*/
public static function renderStatic(array $arguments, \Closure $renderChildrenClosure, RenderingContextInterface $renderingContext)
{
$parameter = $arguments['parameter'];
// workaround if parameter has _blank or other additional params
$arr = explode(' ',trim($parameter));
$firstparameter = $arr[0];
$linkService = GeneralUtility::makeInstance(LinkService::class);
$linkDetails = $linkService->resolve($firstparameter);
return $linkDetails['type'];
}
}