2016-07-21 42 views
3

經過很長一段時間的Google,我可以在Typo3 7.6 Fluid中獲得FAL Objects的類別。但我只能返回一個字符串。我想獲得像{data}這樣的對象。如何獲得Typo3內容元素圖片的流體中的類別對象?

我做什麼: Typo腳本

lib.category = CONTENT 
lib.category { 
    table=sys_category 
    wrap=| 
    select { 
     pidInList = root,0,1 
     recursive = 99 
     max=10 
     selectFields=sys_category.title,sys_category.uid 
     join = sys_category_record_mm on sys_category_record_mm.uid_local = sys_category.uid join sys_file_metadata on sys_file_metadata.uid = sys_category_record_mm.uid_foreign join sys_file_reference on sys_file_reference.uid_local = sys_file_metadata.file 
     where.field = fuid 
     where.wrap = sys_file_reference.uid=| 
    } 
    renderObj=COA 
    renderObj { 
     1=TEXT 
     1.field = uid 
     2=TEXT 
     2.field = title 
    } 
} 

流體我:

<f:for each="{files}" as="file"> 
    <p> 
    - {file.uid}<br /> 
    - <f:cObject typoscriptObjectPath="lib.category" data="{fuid:file.uid}" /> 
    </p> 
</f:for> 

在網頁它打印:

  • 3Black7Small

  • 2Blue7Big

  • 1Red

但我認爲在流體中的對象比較好,這樣我就可以使用f:每個等,但我不知道我該如何回報它。

任何人都可以幫助我嗎?

+0

Fal對象默認沒有類別關係,您是否使用exention來分類它們?流體中的'files'變量來自哪裏呢?你正在使用fluid_styled_content或舊的css_styled_content? –

+0

我使用fluid_styled_content和我有文件的類別。 – Burner

回答

1

看起來這個任務非常棘手。 {files}數組中的file對象的類型爲\TYPO3\CMS\Core\Resource\FileReference,其中諸如uid,標題或描述之類的屬性從\TYPO3\CMS\Core\Resource\File類型的原始文件對象中傳遞。 FileReference實際上是作爲模型實現的,但不是文件,所以你不能擴展它。

我看到的唯一的另一種方式是創建一個視圖幫助器,該視圖幫助器將獲得帶有本機SQL查詢的類別,並且CategoryRepository會自動將結果映射到類別模型。類似的東西:

<?php 
namespace Vendor\Extension\ViewHelpers; 
/** 
* 
* @version $Id$ 
* @copyright Dimitri Lavrenuek <lavrenuek.de> 
* @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later 
*/ 
class GetFileCategoriesViewHelper extends \TYPO3\CMS\Fluid\Core\ViewHelper\AbstractViewHelper { 

    /** 
    * @var \TYPO3\CMS\Extbase\Domain\Repository\CategoryRepository 
    * @inject 
    */ 
    protected $categoryRepository; 

    /** 
    * @param int $uid 
    * @return array 
    */ 
    public function render ($uid) { 
     $query = $this->categoryRepository->createQuery(); 
     $sql = "SELECT sys_category.* FROM sys_category 
      INNER JOIN sys_category_record_mm ON sys_category_record_mm.uid_local = sys_category.uid AND sys_category_record_mm.fieldname = 'categories' AND sys_category_record_mm.tablenames = 'sys_file_metadata' 
      INNER JOIN sys_file_metadata ON sys_category_record_mm.uid_foreign = sys_file_metadata.uid 
      WHERE sys_file_metadata.file = '" . (int)$uid . "' 
      AND sys_category.deleted = 0 
      ORDER BY sys_category_record_mm.sorting_foreign ASC"; 
     return $query->statement($sql)->execute(); 
    } 
} 

我沒有測試過實際的代碼,只有sql查詢,但這應該工作。另外我希望你知道如何在你的流體模板中包含viewhelpers,如果沒有,我會提供一個例子。

+0

如何在我的流體模板中使用Viewhelper? @dimitriL –

+1

$ categoryRepository必須是'TYPO3 \ CMS \ Extbase \ Domain \ Repository \ CategoryRepository'而不是'\ TYPO3 \ CMS \ Extbase \ Domain \ Model \ Category',那麼它就可以工作。爲了讓ViewHelper以作曲家模式和擴展名自動加載,這不是通過作曲家安裝,看看:https://stackoverflow.com/a/42293786/2564552 – spackmat

+0

你是對的,我調整了我的答案,謝謝 –