3

久しぶりのGoogleで、Typo3 7.6 FluidでFALオブジェクトのカテゴリを取得できました。しかし、私は文字列しか返すことができません。{data} のようなオブジェクトを取得したい。

私がしていること: TypoScript

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
    }
}

Fluid には次のものがあります。

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

ウェブページには次のように印刷されます。

  • 88
  • 3黒7小

  • 89

  • 2ブルー7ビッグ

  • 90

  • 1レッド

しかし、私は Fluid のオブジェクトの方が優れていると思うので、 f:for each などを使用できます。しかし、どのように返すことができるかわかりません。

誰でも私を助けることができますか?

4

1 に答える 1

2

この作業は非常に難しいようです。配列内のfileオブジェクトは、uid、タイトル、説明などのプロパティが type の元のファイル オブジェクトから渡されるタイプです。実際にはファイルではなくモデルとして実装されているため、拡張することはできません。{files}\TYPO3\CMS\Core\Resource\FileReference\TYPO3\CMS\Core\Resource\FileFileReference

私が見る唯一の他の方法は、ネイティブSQLクエリでカテゴリを取得するviewhelperを作成することであり、CategoryRepositoryは結果をCategoryモデルに自動的にマップします。そんな感じ:

<?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 クエリのみをテストしていますが、これは機能するはずです。また、流体テンプレートにビューヘルパーを含める方法を知っていることを願っています。そうでない場合は、例を提供します。

于 2016-08-30T10:14:08.403 に答える