0

フォーラム コントローラーに取り組んでいますが、フォーラム カテゴリのドロップダウン選択を生成する際に問題が発生しています。

Forum hasmany ForumCategory (forum_id)
ForumCategory hasmany ForumPost (category_id)
ForumCategory hasmany ForumSubcat (parent_id)
ForumCategory belongs to Forum (forum_id)
ForumPost belongs to ForumCategory (category_id)
ForumSubcat belongs to ForumCategory (parent_id)
Forum belongs to Page (page_id)

ユーザーがフォーラム (モデルは ForumPost と呼ばれます) に新しいスレッドを追加する場合、category_id (ForumCategory) を選択する必要があります。ユーザーがhttp://www.domain.com/forum/add/5にアクセスする場合、category_id は、カテゴリのタイトルが表示された 5 として事前に選択されている必要があります。ユーザーがhttp://www.domain.com/forum/addにアクセスした場合、category_id の選択を解除し、ドロップダウンをデフォルト オプションの [Select a Category] ​​で開始する必要があります。

そのためのコードは

if($category_id){
    echo $this->Form->input('category_id', array('value' => $category_id, 'empty' => 'Select a Category'));
}
else{
    echo $this->Form->input('category_id', array('empty' => 'Select a Category'));
}

$category_id はルートからコントローラー、ビューに渡され、上記のコードは現在機能しています。

選択リストを階層化し、page_id = $page_id のすべてのフォーラムを表示したい (そのため、条件は Forum モデルにある必要があります)。その下に、上記のフォーラムに属するすべてのカテゴリ。その下には、親カテゴリに属する​​すべてのサブカテゴリがあります。次に例を示します。

Select a Category // default option
Help // Forum
--- Announcements // Category
--- Feedback & Suggestions // Category
--- Questions & Support // Category
General Discussion // Forum
--- Games & Polls // Category
--- Introductions // Category
--- Chit Chat // Category
Off Topic // Forum
--- Movies // Category
--- TV // Category
--- Music // Category
-------- Pop // Sub Category
-------- Rock // Sub Category
-------- R&B // Sub Category
--- Games // Category

ユーザーが「オフ トピック」などのフォーラム オプションを選択した場合、選択の ID が null であり、選択がカテゴリまたはサブカテゴリ オプションになるまで、検証によってカテゴリを選択するように指示されるようにする必要があります。

いくつかの方法を試しましたが、この方法では本当にボールを逃しています。

これにより、対応するフォーラムとForum.page_id = $page_id作品の状態によってグループ化されたカテゴリの有効なリストが得られますが、サブカテゴリは親に分類されません。

$this->ForumCategory->find('list', array(
    'fields' => array('ForumCategory.id', 'ForumCategory.title', 'Forum.title'),
    'conditions' => array('Forum.page_id' => $page_id),
    'recursive' => 0
));

これにより、必要な配列が得られますが、選択互換リストにはありません。うまく変換できる方法はありますか、それともこのフィールドにフォーム ヘルパーを使用しない方がよいでしょうか?

 $this->Forum->find('all', array(
    'fields' => array('Forum.title'),
    'conditions' => array('Forum.page_id' => $page_id),
    'contain' => array(
        'ForumCategory' => array(
            'ForumSubcat'
        )
    )
));

StackOverflow に関するこの投稿は最大の助けになりましたが、元の投稿者は質問を更新して、find('all') をリストに変換することを含めていませんでした。

4

0 に答える 0