Невозможно вызвать действие контроллера из шаблона Fluid верхнего уровня

У меня есть самописное расширение TYPO3 (я использовал ext:extension_builder для его создания)

Мой TypoScript верхнего уровня выглядит так:

page = PAGE
page.10 = FLUIDTEMPLATE
page.10 {
    format = html
    file = EXT:cmsp/Resources/Private/Templates/User/Default.html
    partialRootPaths {
        10 = EXT:cmsp/Resources/Private/Partials/
    }
    layoutRootPaths {
        10 = EXT:cmsp/Resources/Private/Layouts/
    }
    templateRootPaths
        10 = EXT:cmsp/Resources/Private/Templates/
    }
    variables {
        content_main < styles.content.get
        content_main.select.where = colPos = 0
    }
}

Я использовал простой шаблон содержимого с плавным стилем:

<f:link.action controller="user" action="search" class="btn btn-secondary">action link</f:link.action>

Действие search зарегистрировано в ext_localconf.php:

\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
    'SimpleParser.Cmsp',
    'Cmspfe',
     [
         'User' => 'list,search'
     ],
     // non-cacheable actions
     [
         'User' => 'list,search'
     ]
);

Еще у меня есть шаблон Search.html:

<html xmlns:f="http://typo3.org/ns/TYPO3/CMS/Fluid/ViewHelpers" data-namespace-typo3-fluid="true">
<f:layout name="Search" />

<f:section name="content">
    <h1>Search Template</h1>

    <f:flashMessages />

    <table  class="tx_cmsp" >
        <tr>
            <th> </th>
            <th> </th>
        </tr>
    </table>
     <form action="SearchConfim.php">
        Searchterm: <input type="text" name="sTerm"><br>
<input type="submit" value="Submit">
</form> 
</f:section>
</html>

Проблема в том, что я не могу создать или перейти по ссылке в интерфейсе веб-сайта с верхнего уровня Default.html (FLUIDTEMPLATE объект) на Search.html (шаблон контроллера Extbase):

<f:link.action controller="user" action="search" class="btn btn-secondary">action link</f:link.action>

Я просто остаюсь на Default.html все время, даже когда нажимаю ссылку действия на моем контроллере. Я могу создавать внешние ссылки с помощью

<f:link.external ... ></f:link.external>

Внешняя ссылка работает, но я не могу использовать ссылку для доступа к Search.html. Возможно, проблема в том, что я использую TypoScript, который не активирует контроллер (правильным образом). Но я счастлив, если кто-нибудь может мне помочь.


person christian2222    schedule 25.12.2019    source источник
comment
Попробуйте использовать <f:link.action controller="User" (U в верхнем регистре вместо User, ссылаясь на UserController). Если не работает, поделитесь сгенерированной ссылкой ...   -  person Oliver Hader    schedule 26.12.2019
comment
К сожалению, заглавная буква U не сработала. Ссылка [ссылка] localhost / my-new-project / public / Даже заглавная буква S для поиска не работает. Typo3 9.5.13; PHP 7.2.24-0ubuntu0.18.04.1   -  person christian2222    schedule 26.12.2019
comment
Спасибо, tx__ показал, что происходит, и что вы размещаете <f:link.action за пределами любой области действия Extbase ... найдите возможный ответ ниже   -  person Oliver Hader    schedule 26.12.2019


Ответы (2)


Имя вашего контроллера - User с заглавной буквой U. Используйте то же имя в вашем f: link.action, если контроллер не изменяется, вы даже можете удалить этот параметр.

person Jonas Osburg    schedule 25.12.2019

Кажется, что Default.html - это имя шаблона рендеринга верхнего уровня в FLUIDTEMPLATE. Итак, я предполагаю, что тег <f:link.action ... помещен в этот файл - по крайней мере, созданная в настоящее время ссылка, похоже, подтверждает это и выглядит следующим образом:

index.php?id=1
&tx__%5Baction%5D=search
&tx__%5Bcontroller%5D=User
&cHash=dffabf13e973c371d14fb2e34b23d1a0

Он использует tx__ в качестве префикса, который на самом деле должен быть чем-то вроде tx_cmsp_cmspfe (комбинация вашего имени расширения и соответствующего имени плагина, которое будет использоваться).

