Визуализация элементов содержимого TYPO3 как HMENU с помощью DataProcessors - PullRequest
0 голосов
/ 24 сентября 2019

Начиная с часа я пытаюсь создать меню контент-элементов, где клик по ссылке переходит на якорь СЕ.Я нашел решение для этого, сделанное в TypoScript, но современный способ должен использовать DataProcessing.До сих пор я пробовал все процессоры по умолчанию во многих комбинациях и каскадировании, затем я расширил исходный MenuProcessor и объединил в нем некоторые функции из DatabaseQueryProcessor для запроса таблицы tt_content ...

Ничего не получилось!Не может быть такой сложной задачей написать функциональность этого небольшого примера кода как DataProcessor ?!Очень расстраивает -.- Кто-нибудь из вас есть идея?

temp.contentnav = CONTENT
temp.contentnav.wrap = <ul>|</ul>
temp.contentnav {
  table = tt_content
  select {
    pidInList = this
    andWhere = (sectionIndex=1 AND hidden=0 AND deleted=0)
    orderBy = sorting DESC
    where = colPos=0
    languageField=sys_language_uid

  }
  renderObj = TEXT
  renderObj {
    field = header 
    wrap= <li>|</li>     
    typolink.parameter.field=pid
    typolink.parameter.dataWrap=|#{field:uid}
    if.isTrue.field=header
  }   
}
lib.sub_nav < temp.contentnav

Источник: https://gist.github.com/zvineyard/4289211

1 Ответ

0 голосов
/ 25 сентября 2019

Поработав еще, я разобрался с рабочим решением, используя userFunc, чтобы перезаписать возвращаемый результат MenuProcessor.Но мое внутреннее чувство говорит, что это не очень красивое решение, скорее как обходной путь, я думаю, что должен быть лучший способ, чем этот.Не стесняйтесь улучшать или высказать свое мнение:

page.10 {
  dataProcessing {
    110 = TYPO3\CMS\Frontend\DataProcessing\MenuProcessor
    110 {
      special = userfunction
      special {
        userFunc = Vendor\Extension\ContentMenu->process
        table = tt_content
        pidInList = 9 # Page where the content comes from, uid possible
        titleField = header
      }
      as = contentmenu
    }
  }
}

И:

class ContentMenu {
    /**
     * @var \TYPO3\CMS\Frontend\ContentObject\ContentDataProcessor
     */
    protected $contentDataProcessor;

    /**
     * @var \TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
     */
    public $cObj;

    public function __construct() {
        $this->contentDataProcessor = GeneralUtility::makeInstance(ContentDataProcessor::class);
    }

    public function process(string $content, array $config) {
        if(empty($content)) {
            $content = [];
        }

        $titleField = $this->cObj->stdWrapValue('titleField', $config, 'header');
        $tableName = $this->cObj->stdWrapValue('table', $config, 'tt_content');

        $records = $this->cObj->getRecords($tableName, $config);
        $processedRecordVariables = [];
        foreach($records as $key => $record) {
            /** @var ContentObjectRenderer $recordContentObjectRenderer */
            $recordContentObjectRenderer = GeneralUtility::makeInstance(ContentObjectRenderer::class);
            $recordContentObjectRenderer->start($record, $tableName);
            $processedRecordVariables[$key] = ['data' => $record];
            $processedRecordVariables[$key] = $this->contentDataProcessor->process($recordContentObjectRenderer, $config, $processedRecordVariables[$key]);

            $content[] = [
                'uid' => $record['uid'],
                'title' => $record[$titleField],
                // TODO: improve by using slug:
                '_OVERRIDE_HREF' => 'index.php?id='.$record['pid'].'#c'.$record['uid']
            ];
        }

        return $content;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...