2017-04-12 50 views
1

我试图发送一个获取参数到userFunc为了识别一个页面,但它似乎并没有工作。这是我有:发送typoscript参数到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 

不过,我仍然只能得到字符串GP:category在PHP。 我正在使用TYPO3 7.6.11

+0

可能重复使用此之后[TYPO3 userFunc给GET参数到PHP文件(HTTP:/ /stackoverflow.com/questions/43276482/typo3-userfunc-give-get-parameter-to-php-file) – nbar

回答

1

你的Typo脚本是正确的。但是,由于渲染被委托给用户函数,嵌套的TypoScript属性不会被执行 - 这必须发生在您的自定义用户函数中。 ContentObjectRenderer的实例将自动注入您的自定义类,作为属性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; 
    } 
} 
1

你可以使用$ _GET在userFunc?

+0

是的,但由于我会传递更多参数,我宁愿从TypoScript传递它们。 – cili

-1

这是为我工作的解决方案。 将您的参数与html中的cObject(来自流体或任何你想要的)进行传递。

<f:cObject typoscriptObjectPath="lib.categoryContent" >{category.uid}</f:cObject> 

或者

<f:cObject typoscriptObjectPath="lib.categoryContent" data="{category.uid}" /> 

Typo脚本:

# 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> 
} 
+0

问题不在于Fluid模板。除此之外,即使正在使用Fluid ViewHelper,“别名”部分也不会自动解释。 –

1

尝试使用这个在用户功能

$pageId = $this->cObj->stdWrap($conf['page_id'], $conf['page_id.']); 

中的Typo脚本

page_id.cObject = TEXT 
page_id.cObject.data = GP:category