Краткое объяснение

  • Default.html шаблон находится за пределами области действия Extbase и, следовательно, не знает о текущем расширении, контроллере и подключаемом модуле, которые должны использоваться
  • обычно ссылки появляются в шаблонах одного и того же расширения (например, в Resources/Private/Templates/List.html)
  • в противном случае в соответствии с областью действия необходимо указать явно (как показано ниже)

Решение для размещения ссылки на плагин Extbase в шаблоне рендеринга верхнего уровня

Этот пример можно использовать вне области действия Extbase в шаблоне Default.html для текущего макета страницы - однако он явно должен использовать правильную область действия плагина Extbase:

<f:link.action
    action="search"
    controller="User"
    pluginName="Cmspfe"
    extensionName="Cmsp"
    pageUid="4321"
    class="btn btn-secondary">

    action link
</f:link.action>
  • pageUid необходимо настроить и относится к странице, на которой плагин в настоящее время используется в качестве элемента содержимого.
  • см. https://fluidtypo3.org/viewhelpers/fluid/master/Link/ActionViewHelper.html в качестве справочного материала для ссылок.
  • см. https://fluidtypo3.org/viewhelpers/fluid/master/FormViewHelper.html в качестве справочника для <form> элементов с ограниченными областями (которые также присутствуют в вашем коде - pluginName, extensionName и pageUid также являются важными атрибутами в этом сценарии)
person Oliver Hader    schedule 26.12.2019
comment
Мне очень жаль, но похоже, что указанное вами ‹f.link.action ...› action link ‹/f:link.action› также не работает. Я думаю, что я что-то совершенно неправильно понимаю в extbase и активации контроллера .. .? - person christian2222; 26.12.2019
comment
Хорошо, что значит не работает, какой результат вы сейчас получаете, изменилась ли сгенерированная ссылка? Пожалуйста, постарайтесь лучше описать свой сценарий и то, чего вы пытаетесь достичь в своей настройке - иначе будет довольно сложно оказать какую-либо поддержку. - person Oliver Hader; 26.12.2019
comment
Я вижу ссылку в интерфейсе, но когда я нажимаю на нее, я все время остаюсь на одной и той же странице. Все, что я хотел, это ссылка на другой гибкий шаблон Search.html. Но я остаюсь на своем Default.html каждый раз, когда нажимаю ссылку - person christian2222; 26.12.2019
comment
Хм, к сожалению, это не раскрывает никаких подробностей - попробуем так: * Каково расположение файла Default.html в файловой системе? * Каково расположение файла Search.html в файловой системе? * Каков UID страницы в бэкэнде TYPO3, имеющей элемент содержимого плагина вашего пользовательского приложения Extbase? В качестве альтернативы вы также можете поделиться ссылкой на некоторый репозиторий Git, в котором есть источники вашего текущего сценария. - person Oliver Hader; 26.12.2019
comment
Я вставил расширение в github.com/christian2222/examlple. Файлы Default.html и Search.html - это в папке instance / Resources / Private / Templates / User / Контроллер находится в примере / Classes / Controller / Моя страница в бэкэнде имеет идентификатор 1. - person christian2222; 26.12.2019
comment
Я вижу, что шаблоны приложений Extbase и шаблоны пакетов сайта кажутся смешанными (Default.html принадлежит пакету сайта и не зависит от UserController, Search.html в том же каталоге, но зависит от контекста Extbase). В любом случае, плагин Extbase (заголовок spFrontend) необходимо добавить в бэкэнд TYPO3 в качестве элемента содержимого, чтобы фактически выполнить приложение. Возможно, вы найдете больше информации на docs.typo3.org/m/typo3/book-extbasefluid/master/en-us/ - person Oliver Hader; 26.12.2019
comment
К сожалению, я, должно быть, сделал что-то совершенно неправильное. Оба мои ext_localconf.php и tt_content.php правы. Я также перешел по вашей ссылке на документы, и оба файла должны быть в порядке. Я еще не понимаю, почему я не звоню в фонд extbase, и я не знаю, почему мой опечатка кажется неправильной ...? Также Search.html представляет собой модифицированную копию Default.html. И моя голова, наверное, не готова принять, почему эти два файла такие разные. - person christian2222; 27.12.2019
comment
Я не думаю, что смогу решить свою проблему, но большое спасибо, Оливер, за твою помощь. - person christian2222; 27.12.2019