Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3 是否有用于截断URL的Fluid viewhelper?如果没有,我如何制作?_Typo3_Fluid_View Helpers_Typo3 6.1.x - Fatal编程技术网

Typo3 是否有用于截断URL的Fluid viewhelper?如果没有,我如何制作?

Typo3 是否有用于截断URL的Fluid viewhelper?如果没有,我如何制作?,typo3,fluid,view-helpers,typo3-6.1.x,Typo3,Fluid,View Helpers,Typo3 6.1.x,在TYPO3的Fluid或Fedext/vhs中,是否有可以转换的viewhelper http://www.stackoverflow.com/questions/ask 进入 ? PS:这就是目标: <f:format.raw><f:link.external uri="{item.link}">{item.just-display-the-domain}</f:link.external></f:format.raw> {item.只需显

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

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

?

PS:这就是目标:

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

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

所有视图辅助对象都位于
typo3/sysext/fluid/Classess/ViewHelper
。每个文件的标题中也有示例。可以在上查看Fedext的所有ViewHelper。

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

我真的怀疑是否有合理的理由将这种VH添加到核心,事实上,编写自定义VH就像小菜一碟(当您最终意识到这一点时),因此开发人员可以在其自定义工具Ext中在几分钟内创建简单的格式化程序

例如,在TYPO3
4.x
中,假设您有一个自定义扩展名,该扩展名具有键
urs
所有您需要做的就是创建一个适当的类,包含
render($params)
方法和扩展
Tx\u Fluid\u Core\u ViewHelper\u 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]);
    }
}
?>
<?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" />
{namespace urs=TYPO3\urs\ViewHelpers}
当然,在这两种情况下,您将使用以下链接,而不是使用硬编码链接:

<urs:getDomain link="{item.link}" />

我真的怀疑是否有合理的理由将这种VH添加到核心,事实上,编写自定义VH就像小菜一碟(当您最终意识到这一点时),因此开发人员可以在他们的自定义工具ext中在几分钟内创建简单的格式化程序

例如,在TYPO3
4.x
中,假设您有一个自定义扩展名,该扩展名具有键
urs
所有您需要做的就是创建一个适当的类,包含
render($params)
方法和扩展
Tx\u Fluid\u Core\u ViewHelper\u 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]);
    }
}
?>
<?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" />
{namespace urs=TYPO3\urs\ViewHelpers}
当然,在这两种情况下,您将使用以下链接,而不是使用硬编码链接:

<urs:getDomain link="{item.link}" />

这有点麻烦,效率也不是很高,但它应该可以工作,当然也不需要自定义ViewHelper类:

With protocol: {url -> v:iterator.explode(glue: '/') -> v:iterator.slice(length: 3) -> v:iterator.implode(glue: '/')} Without protocol: {url -> v:iterator.explode(glue: '/') -> v:iterator.slice(start: 2, length: 1) -> v:iterator.first()} 根据协议: {url->v:iterator.explode(glue:'/')->v:iterator.slice(长度:3)->v:iterator.intlode(glue:'/')} 没有协议: {url->v:iterator.explode(glue:'/')->v:iterator.slice(开始:2,长度:1)->v:iterator.first()} 其中
{url}
可以来自任何地方,只要它包含完整的
http://
或其他协议前缀。当然,上面的一行将URL分解为由
/
分隔的部分,然后切掉前三个部分,并使用
/
重新连接这些部分。或者它只是选择offset
2
(这将是没有协议的完整域)并返回单个元素。结果应该是指向链接域的url,带或不带协议,不带尾随斜杠(剪切url后您可能不想添加)

干杯,
Claus

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

With protocol: {url -> v:iterator.explode(glue: '/') -> v:iterator.slice(length: 3) -> v:iterator.implode(glue: '/')} Without protocol: {url -> v:iterator.explode(glue: '/') -> v:iterator.slice(start: 2, length: 1) -> v:iterator.first()} 根据协议: {url->v:iterator.explode(glue:'/')->v:iterator.slice(长度:3)->v:iterator.intlode(glue:'/')} 没有协议: {url->v:iterator.explode(glue:'/')->v:iterator.slice(开始:2,长度:1)->v:iterator.first()} 其中
{url}
可以来自任何地方,只要它包含完整的
http://
或其他协议前缀。当然,上面的一行将URL分解为由
/
分隔的部分,然后切掉前三个部分,并使用
/
重新连接这些部分。或者它只是选择offset
2
(这将是没有协议的完整域)并返回单个元素。结果应该是指向链接域的url,带或不带协议,不带尾随斜杠(剪切url后您可能不想添加)

干杯,
克劳斯

你为什么不写自定义?如果没有,我会试试。我刚进入流体状态,试着找到自己的方向。它必须是一个自定义的视图助手,还是有其他方法可以将一些php插入视图部分?实际上,现在我们有两个流行的TYPO3分支-4.x和6.x-正确地标记您的问题以使其始终清晰。6.1.x的标记不是TYPO3-6.1吗?也许你想创建一个合适的?为什么不编写自定义?如果没有,我会试试。我刚进入流体状态,试着找到自己的方向。它必须是一个自定义的视图助手,还是有其他方法可以将一些php插入视图部分?实际上,现在我们有两个流行的TYPO3分支-4.x和6.x-正确地标记您的问题以使其始终清晰。6.1.x的标记不是TYPO3-6.1吗?也许你想创建一个合适的?Ach只是忘记添加-复制现有的核心VH并在自己的实现中修改它通常可以节省大量的时间;)还有一个关于名称空间的问题。在扩展生成器中,我选择了一个自定义名称空间MYFIRM\Extensionname-这也很好,不是吗?或者你会坚持使用TYPO3名称空间吗?只需使用
{Namespace urs=MYFIRM\Extensionname\ViewHelpers}
(也在VH的类中!)就个人而言,我更喜欢使用自己的vendorname,不管怎样,为了安全起见,我编写了一个带有默认名称的示例。注意:您不能在自己的扩展中使用TYPO3名称空间。非常不幸的是,extension_builder扩展在默认情况下会这样做,但在“名称空间迁移指南”(我错放了链接)中有明确的说明。Ach只是忘记添加-复制现有的核心VH和