2014-01-31 3 views

ответ

-2

вы мо использовать Условный оператор вместо этого? IMHO это проще читать - и если вам нужно добавить больше аргументов, которые зависят от типаNum, он останется читаемым.

<f:if condition="{typeNum} == 666"> 
    <f:then> 
    <f:layout name="PageAjax"> 
    </f:then> 
    <f:else> 
    <f:layout name="Page"> 
    </f:else> 
</f:if> 
+0

Я просто взял рядный, если условие. Но это не имеет значения, если я беру тег-основанную или встроенную запись. Я думаю, что у меня нет доступа к жидкости, если viewhelper в разделе f: layout. – kimomat

+1

Это не сработает - причина в том, что значение узла 'f: layout' обрабатывается без фактического отображения шаблона. –

0

Я добавил условие в шаблон макета. Я получаю typeNum из typoscript.

<f:if condition="{f:cObject(typoscriptObjectPath:'plugin.nc_template.settings.pageLayout')} == 'Default'"> 
<p>Default Template</p> 
</f:if> 

<f:if condition="{f:cObject(typoscriptObjectPath:'plugin.nc_template.settings.pageLayout')} == 'Ajax'"> 
    <p>Ajax Template</p> 
</f:if> 

Я нашел пример на fedext странице, но не мог получить это запустить: https://fedext.net/blog/archive.html?tx_news_pi1[news]=55&tx_news_pi1[%40widget_0][currentPage]=8&cHash=f9c3165598a28d2aa98fd30ef115bb75

3

Предложенный подход:

<f:layout name="Page/{typeNum}"/>

Необходимые файлы:

  • Ресурсы/Частные/Макеты/Страница/0.html
  • Ресурсы/Private/Макеты/Страница/666.html

Пожалуйста, обратите внимание: это работает только если {typeNum} переменная гарантированно существует - если это не произойдет, вы будете сталкиваться с «файл шаблона не найденной "с пустым именем файла. Чтобы избежать этого, вы можете использовать расширение VHS в v:var.convert ViewHelper, чтобы обеспечить правильное значение:

<f:layout name="Page/{typeNum -> v:var.convert(type: 'integer')}"/>

0

У меня такая же проблема, в последнее время, и нашел решение после нескольких исследовани.

Проблема в том, что вы не можете использовать вложенную жидкость, например <f:if>, <f:cObject> или другие в <f:layout>. В противном случае вы получите фатальную ошибку в файле кэша, заявив call to a member function getViewHelper() on a non-object. И когда вы посмотрите на файл кеша, вы обнаружите, что это связано с тем, что $self не определен.

Поэтому мое решение, поиск public function getLayoutName( в \ TYPO3 \ CMS \ Fluid \ Ядро \ Compiler \ TemplateCompiler и добавление \$self = \$this; перед тем \$currentVariableContainer = \$renderingContext->getTemplateVariableContainer();, как generateCodeForSection()

Смежные вопросы