TYPO3 (8.7.10) переход на предыдущую страницу, запоминание опубликованных значений - PullRequest
0 голосов
/ 06 декабря 2018

Я создал форму поиска в TYPO3.Пользователь может фильтровать результаты, выбирая параметры в форме.форма обрабатывается с использованием строки формы FLUID следующим образом:

<f:form method="POST" action="list" name="eventsearch">

... это работает правильно (и я заметил cHash в конце URL при отправке)

КогдаПользователь находит элемент, который он хочет, он может щелкнуть по нему, чтобы перенести их на другую страницу.На этой странице есть кнопка возврата, которая направляет их обратно на страницу поиска, но все отфильтрованные переменные теряются и отправляются обратно на первую страницу поиска.Этого следовало ожидать, но есть ли способ сохранить эту информацию?

Я пытался пройти по ссылке URL (с ключом has), но это не сработало.Я также попробовал классический window.history.back (), но так как форма поиска использует POST, им придется снова обновлять экран.Я также попытался поменять свою форму сообщения на GET, но я получаю сообщение об ошибке в неверном cHash.

Я предполагаю, что есть способ, так как кнопки разбивки FLUID могут сохранять информацию, даже если они кажутсяиспользовать GET.

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

, как указал @ Кевин Дитшайд , я могу сохранить данные формы как данные сеанса.Используя 8.7.10, я использовал следующую функцию для хранения моих данных:

$GLOBALS['TSFE']->fe_user->setKey("ses","some_variable_name",$data);

... которая может быть получена следующим образом:

$GLOBALS["TSFE"]->fe_user->getKey("ses","some_variable_name");

Когда пользователь переходит с другой страницы с помощью кнопки, я гарантирую, что в URL включена переменная «return = 1».Мой класс контроллера ищет эту переменную и, если найден, возвращает данные публикации формы из моих данных сеанса.

0 голосов
/ 06 декабря 2018

Я бы сохранял данные формы в сеансе пользователя.Таким образом, они могут быть восстановлены из сеанса независимо от того, куда пользователь возвращается обратно в форму.Это будет означать, что если у вас есть showFormAction и showResultsAction, вам нужно сохранить данные формы в showResultsAction следующим образом:

public function showResultsAction(FormData $formData)
{
    $this->storeInSession($formData);
    // do something with the formData here
}

protected function storeInSession(FormData $formData)
{
    if ($GLOBALS['TSFE']) {
        $GLOBALS['TSFE']->setAndSaveSessionData('tx_myext_formdata',$formData);
    } elseif($GLOBALS['BE_USER']) {
        $GLOBALS['BE_USER']->setAndSaveSessionData('tx_myext_formdata',$formData);
    }
}

Вы собираетесь получить данные формы наследующий визит пользователей showFormAction, например:

public function showFormAction(FormData $formData = NULL)
{
    if ($formData === NULL) {
        $formData = $this->getSessionData();
    }
    $this->view->assign('formData', $formData);
    // do more stuff for the form here
}

protected function getSessionData() 
{
    $formData = NULL;
    if ($GLOBALS['TSFE']) {
        $formData = $GLOBALS['TSFE']->fe_user->getSessionData('tx_myext_formdata');
    } elseif ($GLOBALS['BE_USER']) {
        $formData = $GLOBALS['BE_USER']->getSessionData('tx_myext_formdata');
    }
    return $formData;
}

и передача formData вашему помощнику вида формы <f:form method="POST" action="list" name="formData" object="{formData}">.

FormData в этом примере - это DTO, в котором хранятся формы.отдельные поля как свойства, как модель, но не сохраняются в таблице базы данных, как AbstractEntities.Таким образом, легче вернуть восстановленные значения обратно в форму, потому что форма автоматически заполняет свои поля значениями из DTO.Например, если у вас есть поле <f:form.textfield name="somefield" /> в вашей форме, вы даете FormData DTO свойство property $somefield = '';, получатель и установщик и измените помощник представления на <f:form.textfield property="somefield" />, и форма сама обработает предварительное заполнение.

...