TYPO3 7.6.10:如何扩展 felogin 扩展?

TYPO3 7.6.10: How to extend the felogin extension?

我试图用一个名为 "feloginextended".

的额外扩展来扩展核心扩展 felogin

我要添加当前的first_namelast_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###-->

然后我将控制器 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扩展了。

我找到这个 "solution":https://forum.typo3.org/index.php/t/202500/ 但它对我不起作用。

有人知道或有其他方法可以将当前用户的名字和姓氏添加到注销公式中吗?

编辑: 我每次都会收到 http 错误 500!

谢谢费利克斯

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

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

$EM_CONF[$_EXTKEY] = array(
    [...]
    'constraints' => array(
        [...]
        'suggests' => array(
           'felogin' => '7.6.0-7.6.99'
        ),
    )
); 

继续回答你的错误500信息后。 这也一定是 class 加载程序问题,您看到 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/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_extension/FrontendLogin.html

[...]

<!--###TEMPLATE_LOGIN###-->

###MY_MARKER###

<!--###TEMPLATE_LOGIN###-->

<!--###TEMPLATE_LOGOUT###-->

My New Logout

<!--###TEMPLATE_LOGOUT###-->

[...]

结果完全正确,而不是我看到的登录表单 'My New Login',所以一切都对我有用。

适合您的解决方案是:

1) 您在命名空间中有错字。必须是 namespace Typo3\**F**eloginextended\Xclass; 而不是 namespace Typo3\**f**eloginextended\Xclass;

2) 你必须继承自TYPO3\CMS\Felogin\Controller\FrontendLoginController

不要忘记清除 typo3temp/Cache/* 和 typo3temp/autoload/* !

解决方法很简单。您只需将标记 ###FEUSER_FIRST_NAME######FEUSER_LAST_NAME### 添加到模板中,它们就会被正确的值替换。这个schema是通用的,可以用在用户的所有字段上:

###FEUSER_{DB field in uppercase}###。请注意,这些字段使用下划线而不是小驼峰。

这在 TYPO3 6.x 中有效,并且代码在 7.6 中看起来相同,因此它也应该有效。