我尝试使用名为" feloginextended"的额外扩展程序扩展核心扩展程序 felogin
。
我想将当前用户的 first_name
和 last_name
属性添加到我的注销公式中。
这是我的覆盖模板(仅限注销部分):
<!--###TEMPLATE_LOGOUT###-->
<form class="login-form" action="###ACTION_URI###" target="_top" method="post">
<div>
<div class="user">###FIRSTNAME### ###LASTNAME###</div>
<a class="page-link-button" href="http://tf.lightblue.eu/index.php?id=14">Meine Siegel</a>
<a class="page-link-button" href="http://tf.lightblue.eu/index.php?id=15">Mein Account</a>
<input class="form-btn" type="submit" name="submit" value="Logout" />
</div>
<div class="felogin-hidden">
<input type="hidden" name="logintype" value="logout" />
<input type="hidden" name="pid" value="###STORAGE_PID###" />
<input type="hidden" name="###PREFIXID###[noredirect]" value="###NOREDIRECT###" />
</div>
</form>
<!--###TEMPLATE_LOGOUT###-->
然后我将Controller Classes\Xclass\FrontendLoginController
添加到我的扩展程序中。
我复制了原始文件并在showLogout函数中添加了一些更改来设置标记:
<?php
namespace Typo3\feloginextended\Xclass;
use \TYPO3\CMS\Frontend\Plugin\AbstractPlugin;
/**
* Plugin 'Website User Login' for the 'felogin' extension.
*/
class FrontendLoginController extends AbstractPlugin
{
/**
* Shows logout form
*
* @return string The content.
*/
protected function showLogout()
{
$subpart = $this->cObj->getSubpart($this->template, '###TEMPLATE_LOGOUT###');
$subpartArray = ($linkpartArray = array());
$markerArray['###STATUS_HEADER###'] = $this->getDisplayText('status_header', $this->conf['logoutHeader_stdWrap.']);
$markerArray['###STATUS_MESSAGE###'] = $this->getDisplayText('status_message', $this->conf['logoutMessage_stdWrap.']);
$this->cObj->stdWrap($this->flexFormValue('message', 's_status'), $this->conf['logoutMessage_stdWrap.']);
$markerArray['###LEGEND###'] = $this->pi_getLL('logout', '', true);
$markerArray['###ACTION_URI###'] = $this->getPageLink('', array(), true);
$markerArray['###LOGOUT_LABEL###'] = $this->pi_getLL('logout', '', true);
$markerArray['###NAME###'] = htmlspecialchars($this->frontendController->fe_user->user['name']);
$markerArray['###STORAGE_PID###'] = $this->spid;
$markerArray['###USERNAME###'] = htmlspecialchars($this->frontendController->fe_user->user['username']);
$markerArray['###USERNAME_LABEL###'] = $this->pi_getLL('username', '', true);
$markerArray['###NOREDIRECT###'] = $this->noRedirect ? '1' : '0';
$markerArray['###PREFIXID###'] = $this->prefixId;
// my custom changes-----------------------------------
$markerArray['###FIRSTNAME###'] = htmlspecialchars($this->frontendController->fe_user->user['first_name']);
$markerArray['###LASTNAME###'] = htmlspecialchars($this->frontendController->fe_user->user['last_name']);
//------------------------------------------------------
$markerArray = array_merge($markerArray, $this->getUserFieldMarkers());
if ($this->redirectUrl) {
// Use redirectUrl for action tag because of possible access restricted pages
$markerArray['###ACTION_URI###'] = htmlspecialchars($this->redirectUrl);
$this->redirectUrl = '';
}
return $this->cObj->substituteMarkerArrayCached($subpart, $markerArray, $subpartArray, $linkpartArray);
}
}
然后我在 ext_typoscript_setup.txt
文件中注册我的模板:
plugin.tx_felogin_pi1 {
templateFile = EXT:feloginextended/Resources/Private/Templates/FrontendLogin.html
}
我的最后一步是在 ext_localconf.php
中注册控制器:
<?php
if (!defined('TYPO3_MODE')) {
die('Access denied.');
}
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Felogin\\Controller\\FrontendLoginController'] = array(
'className' => 'Typo3\\Feloginextended\\Xclass\\FrontendLoginController',
);
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['tx_felogin_pi1'] = $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Felogin\\Controller\\FrontendLoginController'];
如果将此更改添加到felogin扩展的原始文件中,那么我有一个解决方案。
但这种方式非常脏,将来我无法轻易更新felogin扩展程序。
我找到了这个&#34;解决方案&#34;:https://forum.typo3.org/index.php/t/202500/ 但它不适合我。
有人有想法或有其他方法将当前用户的名字和姓氏带到退出公式吗?
修改 我每次都得到一个http错误500!
感谢Felix
答案 0 :(得分:4)
解决方案非常简单。您只需将标记###FEUSER_FIRST_NAME###
和###FEUSER_LAST_NAME###
添加到模板中,它们就会被正确的值替换。此架构是通用的,可用于用户的所有字段:
###FEUSER_{DB field in uppercase}###
。请注意,这些字段与下划线一起使用,而不是较低的camelcase。
这适用于TYPO3 6.x,代码在7.6中看起来相同,所以它也应该有用。
答案 1 :(得分:0)
假设您的扩展程序EXT:feloginextended
已安装,并且您清除了所有缓存,包括安装工具提供的完整缓存清除,您已完成所有操作。完全删除目录/typo3temp/autoload
。
唯一可能出错的是扩展的加载顺序,这对于在文件ext_typoscript_setup.txt
中定义TS-Setup非常重要。
在这种情况下,您必须强制在原始EXT:felogin扩展名后加载您的扩展名。确保这一点的唯一方法是将扩展felogin添加到&#34;建议&#34;的列表中。 EXT:feloginextended/ext_emconf.php
内的约束设置。
然后,您必须完全卸载扩展程序并重新安装。
$EM_CONF[$_EXTKEY] = array(
[...]
'constraints' => array(
[...]
'suggests' => array(
'felogin' => '7.6.0-7.6.99'
),
)
);
在出现错误500信息后继续回答。 这也必须是一个类加载器问题,你看到500错误的事实是由PHP或TYPO3错误报告配置引起的。
无论如何,我按照以下方式复制了你的方法:
EXT:my_extension / ext_localconf.php
<?php
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\CMS\Felogin\Controller\FrontendLoginController'] = array(
'className' => 'Typo3\Feloginextended\Xclass\FrontendLoginController',
);
$GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['tx_felogin_pi1'] = $GLOBALS['TYPO3_CONF_VARS']['SYS']['Objects']['TYPO3\\CMS\\Felogin\\Controller\\FrontendLoginController'];
EXT:my_extension / ext_typoscript_setup.txt
plugin.tx_felogin_pi1 {
templateFile = EXT:my_extension/FrontendLogin.html
}
EXT:my_extension /类别/ FrontendLoginController.php
<?php
namespace Typo3\Feloginextended\Xclass;
use TYPO3\CMS\Felogin\Controller\FrontendLoginController as BaseFrontendLoginController;
/**
* Plugin 'Website User Login' for the 'felogin' extension.
*/
class FrontendLoginController extends BaseFrontendLoginController
{
/**
* Shows login form
*
* @return string The content.
*/
protected function showLogin()
{
$subpart = $this->cObj->getSubpart($this->template, '###TEMPLATE_LOGIN###');
$subpartArray = ($linkpartArray = array());
$markerArray['###MY_MARKER###'] = 'My new login';
return $this->cObj->substituteMarkerArrayCached($subpart, $markerArray, $subpartArray, $linkpartArray);
}
}
EXT:my_extension / FrontendLogin.html
[...]
<!--###TEMPLATE_LOGIN###-->
###MY_MARKER###
<!--###TEMPLATE_LOGIN###-->
<!--###TEMPLATE_LOGOUT###-->
My New Logout
<!--###TEMPLATE_LOGOUT###-->
[...]
结果是完全正确的,而不是我看到的登录表单&#39;我的新登录&#39;,所以一切都适合我。
您的解决方案是:
1)命名空间中有拼写错误。它必须是namespace Typo3\**F**eloginextended\Xclass;
而不是namespace Typo3\**f**eloginextended\Xclass;
2)您必须继承TYPO3\CMS\Felogin\Controller\FrontendLoginController
别忘了清除typo3temp / Cache / *和typo3temp / autoload / * !