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

时间:2016-10-26 10:34:43

标签: php typo3 extbase typo3-7.6.x

我尝试使用名为" 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

2 个答案:

答案 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 / *

相关问题