【问题标题】:how to load category names in drop down list如何在下拉列表中加载类别名称
【发布时间】:2015-01-27 19:36:01
【问题描述】:

我只想在下拉列表中加载主要类别(而不是子类别)名称。我已经尝试了足够多,但无法成功。这个网站上有很多答案,我试图以这种方式解决我的问题,但不能。类别表如下,与 Tree 中的 cakephp 文档相同。

类别表属性

标识 |父ID |左下角|对|名称|

我尝试了以下链接中给出的这些技术 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>

现在请建议我在下拉列表中加载数据的解决方案。

【问题讨论】:

  • 对于未来的问题,请务必提及您的确切 CakePHP 版本!
  • 好的,我会的,cakephp 版本是 2.5

标签: php cakephp drop-down-menu


【解决方案1】:

遵守约定,一切都会好起来的。我假设您需要添加表单中的列表来选择父类别(顺便说一句,您的意图是您应该在问题中阐明的内容)。

如果您想通过lft 订购树,因此如果您使用find('list'),则必须在order 选项中传递它,以便仅检索您将拥有的顶级类别传递一个匹配所有类别的条件,其中parent_idnull(或父类别的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');

有关详细信息,请参阅

【讨论】:

  • 感谢,但实际上我想在用户第一次选择主要类别时只选择主要类别,然后子类别将显示在其他下拉列表中。所以请指导我。
  • @user3623305 这是一个完全不同的问题,与您的初始问题无关。请阅读stackoverflow.com/help/asking
  • 当然,我的第一个问题与我上面的评论不同,在第一个问题中,我要求显示类别,但在您的解决方案中,所有类别和子类别都被显示。这就是为什么我在上面的评论中提到我的观点。所以请指导我在下拉菜单中仅显示主要类别,正如我在问题的第一行中提到的那样。
  • @user3623305 您的问题只说“类别”,“子类别”也是“类别”。您应该更新您的问题以澄清实际问题,以便对未来的读者有用。
【解决方案2】:

你可以放入控制器
$this->loadModel('Category'); $categories = $this->Category->find('list'); $this->set('categories',$categories));

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'=>''));
             ?>

它会起作用的。

【讨论】:

  • 现在在使用您的代码后遇到此错误。在非对象上调用成员函数 input()
  • 在你提到的控制器代码中,我认为 $categories 没有引号,是吗?我用它不带引号。现在错误是 ERROR: Cannot use string offset as a array ,它在第 3 行,即 $id= $value['Category']['id'];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-29
  • 1970-01-01
  • 2015-02-16
  • 2021-09-30
  • 1970-01-01
相关资源
最近更新 更多