2017-04-12 62 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