한 페이지 체크 아웃에 로그인하기위한 블록 추가


9

결제 과정에서 추가 로그인 옵션을 추가하려고합니다. 현재 사용자 이름 / 비밀번호가 있습니다. OAuth 프로세스 (내 경우에는 Github)를 통해 로그인하기 위해 버튼 이미지를 추가하고 싶습니다.

방법을 찾았지만 가장 좋은 방법은 아닙니다. checkout / onepage / login.phtml 템플릿 파일에는라는 블록 자식을 얻기위한 호출이 form.additional.info있습니다.

이런 식으로 내 블록을 삽입하려고 시도했지만 작동하지 않았습니다.

<checkout_onepage_index>
        <reference name="form.additional.info">
            <block type="core/template" name="login_github_button" as="login.github.button">
                <action method="setTemplate" ifconfig="github/config/enabled">
                    <template>github/customer/login.phtml</template>
                </action>
            </block>
        </reference>
</checkout_onepage_index>

보안 문자 모듈에서 수행하는 것과 다른 방법을 찾았습니다.

<checkout_onepage_index>
    <reference name="checkout.onepage.login">
        <block type="core/text_list" name="form.additional.info">
            <block type="core/template" name="login_github_button" as="login.github.button">
                <action method="setTemplate" ifconfig="github/config/enabled">
                    <template>github/customer/login.phtml</template>
                </action>
            </block>
        </block>
    </reference>
</checkout_onepage_index>

이 경우 보안 문자가 표시되지만 보안 문자가 표시되지 않습니다. 블록에 여러 블록을 어떻게 삽입 할 수 form.additional.info있습니까?

당신의 도움을 주셔서 감사합니다

편집 :

참조 form.additional.info방법을 사용할 때 로그인 필드 아래에 버튼이 표시되지 않는 몇 가지 이유를 발견했습니다 . 대신 결제 결제보기에 표시됩니다.

  1. 블록 form.additional.info은 블록 의 보안 문자 모듈에 의해 생성 된 checkout.onepage.login다음 블록 에 대해서도 생성됩니다.checkout.onepage.billing
  2. Mage_Core_Model_Layout :: _ generateBlock ()에서 블록을 생성하는 동안 블록의 부모 블록 객체를 검색합니다 login_github_button. 중 하나를 찾는 대신 checkout.onepage.login가장 최근에 생성 된 중 하나를 찾습니다 checkout.onepage.billing. 블록은 로그인하는 대신이 마지막 블록에 연결됩니다. 그런 다음 로그인보기 대신 청구서 수신 주소보기에서 로그인 버튼을 찾습니다 !!!
  3. 레이아웃 captcha.xml 파일에 주석을 달면 checkout.onepage.billing첫 번째 솔루션 에 대한 부분이 작동합니다.

여전히 괜찮지는 않지만 이유를 찾기 시작합니다.

답변:


3

글쎄, 내가 볼 수있는 유일한 해결책은 레이아웃 모듈에 블록을 만들고 보안 문자의 코드를 추가하고 사용자 정의 코드를 참조로 추가하는 것입니다. 이 경우 허용됩니다.

불행히도, 블록에 블록을 삽입하는 것은 여전히 ​​어렵습니다 form.additional.info.

내가 구현 한 솔루션은 다음과 같습니다.

<checkout_onepage_index>
    <reference name="checkout.onepage.login">
        <block type="core/text_list" name="form.additional.info">
            <block type="captcha/captcha" name="captcha">
                <reference name="head">
                    <action method="addJs"><file>mage/captcha.js</file></action>
                </reference>
                <action method="setFormId"><formId>user_login</formId></action>
                <action method="setImgWidth"><width>230</width></action>
                <action method="setImgHeight"><width>50</width></action>
            </block>
        </block>

        <reference name="form.additional.info">
            <block type="core/template" name="login_github_button" as="login.github.button">
                <action method="setTemplate" ifconfig="github/config/enabled">
                    <template>github/customer/login.phtml</template>
                </action>
            </block>
        </reference>
    </reference>
</checkout_onepage_index> 

설명하면 다른 모듈도이 블록을 사용할 수 없으며 업그레이드에 문제가 발생할 수 있습니다. <reference name="form.additional.info"><depends>위의 솔루션은 훨씬 깨끗하고 유지 보수입니다.
mybluevan

@mybluevan 나는 downvote를 이해하지 못한다. 이러한 경우에는 downvote를 사용할 수 있습니다. stackoverflow.com/privileges/vote-down 대체 솔루션을 보여주기 위해 여기에 답을 드리겠습니다. 내가 아는 가장 좋지는 않지만 보안 문자와 맞춤형 모듈 레이아웃을 가질 수 있습니다. 다른 모듈의 사용을 막을 것이라고 말하면서 명확하지 않았습니다. 이 블록에 자식을 추가하려는 경우 여전히 문제가 계속 발생한다는 의미입니다. 나는 여전히 더 깨끗한 방법을 조사하고 있습니다. 페이 비언의 하나는 당신이 동일한 조건에서 직접 테스트를 초대, 전혀 작동하지 않습니다
실뱅 Rayé

1

captcha.xml은 블록을 생성하므로 사용 가능해야합니다. 당신은 추가 했습니까

<depends>
    <Mage_Captcha />
</depends>

아이를 추가하려고 할 때 블록이 이미 존재하는지 확인하십시오.


작동하지 않습니다. 내 모듈이 Captcha 모듈을 덮어 쓰거나 우선 순위를 갖는 것 같습니다. 트위터에서 언급했듯이 'form.additional.info'블록은 아직 존재하지 않습니다. 따라서 모듈 레이아웃은이를 생성하고 다른 모듈을 추가 할 수 없습니다. 두 번째 레이아웃 모듈은 'form.additional.info'를 참조하지 않지만 만들려고합니다. 그것이 작동하지 않는 이유입니다. 나는 둘 다를 허용하는 깨끗한 방법을 찾으려고 노력합니다. 해결책은 onepage 템플릿의 덮어 쓰기 login.phtml에있을 수 있지만, 사용자 정의 테마의 경우 다른 개발자를위한 추가 작업을 제공합니다
실뱅 Rayé

Fabian이 조언하려고하는 것은를 사용하는 첫 번째 블록을 사용 <reference name="form.additional.info">하고를 추가하는 것 <depends>입니다. 두 번째 블록을 <reference name="checkout.onepage.login">함께 사용 <depends>하면 언급 한 것처럼 보안 문자 블록을 덮어 씁니다.
mybluevan

@mybluevan 감사합니다. 내가 쓴 경우 작동하지 않습니다. Fabian이 제안한대로 테스트했음을 의미합니다. 먼저 Magento 코어 모듈이로드 된 다음 커뮤니티가로드 된 다음 로컬이됩니다. 기본 레이아웃 xml 파일의 순서와 동일합니다. 내 모듈이 커뮤니티에 있으며 마지막에로드됩니다. depends이 경우 태그 가 필요하지 않습니다. 그리고 우리는 모두 내 두 번째 블록의 덮어 쓴 방법에 동의합니다. 왜 작동하지 않는 이유를 찾았지만 여전히 깨끗한 해결책을 찾지 못했습니다. 질문에서 내 편집 내용을 참조하십시오.
Sylvain Rayé
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.