2016-10-26 1 views
2

핵심 확장자를 확장하려고 시도했습니다 felogin "feloginextended"라는 추가 확장명을 사용했습니다.TYPO3 7.6.10 : felogin 확장을 확장하는 방법은 무엇입니까?

은 내가 first_name 내 로그 아웃 포뮬러로 현재 사용자의 last_name 속성을 추가 할 수 있습니다.

이 내 오버라이드 (override) 템플릿 (단지 로그 아웃 부분)입니다 :

<!--###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 기능에 약간의 변화를 추가 : 그럼이 ext_typoscript_setup.txt 파일 내 템플릿을 등록

<?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); 
} 
} 

을 :

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이 발생합니다.

감사 펠릭스

답변

3

솔루션은 매우 간단합니다. 템플릿에 ###FEUSER_FIRST_NAME######FEUSER_LAST_NAME### 마커를 추가하면 올바른 값으로 대체됩니다. 이 스키마는 일반적이며 사용자의 모든 입력란에서 사용할 수 있습니다.

###FEUSER_{DB field in uppercase}###. 필드는 밑줄과 함께 사용되며 하위 camelcase에는 사용되지 않습니다.

이것은 TYPO3 6.x에서 작동하며 코드는 7.6에서와 동일하게 보이므로 작동해야합니다.

+0

Omg 이것은 매우 쉽습니다. 고마워. – Felix

0

이 확장 EXT:feloginextended가 설치되어 있다고 가정하고 명확한 설치 도구가 제공하는 전체 캐시를 포함한 모든 캐시를 삭제, 당신이 올바른 모든 일을했다. 디렉토리 /typo3temp/autoload도 완전히 삭제하십시오.

잘못 될 수있는 유일한 것은 확장자의로드 순서입니다.이 파일은 ext_typoscript_setup.txt 파일 내에 TS-Setup을 정의 할 때 중요합니다. 이 경우 원래 EXT : felogin 확장 후에 확장자를로드해야합니다. 그리고이를 보장하는 유일한 방법은 EXT:feloginextended/ext_emconf.php 안에 "suggests"제약 조건 설정 목록에 확장 felogin을 추가하는 것입니다. 그런 다음 Extension을 완전히 제거하고 다시 설치해야합니다.

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

오류 500 이후의 정보를 계속 입력하십시오. 이것은 클래스 로더 문제 여야합니다. PHP 또는 TYPO3 오류보고 구성 때문에 500 오류가 발생한다는 사실을 알 수 있습니다. 다음과 같이

어쨌든 나는 당신의 접근 방식을 복사 :

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###--> 

[...] 

결과는 대신 내가 '내 새 로그인'을 참조 로그인 양식을 완전히 올바른, 그래서 모든 것이 나를 위해 노력하고 있습니다.

당신을위한 해결책은 다음과 같습니다

1) 당신은 네임 스페이스에 오타가 있습니다. 그것은 당신이/캐시/* 및 typo3temp/자동로드/* typo3temp 취소하는 것을 잊지 마세요 TYPO3\CMS\Felogin\Controller\FrontendLoginController

에서 상속해야합니다 namespace Typo3\**F**eloginextended\Xclass; 대신 namespace Typo3\**f**eloginextended\Xclass;

2)해야합니다!

+0

답장을 보내 주신 Thx.하지만이 문제는 해결책이 아닙니다. 나는 여전히 HTTP 에러 500을 받는다. 내 생각에 컨트롤러는로드 될 수 없지만, 왜 그런가? – Felix

+0

아, 컨트롤러를로드하는 데 문제가 없다고 언급 한 적이 없습니다. :-) 사용자 정의 템플릿이있는 TypoScript처럼 효과가 없습니다. 질문을 편집하고 XCLASS의 전체 내용을 게시하십시오. typo3temp/autoload 디렉토리를 삭제하는 팁이 추가되어 편집 된 답변도 참조하십시오. –

+0

'/ typo3temp/autoload'는 확장 기능을 비활성화하거나 활성화 한 경우 자동으로 지워집니다. 따라서 손으로 삭제할 필요가 없습니다. –

관련 문제