我想在下拉列表中仅加载主要类别(不是子类别)名称。我已经尝试了但不能成功。这个网站上有很多答案,我试图以这种方式解决我的问题,但不能。下面给出了类别表,它与Tree中的cakephp文档相同。
我尝试了以下链接中给出的这些技巧 How to populate drop-down list with database values in CakePHP
下面给出了创建类别的控制器的完整代码。
if ($this->request->is('post')) {
$this->Category->create();
if ($this->Category->save($this->request->data)) {
$this->Session->setFlash(__('Category has been saved.'));
return $this->redirect(array('action' => 'index'));
}
$this->Session->setFlash(__('Unable to add Category.'));
}
else
$categories = $this->Category->find('list');
$this->set(compact('categories'));
return $this;
}
category.ctp的代码是
<?php echo $this->Form->create('Category'); ?>
<fieldset>
<legend><?php echo __('Add Category'); ?>
</legend>
<?php
$form->input('id');
// echo $this->Form->input('id');
echo $this->Form->input('name');
?>
</fieldset>
<?php echo $this->Form->end(__('Submit')); ?>
</div>
现在请建议我在下拉列表中加载数据的解决方案。
答案 0 :(得分:0)
你可以放入控制器
$这 - &GT; loadModel( '分类');
$ categories = $ this-&gt; Category-&gt; find('list');
$这 - &gt;设置( '类别',$类别));
将category.ctp的代码放在
<?php if(isset($categories )){
foreach ($categories as $key => $value) {
$id= $value['Category']['id'];
$options[$id]=$value['Category']['name'];
}
}
echo $this->Form->select('Category.id', $options,array('class'=>'select2','data- placeholder'=>'Choose a category','empty'=>''));
?>
它会起作用。
答案 1 :(得分:0)
坚持惯例,一切都会好的。我假设您需要添加表单中的列表来选择父类别(您的意图btw是您应在问题中澄清的内容)。
对于您想要按lft
订购的树,所以如果您使用find('list')
,则必须在order
选项中传递该树,并且只需检索顶部您必须在符合parent_id
为null
的所有类别的条件下传递的级别类别(或子类别为“主要”类别的父类别的ID)。
<强>控制器强>
$parents = $this->Category->find('list', array(
'conditions' => array(
'Category.parent_id' => null
),
'order' => array(
'Category.lft' => 'asc'
)
));
$this->set('parents', $parents);
查看强>
echo $this->Form->input('parent_id');
有关详细信息,请参阅