【发布时间】:2017-09-18 17:06:01
【问题描述】:
我有一个过滤器表单,我想将其应用于多选下拉菜单。因此,过滤器有一个“应用”按钮,单击它时,我想根据过滤器选择更新下拉列表中的值。 (我的表单上还有其他字段/值在更新下拉值时不应消失。)
我完全不知道如何实现这一点。也许 AJAX 功能会导致解决方案,但我不知道这样的功能会是什么样子。我会很高兴任何提示! :)
到目前为止我所拥有的:
过滤下拉列表
市场
类型和
航空公司
它们都是多选下拉菜单。选择它们后,我想点击“应用”,然后“文档列表”下拉列表应该更新,以便只显示与所选市场/类型或航空公司相关的文档。
附:另外,我喜欢实现的是文档名称和 ID 的搜索框。对此我什至没有接近,我什至没有正确的元素..
<div class="panel panel-default">
<div class="panel-body">
{{ form_start(filterForm) }}
{{ form_row(filterForm.type) }}
{{ form_row(filterForm.markets)}}
{{ form_row(filterForm.airlines)}}
<input type="submit" class="btn-primary btn btn-xs" value="Apply Filter" />
{{ form_end(filterForm) }}
<br clear="all" />
{{ form_row(form.documentlist) }}
</div>
</div>
更新
我的表格:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->setAction($options['data']['url'])
->setMethod('GET')
->add('type', 'choice', array('choices' => array(
'document_types.contract' => 1,
'document_types.general'=>2,
'document_types.goodwill_policy'=>3,
'document_types.pricesheet'=>4,
'document_types.yq_update'=>5,
'document_types.contract_addendum'=>6),
'choices_as_values' => true, 'label' => 'label.types',
'expanded' => false, 'multiple' => true,
'label' => 'label.type',
'translation_domain' => 'Documents'))
;
$user = $this->tokenStorage->getToken()->getUser();
$builder->addEventListener(FormEvents::PRE_SET_DATA, function (FormEvent $event) use ($user){
$form = $event->getForm();
// only show specific filters based on user's context
$form->add('airlines', 'entity', array(
'class' => 'AppBundle:Airline', 'property' => 'id',
'query_builder' => function (EntityRepository $er) use ($user) {
$airlines = $user->getAirlines();
return $er->createQueryBuilder('a')
->addOrderBy('a.id', 'ASC')
->andWhere('a.id IN (?1)')
->setParameter(1,$airlines);
},
'choice_value' => 'id',
'choice_label' => 'id', 'label' => 'label.airlines',
'expanded' => false, 'multiple' => true,
'translation_domain' => 'Documents'));
$form->add('markets', 'entity', array(
'class' => 'AppBundle:Market', 'property' => 'id',
'query_builder' => function (EntityRepository $er) use ($user) {
$markets = $user->getMarkets();
return $er->createQueryBuilder('m')
->addOrderBy('m.id', 'ASC');
->andWhere('m.id IN (?1)')
->setParameter(1,$markets);
},
'choice_value' => 'id',
'choice_label' => 'id', 'label' => 'label.markets',
'expanded' => false, 'multiple' => true,
'translation_domain' => 'Documents'))
这就是下拉菜单,它应该在选择之前的下拉菜单后更新其内容。
->add('documentlist', EntityType::class, array(
'class' => 'DocumentBundle:Document',
'property' => 'name',
'expanded' => false, 'multiple' => true,
'label' => 'label.document_list',
'empty_value' => "Select document",
'required' => false,
'mapped' => false,
'translation_domain' => 'Documents'} ));
}
【问题讨论】:
-
你必须有比这个 Sonja 更多的代码。你的过滤器是复选框吗?如果是这样,请使用 jQuery 或普通的旧 Javascript 来检测过滤器复选框的 onChange,然后更新下拉列表。如果不显示更多表单代码,就很难提供更多建议。
-
当然还有更多代码!但我不知道哪些部分会帮助你?我说“它们都是多选下拉菜单”:) 所以我想我可以使用 jQuery,但我不知道 onChange 函数会是什么样子!
-
如果您复习了之前的一些问题,并在正确答案旁边打勾,那就太好了。我看到你只检查了一个问题。
-
(就我个人而言,如果有人给了我 90% 的解决方案,我会给他们打勾,然后添加我自己的答案来构建它,但这只是我)。
-
好的,抱歉。我是这里的超级新手,所以我不知道,但现在我知道了:)
标签: ajax symfony filter dropdown