CakePHP(1.3.6)でサイトを作っている初心者です。

下記の仕様で作成しているのですが、
 1.一覧をクリックするとデフォルトで今月の発売商品の一覧を表示
 2.セレクトボックスで西暦+月のリストから発売月を選択し、発売商品の一覧を表示

1.の場合には、
$html->link("一覧", array('controller' => 'items', 'action' => 'list', date("Y") . date("m")), array('escape' => false), false, false);
で、urlが希望通り items/month/201210 となります。
2.の場合には、
$form->create('item',array('type'=>'post', 'url' => array('action'=>'./list')));
$form->select('ym',array($selectym), null, array('empty'=>'発売年月[選択]'));
$form->submit("/img/search.png", array('class' => "", 'name' => 'nengetu'));
$form->end();
で、選択した年月の商品一覧は表示できるのですが urlがitems/month/ となります。
このurlを 1.と同様の items/month/yyyymm として表示させたいのです。

params['pass']に書き込んだりしたのですが、表示できず悩んでおります。
解決する方法をお知りの方は、ぜひお教えください。

よろしくお願いいたします。

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2012/10/03 20:27:37

ベストアンサー

id:tdoi No.1

回答回数174ベストアンサー獲得回数75

手っ取り早いのは、Cakeの仕組みから離れて、JavaScriptで、selectボックスの変更イベントを拾って、formのactionを書き換えてあげればいいかと。

逆に言うと、Cakeの仕組みだけではできません。やるとすれば、items/month/にアクセスされた際に、そのような状態だとリダイレクトしてやるとかしかないかと。おおよそ、次のような感じですかね。

class ItemsController {
  function list($ym = null)
  {
    if ($ym == null && !empty($this->data['Item']['ym'])) {
      $this->redirect(array('action' => 'list', $this->data['Item']['ym']));
      exit;
    }
    ・・・以下、検索など・・・
  }
}

余談ですが、

$html->link("一覧", array('controller' => 'items', 'action' => 'list', date("Y") . date("m")), array('escape' => false), false, false);


だと、items/month/201210ではなく、items/list/201210ですよね?

id:momotaro2

ありがとうございます。
リダイレクトで対応して希望のURLになりました。
余談のところはその通りです。

丁寧な回答ありがとうございました。

2012/10/03 20:27:29

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません