Typo3 是否有用于截断URL的Fluid viewhelper?如果没有,我如何制作?
在TYPO3的Fluid或Fedext/vhs中,是否有可以转换的viewhelperTypo3 是否有用于截断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.只需显
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中在几分钟内创建简单的格式化程序
例如,在TYPO34.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分解为由/
分隔的部分,然后切掉前三个部分,并使用/
重新连接这些部分。或者它只是选择offset2
(这将是没有协议的完整域)并返回单个元素。结果应该是指向链接域的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分解为由/
分隔的部分,然后切掉前三个部分,并使用/
重新连接这些部分。或者它只是选择offset2
(这将是没有协议的完整域)并返回单个元素。结果应该是指向链接域的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和