2016-07-21 9 views
3

после долгого времени Google я могу получить категории объектов FAL в Typo3 7.6 Fluid. Но я могу только вернуть строку. Я хочу получить такой объект, как {data}.Как я могу получить объект категории в Fluid of Typo3 Content Element Pictures?

Что я делаю: 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> 

На странице печатается:

  • 3Black7Small

  • 2Blue7Big

  • 1Red

Но я думаю, что объект в жидкости лучше, так что я могу использовать п: для каждого и т.д. Но я не знаю, как я могу его вернуть.

Может кто-нибудь мне помочь?

+0

Объекты Fal по умолчанию не имеют отношения к категории, вы используете заголовок для их сортировки по категориям? Также откуда происходит переменная 'files' в жидкости? Вы используете liquid_styled_content или старший css_styled_content? –

+0

Я использую liquid_styled_content, и у меня есть категории для файлов. – Burner

ответ

1

Похоже, эта задача очень сложная. Объект file в массиве {files} имеет тип \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-запрос, но это должно работать. Также я надеюсь, что вы знаете, как включить зрителей в ваш жидкий шаблон, если не я приведу пример.

+0

Как я могу использовать Viewhelper в моем Fluid-Template? @dimitriL –

+1

$ categoryRepository должен быть 'TYPO3 \ CMS \ Extbase \ Domain \ Repository \ CategoryRepository' вместо' \ TYPO3 \ CMS \ Extbase \ Domain \ Model \ Category', то он работает. Чтобы получить ViewGelpers, загруженные автоматически в режиме композитора, и расширение, которое не установлено через композитор, посмотрите: https://stackoverflow.com/a/42293786/2564552 – spackmat

+0

Вы правы, я скорректировал свой ответ, спасибо –