我尝试用一个名为"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扩展。
我找到了一个“解决方案”:https://forum.typo3.org/index.php/t/202500/,但它对我不起作用。
有谁有主意或者有其他方法将当前用户的名字和姓氏带到注销公式中吗?
编辑:我每次得到一个http错误500!
谢谢费利克斯
发布于 2016-10-27 20:32:51
解决办法很简单。您只需将标记###FEUSER_FIRST_NAME###和###FEUSER_LAST_NAME###添加到模板中,它们将被正确的值替换。此架构是通用的,可用于用户的所有字段:
###FEUSER_{DB field in uppercase}###。请注意,字段与下划线一起使用,而不是用下camelcase。
这在TYPO3 6.x中是有效的,代码在7.6中看起来是一样的,所以它也应该能工作。
发布于 2016-10-26 11:55:00
假设您的扩展EXT:feloginextended已经安装,并且清除了所有缓存,包括安装工具提供的完整缓存清除,那么您做的一切都是正确的。还完全删除目录/typo3temp/autoload。
唯一可能出错的是扩展名的加载顺序,在文件ext_typoscript_setup.txt中定义TS设置时,这一点很重要。在这种情况下,必须强制在原来的EXT:felogin扩展名之后加载扩展。确保这一点的唯一方法是将扩展felogin添加到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_扩展名/ext_localconf.php.ext
<?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/Classes/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_EXT/FrontenLogin.html
[...]
<!--###TEMPLATE_LOGIN###-->
###MY_MARKER###
<!--###TEMPLATE_LOGIN###-->
<!--###TEMPLATE_LOGOUT###-->
My New Logout
<!--###TEMPLATE_LOGOUT###-->
[...]结果是完全正确的,而不是登录形式,我看到‘我的新登录’,所以一切都为我工作。
对你来说,解决办法是:
1)名称空间中有一个错误。它必须是namespace Typo3\**F**eloginextended\Xclass;而不是namespace Typo3\**f**eloginextended\Xclass;
2)您必须从TYPO3\CMS\Felogin\Controller\FrontendLoginController继承
不要忘记清除Type3temp/Cache/*和typo3temp/autoload/*!
https://stackoverflow.com/questions/40259950
复制相似问题