LoginSignup
0
0

More than 3 years have passed since last update.

CakePHP上でJavascriptによるタグ機能実装

Last updated at Posted at 2020-04-28

今日やること

  • tag表示(サーバからtagのデータを取得してtag一覧表示)

    • tagsを取得する
  • javascriptで追加tagのデータをサーバに送信

  • tagの送信が終わった後に、コールバックで(tagを再度表示)

CakePHP2でjavascript

  • jshelper(非推奨 CakePHP3からはなくなる)
  • htmlヘルパーで書く方法 HtmlHelper::script(mixed $url, mixed $options)¶

    • webrootにかく
    • 直接書く

htmlヘルパー js

  • $this->Html->scriptStart(array('inline' => false)); $this->Html->scriptEnd(array('inline' => false));
    • javascriptだけで書くの難しいっぽい。調べ不足
  • jsを外部定義する
    • javascriptだけで書けそう

tag表示

done

  • jsでfor文を回して、データ数に応じたセレクトボックスを作成(仮データ)

document.write('<input type="checkbox" name="genre" value="' + value + '" id="genre_' + index + '">');

こんな感じで、javascriptでhtmlを書きたいときは、文字列としてwriteなので書き込む。

document.write('<label for="genre_' + i + '">' + tags[i] + '</label>');

tagがついているものをチェック済みとして表示する

以下のように条件にマッチする場合、inputタグの表示を変えるようにした。

if(Object.values(selected_json).indexOf(String(i))>=0){
        document.write('<input type="checkbox" name="data[tag][]" value="' + i + '" checked="checked" id="Tag' + i + '">');
    }else{
        document.write('<input type="checkbox" name="data[tag][]" value="' + i + '" id="Tag' + i + '">');
    }

学びメモ

PHPからJavaScriptに配列を渡す
json形式に変換した上で受け渡しをする。
https://qiita.com/tksnino/items/c8c542f1f0a7bf9d6031

  • セレクトボックスは、cakephpのformヘルパーのcreateとendの間に記述した。こうすることで、formとしてrequest->dataに保存されサーバに送ることができる。結局、formヘルパーもサーバ上でhtmlに変換されているから、htmlでクライアント側でhtmlを追加しても同じように表示できる。
  • オブジェクトは、値チェックを直接することが難しそう。今回も配列になおしてindexOfで判定している。
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0