Dodanie bloku do logowania na stronie kasy


9

Próbuję dodać dodatkową opcję logowania podczas realizacji transakcji. W tej chwili masz sposób na nazwę użytkownika / hasło. Chcę dodać obraz przycisku, aby zalogować się za pomocą procesu OAuth (w moim przypadku Github).

Znalazłem sposób, ale nie jest to najlepszy sposób. W pliku szablonu Checkout / onepage / login.phtml znajduje się wywołanie o nazwie potomka bloku form.additional.info.

Próbowałem w ten sposób wstawić do niego własny blok, ale to nie działało.

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

Znalazłem inny sposób, jak robi to moduł captcha:

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

W takim przypadku działa, ALE captcha nie będzie wyświetlana. Jak mogę wstawić kilka bloków do form.additional.infobloku?

Dzięki za pomoc

EDYCJA :

Znalazłem kilka powodów, dla których przycisk nie jest wyświetlany pod polami logowania podczas korzystania z form.additional.infometody referencyjnej . Zamiast tego jest wyświetlany w widoku rozliczeniowym kasy.

  1. Blok form.additional.infojest tworzony przez moduł captcha dla bloku, checkout.onepage.logina następnie jest również tworzony dla blokucheckout.onepage.billing
  2. Podczas generowania bloku w Mage_Core_Model_Layout :: _ generateBlock () przeszukuje obiekt bloku nadrzędnego bloku login_github_button. Zamiast znalezienia jednego checkout.onepage.login, znajdzie jeden z najnowszych utworzona: checkout.onepage.billing. Blok jest dołączony do tego ostatniego zamiast logu w jednym. Następnie znajduję przycisk logowania w widoku adresu rozliczeniowego zamiast w widoku logowania !!!
  3. Jeśli skomentuję plik captcha.xml układu, część o checkout.onepage.billingmoim pierwszym rozwiązaniu działa.

Nadal nie jest ok, ale zaczynam szukać powodów.

Odpowiedzi:


3

Cóż, jedynym rozwiązaniem, jakie widzę, jest utworzenie bloku modułu, dodanie kodu captcha i dodanie jako odniesienia mojego dostosowanego kodu. W takim przypadku jest to akceptowane.

Niestety nadal będzie trudno wstawić blok do form.additional.infobloku.

Oto rozwiązanie, które wdrożyłem:

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

Jak twierdzisz, uniemożliwi to również innym modułom korzystanie z tego bloku, a także spowoduje problemy z aktualizacjami. <reference name="form.additional.info">I <depends>rozwiązanie powyżej jest znacznie czystsze i bardziej linkujących.
mybluevan

@mybluevan Nie rozumiem opinii negatywnej (jeśli to zrobiłeś). W tych przypadkach zasługuje się na downvote stackoverflow.com/privileges/vote-down Moja odpowiedź znajduje się tutaj, aby pokazać alternatywne rozwiązanie. Nie jest to najlepsze, jakie znam, ale pozwala mieć captcha i dostosowany układ modułu. Nie wyjaśniłem, mówiąc, że uniemożliwi to korzystanie z innych modułów. Chciałem powiedzieć, że jeśli chcesz dodać dziecko do tego bloku, nadal będzie to stanowić problem. Nadal szukam czystszego sposobu. Ten Fabiana w ogóle nie działa, zapraszam do przetestowania go samemu w tym samym stanie
Sylvain Rayé 30.01.2013

1

captcha.xml generuje blok, więc powinien być użyteczny. Czy dodałeś

<depends>
    <Mage_Captcha />
</depends>

aby mieć pewność, że Twój blok już istnieje, kiedy próbujesz dodać do niego dziecko?


Nie działa. Mój moduł wydaje się nadpisywać lub mieć wyższy priorytet niż moduł Captcha. Jak wspomniałeś na Twitterze, blok „form.additional.info” jeszcze nie istnieje. Tak więc układ modułu tworzy go i nie pozwala na dodanie innego. Drugi moduł układu nie odwołuje się do „form.additional.info”, ale próbuje go utworzyć. To jest powód, dla którego nie działa. Staram się znaleźć czysty sposób, aby pozwolić na oba. Rozwiązaniem może być zastąpienie login.phtml szablonu na stronie, ale zapewni to dodatkową pracę innym programistom w przypadku niestandardowego motywu
Sylvain Rayé

Fabian próbuje doradzić, aby użyć tego pierwszego bloku, który używa, <reference name="form.additional.info">a następnie dodać <depends>. Jeśli użyjesz tego drugiego bloku <reference name="checkout.onepage.login">z <depends>nim, zastąpi on blok captcha, jak wspomniałeś.
mybluevan

@mybluevan dziękuję Nie jestem nowicjuszem. Jeśli napisałem, nie działa, to znaczy, że testowałem zgodnie z sugestią Fabiana. Najpierw ładowane są moduły podstawowe Magento, następnie społeczność, a następnie lokalna. Ta sama kolejność dla domyślnych plików xml układu. Mój moduł jest w społeczności, w końcu został załadowany. Tag dependsw tym przypadku nie jest konieczny. I wszyscy zgadzamy się co do zastąpionego sposobu mojego drugiego bloku. Znalazłem powód, dla którego to nie działa, ale wciąż nie znalazłem jeszcze czystego rozwiązania. Zobacz moją edycję w pytaniu.
Sylvain Rayé 30.01.2013
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.