2016-12-07 16 views
0

Silverstripe Display Logic отлично работает на формах в CMS, но я не могу заставить его работать с формами в передней части, в частности, с формами Bootstrap.Логика отображения Silverstripe для форм Front-End/Bootstrap

Он скроет элемент, но не отобразит его, когда применяется логика.

//If the wetsuit dropdown is equal to custom then show the fins numerical field. 

DisplayLogicWrapper::create(NumericField::create("Fins","Fins"))->displayIf("Wetsuit")->isEqualTo('Custom')->end(), 

Я вижу, что он просто нуждается в отображении, чтобы перейти от ни одного к блоку. Есть ли способ сделать это, чтобы он также сохранял состояние на странице? Выпадающее значение будет сохранено как запись БД.

EDIT: Это работает в CMS, но не работает в интерфейсе - Custom является частью значений перечисления.

DropdownField::create("Wetsuit","Wetsuit") 
      ->setSource(singleton('DiveEquipment')->dbObject('Wetsuit')->enumValues()) 
      ->setEmptyString('Select one'), 


NumericField::create('Fins','Fins') 
      ->displayIf('Wetsuit') 
      ->isEqualTo('Custom') 
      ->end(), 

EDIT2: Работа с SilverStripe 3.5, Bootstrap Forms 1.20 и Дисплей Logic 1.0.8

1.0.8 очень устарели, хотя.

+0

Так что, если вы измените значение выпадающего списка 'Wetsuit' на' Custom', поле 'Fins' не будет отображаться? Вы подтвердили, что фактические выпадающие значения содержат «Custom»? Возможно, вам нужно опубликовать свой код для создания раскрывающегося списка. – bummzack

+0

Правильно да. Он будет отображаться в CMS, но не в интерфейсе. Значение содержит 'Custom'. Я вижу, что в передней части есть ошибки JS. Обновит OP. – Craig

+0

Я думаю, вам нужно включить entwine ... – bummzack

ответ

0

Я не думаю, что вам нужно DisplayLogicWrapper для большинства полей ... Оно предназначено для полей, таких как UploadField.

Вы пробовали это?

NumericField::create('Fins','Fins') 
    ->displayIf('Wetsuit') 
    ->isEqualTo('Custom') 
    ->end(), 
+0

Извините, я должен был упомянуть, что я пробовал с и без 'DisplayLogicWrapper' – Craig

0

Не вопрос здесь, но стоит отметить, что ошибка существует в Display Logic 1.3 и ниже, где существуют пользовательские шаблоны в/шаблоны/не/шаблонов/форм /, вызывающих вопросы, очередностью.

Если у вас возникли проблемы с полевой группой, не отображающей правильный шаблон или еще что-то. Модернизация до Logic версии 1.4 решит это.

+0

Просто примечание об этом. Я отказался от версии 1.0.8 Display Logic, и он работает. Он не использует традиционную тему загрузки, но тем не менее работает. Так работают SilverStripe 3.5, Bootstrap Forms 1.20 и Display Logic 1.0.8. Довольно устаревшая, но, похоже, для меня работает – Craig

+0

Бьюсь об заклад, если вы скопировали элементы Bootstrap из нее: https://github.com/unclecheese/silverstripe-display-logic/tree/1.0.8/templates К вашим темам/{mytheme} и обновлен до последней версии DisplayLogic. У вас будет последняя версия и все работает. Кажется, у более старой версии была встроенная поддержка Bootstrap. – SilbinaryWolf

0

Для этого вам нужно включить jQuery и jQuery Entwine для работы с интерфейсом. Это не проверено, но должно решить вашу проблему.

class Page_Controller extends ContentController { 
    public function init() { 
     parent::init(); 
     Requirements::javascript(THIRDPARTY_DIR . '/jquery/jquery.js'); 
     Requirements::javascript(THIRDPARTY_DIR . '/jquery-entwine/dist/jquery.entwine-dist.js'); 
    } 
} 
+0

Спасибо, они оба включены уже хотя. Я вижу их в источнике страницы. – Craig

+0

Какой заказ они включают? Дисплей логики должен быть после jQuery и jQuery Entwine. – SilbinaryWolf

+0

Заказ - Jquery 1.11.3, Bootstrap Forms, Jquery Entwine, Display Logic. Использование JQuery 1.12 бросает ошибки JS. Использование 1.11.3 не вызывает никаких ошибок, но все равно не работает. – Craig