-1

私はcakephpで足を濡らし、概念に慣れ始めています。MVCフローを使用してこれを行うための最良の方法を知りたいです。

これが私のdefault.ctpレイアウトだとしましょう:

<body>
<div id="container"><?php echo $this->fetch('content'); ?></div>
<div id="tagcloud"></div>
</body>

私のコントローラーはPostsで、index()アクションを呼び出すと、データベース上のすべての投稿が一覧表示されます。

また、投稿にタグを付けるために各タグが使用された回数でテーブルにアクセスするコントローラータグもあります。

私が必要としているのは、任意のページにあるはずのタグクラウドを生成することです。では、タグクラウドコードはどこに書くべきですか?

私が最初に考えたのは、明らかにタグコントローラーに書き込むことでしたが、タグクラウドをレイアウトに出力するにはどうすればよいですか?

4

2 に答える 2

1

Componentsを使用したい場合があります:

コンポーネントは、コントローラー間で共有されるロジックのパッケージです。コントローラー間で何かをコピーして貼り付けたい場合は、一部の機能をコンポーネントにラップすることを検討してください。

その場合、コンポーネントで使用するモデルをインポートする必要があります。

于 2013-03-06T16:55:47.753 に答える
1

PostsController::index() でこれを行うことができます:

public function index() {

    $this->set('posts', $this->paginate()); // pass a paginated list of posts to the view

    $this->set('tagCloud', $this->Post->tag->tagcloud()); // pass the tag cloud data to the view

}

タグモデルで:

public function tagcloud() {

    $tagcloud = //funky code to build a tagcloud

    return $tagcloud;

}

または、タグ クラウドを要素にパッケージ化することもできます。

/app/View/Elements/tagcloud.ctp:

<?php

$tagCloud = $this->requestAction('/tags/tagcloud');

// code to display your tag cloud in the Tag Model as before.

?>

投稿の index.ctp に次のように挿入します。

<?php echo $this->Element('tagcloud'); ?>

そしてあなたの TagsController で:

public function tagcloud() {

   return $this->tagcloud();

}

前と同じように、タグクラウドを構築するためのロジックをタグモデルに入れます。

于 2013-03-06T17:03:58.970 に答える