0

在 TYPO3 的 Fluid 或 Fedext/vhs 中,是否有可以转换的 viewhelper

http://www.stackoverflow.com/questions/ask

进入

www.stackoverflow.com

?

PS:这就是目标:

<f:format.raw><f:link.external uri="{item.link}">{item.just-display-the-domain}</f:link.external></f:format.raw>

编辑(根据我得到的答案调整问题):如果我必须构建自定义视图助手,我该如何进行?

4

3 回答 3

2

我真的怀疑是否有任何合理的理由将这种 VH 添加到核心中,事实上,编写自定义 VH 就像小菜一碟(当你最终意识到它是)所以简单的格式化程序可以由开发人员在他们的自定义工具分机只需几分钟。

IE。在 TYPO3 中4.x假设您有一个带有键的自定义扩展,urs您需要做的就是创建一个适当的类,包含render($params)方法和扩展Tx_Fluid_Core_ViewHelper_AbstractViewHelper类:

/typo3conf/ext/urs/Classes/ViewHelpers/GetDomainViewHelper.php

<?php
class Tx_Urs_ViewHelpers_GetDomainViewHelper extends Tx_Fluid_Core_ViewHelper_AbstractViewHelper {

    /**
     * @param $link string Each `allowed` param need to have its line in PHPDoc
     * @return string
     */
    public function render($link) {
        $link = str_replace('http://', '', $link);
        $link = str_replace('https://', '', $link);
        $segments = explode('/', $link);
        return trim($segments[0]);
    }
}
?>

接下来在您的模板中声明其命名空间,然后......就是这样,您可以使用它:

{namespace urs=Tx_Urs_ViewHelpers}

<urs:getDomain link="http://stackoverflow.com/questions/20499453" />

在诸如此类的事情中要特别注意字母大小写Tx_Urs_ViewHelpers...

http://docs.typo3.org/typo3cms/ExtbaseFluidBook/8-Fluid/8-developing-a-custom-viewhelper.html中的更多详细信息

在 TYPO3 版本中。6.x

事情很相似,主要的变化当然是新的命名空间

/typo3conf/ext/urs/Classes/ViewHelpers/GetDomainViewHelper.php

<?php
namespace TYPO3\Urs\ViewHelpers;

class GetDomainViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper {

    /**
     * @param $link string Each `allowed` param need to have its line in PHPDoc
     * @return string
     */
    public function render($link) {
        $link = str_replace('http://', '', $link);
        $link = str_replace('https://', '', $link);
        $segments = explode('/', $link);
        return trim($segments[0]);
    }
}

在模板中:

{namespace urs=TYPO3\Urs\ViewHelpers}

<urs:getDomain link="http://stackoverflow.com/questions/20499453" />

当然,在这两种情况下,您将使用以下方式而不是使用硬编码链接:

<urs:getDomain link="{item.link}" />
于 2013-12-10T19:55:29.420 回答
2

这有点麻烦而且效率不高,但它应该可以工作,并且当然可以防止需要自定义 ViewHelper 类:

使用协议:
{url -> v:iterator.explode(glue: '/') -> v:iterator.slice(length: 3) -> v:iterator.implode(glue: '/')}
无协议:
{url -> v:iterator.explode(glue: '/') -> v:iterator.slice(start: 2, length: 1) -> v:iterator.first()}

Where{url}可以来自任何地方,只要它包含完整的http://或其他协议前缀。上面的行当然将 URL 分解为由分隔的部分,/然后切掉前三个部分并重新加入那些使用/. 或者它只是选择偏移量2(这将是没有协议的完整域)并返回该单个元素。结果应该是链接域的 url,带或不带协议,不带斜杠(您可能希望或不希望在剪切 URL 后添加自己)。

干杯,克劳斯

于 2013-12-10T21:54:40.117 回答
0

所有 ViewHelper 都位于typo3/sysext/fluid/Classess/ViewHelper. 每个文件的标题中也有示例。Fedext 的所有 ViewHelper 都可以在网站上查看。

于 2013-12-10T17:37:10.070 回答