首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TYPO3 7.6.10:如何扩展felogin扩展?

TYPO3 7.6.10:如何扩展felogin扩展?
EN

Stack Overflow用户
提问于 2016-10-26 10:34:42
回答 2查看 1.8K关注 0票数 2

我尝试用一个名为"feloginextended“的额外扩展来扩展核心扩展felogin

我希望将当前用户的first_namelast_name属性添加到注销公式中。

这是我的重写的模板(只有注销部分):

代码语言:javascript
复制
<!--###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函数中添加了一些更改,以设置标记:

代码语言:javascript
复制
 <?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文件中注册我的模板:

代码语言:javascript
复制
plugin.tx_felogin_pi1 {
    templateFile = EXT:feloginextended/Resources/Private/Templates/FrontendLogin.html
}

我的最后一步是在ext_localconf.php中注册控制器

代码语言:javascript
复制
<?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!

谢谢费利克斯

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-27 20:32:51

解决办法很简单。您只需将标记###FEUSER_FIRST_NAME######FEUSER_LAST_NAME###添加到模板中,它们将被正确的值替换。此架构是通用的,可用于用户的所有字段:

###FEUSER_{DB field in uppercase}###。请注意,字段与下划线一起使用,而不是用下camelcase。

这在TYPO3 6.x中是有效的,代码在7.6中看起来是一样的,所以它也应该能工作。

票数 4
EN

Stack Overflow用户

发布于 2016-10-26 11:55:00

假设您的扩展EXT:feloginextended已经安装,并且清除了所有缓存,包括安装工具提供的完整缓存清除,那么您做的一切都是正确的。还完全删除目录/typo3temp/autoload

唯一可能出错的是扩展名的加载顺序,在文件ext_typoscript_setup.txt中定义TS设置时,这一点很重要。在这种情况下,必须强制在原来的EXT:felogin扩展名之后加载扩展。确保这一点的唯一方法是将扩展felogin添加到EXT:feloginextended/ext_emconf.php中的“建议”约束设置列表中。然后,您必须完全卸载您的扩展,并再次安装它。

代码语言:javascript
复制
$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

代码语言:javascript
复制
<?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

代码语言:javascript
复制
plugin.tx_felogin_pi1 {
    templateFile = EXT:my_extension/FrontendLogin.html
}

EXT:my_extension/Classes/FrontendLoginController.php

代码语言:javascript
复制
<?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

代码语言:javascript
复制
[...]

<!--###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/*

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40259950

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档