Я создал очень простое расширение typo3 всего с одной моделью и одним контроллером.
Это единственные действия в контроллере:
/**
* action list
*
* @return void
*/
public function listAction()
{
$projects = $this->projectRepository->findAll();
$this->view->assign('projects', $projects);
}
/**
* action show
*
* @param \Typo3\Productoverview\Domain\Model\Project $project
* @return void
*/
public function showAction(\Typo3\Productoverview\Domain\Model\Project $project)
{
$this->view->assign('project', $project);
}
Затем я создал папку и добавил элемент плагина:
После этого я разместил сам плагин на главной странице и включил папку.
С конфигурацией RealURL мне удалось сократить URL-адрес действия показа:
<?php
$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']= array (
'local.typo3' => array (
'init' => array (
'enableCHashCache' => 1,
'appendMissingSlash' => 'ifNotFile, redirect',
'adminJumpToBackend' => 1,
'enableUrlDecodeCache' => 1,
'enableUrlEncodeCache' => 1,
'emptyUrlReturnValue' => '/',
),
'postVarSets' => array (
'_DEFAULT' => array (
'project' => array (
array (
'GETvar' => 'tx_productoverview_projects[action]',
),
array (
'GETvar' => 'tx_productoverview_projects[project]',
),
),
),
),
...
В чем проблема?
Если я сейчас щелкну ссылку одного элемента списка на главной странице, он изменит URL-адрес в строке браузера, но не переадресует меня. Мне нужно обновить страницу с помощью Control + F5, чтобы перейти к представлению проекта или вернуться на главную страницу (даже если я изменю URL-адрес в браузере вручную).
Я работаю с Typo3 7.6.10 и realurl 2.0.15.
Обновлять
Если я использую cHash в realurl_conf.php, он работает правильно:
array (
'GETvar' => 'cHash',
),
Как работать без cHash? Я имею в виду, что "enableCHashCache" активирован ..
Обновление 2
Одно из возможных решений - отключить кеширование для действия списка, но я не уверен, что это правильный путь:
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'ET.' . $_EXTKEY,
'Projects',
array(
'Project' => 'list, show',
),
// non-cacheable actions
array(
'Project' => 'list',
)
);