将 typoscript 参数发送到 userFunc
Send typoscript parameter to userFunc
我正在尝试将 get 参数发送到 userFunc
以识别页面,但它似乎不起作用。这是我的:
########## CATEGORY CONTENT ##########
lib.categoryContent = COA
lib.categoryContent {
10 < styles.content.get
10 {
select {
pidInList.cObject = USER
pidInList.cObject {
userFunc = Vendor\Provider\UserFunc\PageIdByAlias->getPageIdByAlias
alias = TEXT
alias.data = GP:category
}
}
}
wrap = <categoryContent><![CDATA[|]]></categoryContent>
}
在PHP中:
/**
* Returns page ID by alias
*
* @return int
*/
public function getPageIdByAlias($content, $conf)
{
$pageId = $this->pageRepository->getPageIdByAlias($conf["alias"]);
return $pageId;
}
我也试过:
alias.cObject = TEXT
alias.cObject.data = GP:category
但是,我仍然只得到 PHP 中的字符串 GP:category
。
我正在使用 TYPO3 7.6.11
你可以在 userFunc 中使用 $_GET 吗?
这是适合我的解决方案。
从 html(从 fluid 或任何你想要的地方)通过 cObject 传递你的论点。
<f:cObject typoscriptObjectPath="lib.categoryContent" >{category.uid}</f:cObject>
或者
<f:cObject typoscriptObjectPath="lib.categoryContent" data="{category.uid}" />
错别字:
# Set argument to the current.
lib.category = TEXT
lib.category{
current = 1
}
lib.categoryContent = USER
lib.categoryContent{
10 < styles.content.get
10 {
select {
pidInList.cObject = USER
pidInList.cObject {
userFunc = Vendor\Provider\UserFunc\PageIdByAlias->getPageIdByAlias
# Pass category id as argument
alias = TEXT
alias.value < lib.category
}
}
}
wrap = <categoryContent><![CDATA[|]]></categoryContent>
}
您的 TypoScript 是正确的。但是,由于渲染被委托给用户函数,嵌套的 TypoScript 属性不会被执行——这必须在您的自定义用户函数中发生。 ContentObjectRenderer
的实例自动注入到您的自定义 class 作为 属性 PageIdByAlias::$cObj
.
<?php
namespace Vendor\Provider\UserFunc;
class PageIdByAlias
{
/**
* @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
*/
public $cObj;
protected $pageRepository;
/**
* Returns page ID by alias
*
* @var string $content
* @var array $configuration
* @return int|string
**/
public function getPageIdByAlias($content, array $configuration = null)
{
$pageId = 0;
// apply stdWrap() rendering for property 'alias'
// 3rd argument defines a custom default value if property is not set
$alias = $this->cObj->stdWrapValue('alias', $configuration, null);
if ($alias !== null) {
$pageId = $this->pageRepository->getPageIdByAlias($alias);
}
return $pageId;
}
}
尝试在您的用户功能中使用它
$pageId = $this->cObj->stdWrap($conf['page_id'], $conf['page_id.']);
在拼写错误中使用它之后
page_id.cObject = TEXT
page_id.cObject.data = GP:category
我正在尝试将 get 参数发送到 userFunc
以识别页面,但它似乎不起作用。这是我的:
########## CATEGORY CONTENT ##########
lib.categoryContent = COA
lib.categoryContent {
10 < styles.content.get
10 {
select {
pidInList.cObject = USER
pidInList.cObject {
userFunc = Vendor\Provider\UserFunc\PageIdByAlias->getPageIdByAlias
alias = TEXT
alias.data = GP:category
}
}
}
wrap = <categoryContent><![CDATA[|]]></categoryContent>
}
在PHP中:
/**
* Returns page ID by alias
*
* @return int
*/
public function getPageIdByAlias($content, $conf)
{
$pageId = $this->pageRepository->getPageIdByAlias($conf["alias"]);
return $pageId;
}
我也试过:
alias.cObject = TEXT
alias.cObject.data = GP:category
但是,我仍然只得到 PHP 中的字符串 GP:category
。
我正在使用 TYPO3 7.6.11
你可以在 userFunc 中使用 $_GET 吗?
这是适合我的解决方案。 从 html(从 fluid 或任何你想要的地方)通过 cObject 传递你的论点。
<f:cObject typoscriptObjectPath="lib.categoryContent" >{category.uid}</f:cObject>
或者
<f:cObject typoscriptObjectPath="lib.categoryContent" data="{category.uid}" />
错别字:
# Set argument to the current.
lib.category = TEXT
lib.category{
current = 1
}
lib.categoryContent = USER
lib.categoryContent{
10 < styles.content.get
10 {
select {
pidInList.cObject = USER
pidInList.cObject {
userFunc = Vendor\Provider\UserFunc\PageIdByAlias->getPageIdByAlias
# Pass category id as argument
alias = TEXT
alias.value < lib.category
}
}
}
wrap = <categoryContent><![CDATA[|]]></categoryContent>
}
您的 TypoScript 是正确的。但是,由于渲染被委托给用户函数,嵌套的 TypoScript 属性不会被执行——这必须在您的自定义用户函数中发生。 ContentObjectRenderer
的实例自动注入到您的自定义 class 作为 属性 PageIdByAlias::$cObj
.
<?php
namespace Vendor\Provider\UserFunc;
class PageIdByAlias
{
/**
* @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
*/
public $cObj;
protected $pageRepository;
/**
* Returns page ID by alias
*
* @var string $content
* @var array $configuration
* @return int|string
**/
public function getPageIdByAlias($content, array $configuration = null)
{
$pageId = 0;
// apply stdWrap() rendering for property 'alias'
// 3rd argument defines a custom default value if property is not set
$alias = $this->cObj->stdWrapValue('alias', $configuration, null);
if ($alias !== null) {
$pageId = $this->pageRepository->getPageIdByAlias($alias);
}
return $pageId;
}
}
尝试在您的用户功能中使用它
$pageId = $this->cObj->stdWrap($conf['page_id'], $conf['page_id.']);
在拼写错误中使用它之后
page_id.cObject = TEXT
page_id.cObject.data = GP:category