2016-10-23 9 views

ответ

2

В SilverStripe 3.4 мы можем продлить MemberLoginForm, установить действие в нашем конструкторе, а затем установить SilverStripe, чтобы использовать собственный класс входа в качестве класса входа по умолчанию.

Сначала мы создаем CustomMemberLoginForm класс:

MySITE/код/​​CustomMemberLoginForm.php

class CustomMemberLoginForm extends MemberLoginForm { 

    public function __construct($controller, $name, $fields = null, $actions = null, $checkCurrentUser = true) { 

     $actions = FieldList::create(
      FormAction::create('dologin', _t('Member.BUTTONLOGIN', 'Log in'))->addExtraClass('myClass'), 
      LiteralField::create(
       'forgotPassword', 
       '<p id="ForgotPassword"><a href="Security/lostpassword">' 
       . _t('Member.BUTTONLOSTPASSWORD', "I've lost my password") . '</a></p>' 
      ) 
     ); 

     parent::__construct($controller, $name, $fields, $actions); 
    } 
} 

В нашем mysite/_config.php мы добавим следующий код, чтобы сказать SilverStripe использовать наш собственный журнал в классе:

MySite/_config.php

Object::useCustomClass('MemberLoginForm', 'CustomMemberLoginForm'); 
1

Один из способов сделать это, чтобы переопределить шаблон по умолчанию файл FormAction.ss и добавить класс там:

темы /[имя-тема] /templates/forms/FormAction.ss

<% if $UseButtonTag %> 
    <button class="action btn medium solid" $AttributesHTML> 
     <% if $ButtonContent %>$ButtonContent<% else %>$Title.XML<% end_if %> 
    </button> 
<% else %> 
    <input class="action extra class here" $AttributesHTML /> 
<% end_if %> 
+1

Единственная проблема заключается в том, что '$ AttributesHTML' добавит дополнительный атрибут' class', что приведет к недействительной и неправильной маркировке html. В форме журнала результирующий html представляет собой ''. Это позор, потому что я думаю, что это лучшее решение, если вы хотите добавить эти классы в каждое действие формы. – 3dgoo

Смежные вопросы