質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

解決済

1回答

2122閲覧

CakePHP 検索プラグインで

AMK

総合スコア765

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

0クリップ

投稿2016/02/10 08:21

お世話になります

こちらのサイトを参考に
http://14-00.com/archives/5
CakeDC/searchプラグインの実装をしているのですが
行き詰まってしまいどなたかヒントをいただけると嬉しいです。
エラーの内容は下記のとおりです。

error

1Notice (8): Undefined variable: data [APP/View/Tasks/find.ctp, line 8] 2Warning (2): Invalid argument supplied for foreach() [APP/View/Tasks/find.ctp, line 8]

下記が使用しているコードになります。

View /View/Tasks/find.ctp

php

1<section class="section"> 2<table class="table table-striped table-hover"> 3<?php echo $this->Html->tableHeaders(array('登録日','提供元','内容', '予算', 'カテゴリ')); ?> 4<?php foreach ($data as $task){?> 5<?php $urls=$task['Task']['url'];?> 6<?php echo $this->Html->tableCells(array( 7 $this->Time->format($task['Task']['created'],'%m-%d'), 8 $task['Company']['company_name'], 9 $this->Html->link ( $task['Task']['title'],$urls,array( 'target' => '_blank' ) ), 10 $task['Task']['price'], 11 $task['Task']['category'])); 12?> 13<?php }?> 14</table> 15<div > 16 <ul class="pagination"> 17 <?php echo $this->Paginator->prev(__('prev'), array('tag' => 'li'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a')); ?> 18 <?php echo $this->Paginator->numbers(array('separator' => '','currentTag' => 'a', 'currentClass' => 'active','tag' => 'li','first' => 1, 'ellipsis' => '<li class="disabled"><a>...</a></li>')); ?> 19 <?php echo $this->Paginator->next(__('next'), array('tag' => 'li','currentClass' => 'disabled'), null, array('tag' => 'li','class' => 'disabled','disabledTag' => 'a')); ?> 20 </ul> 21</div> 22</section>

Controller /TasksController.php

php

1public function find() { 2 $this->Prg->commonProcess(); 3 4 5 if (isset($this->passedArgs['search_word'])) { 6 //条件を生成 7 $conditions = $this->Task->parseCriteria($this->passedArgs); 8 9 10 $this->set('data', $this->paginate('Task')); 11 }

Model /Task.php

php

1public $actsAs = array('Search.Searchable'); 2 3// 検索対象のフィルタ設定 4public $filterArgs = array( 5 array('name' => 'search_word', 'type' => 'query', 'method' => 'multiWordSearch') 6); 7 8public function multiWordSearch($data = array()) { 9 $keyword = mb_convert_kana($data['search_word'], "s", "UTF-8"); 10 $keywords = explode(' ', $keyword); 11 12 if (count($keywords) < 2) { 13 $conditions = array( 14 //検索対象のフィールド名、適宜変更を行って下さい。 15 $this->alias.'.title LIKE' => '%' . $keyword . '%' 16 ); 17 }else{ 18 $conditions['AND'] = array(); 19 foreach ($keywords as $count => $keyword) { 20 $condition = array( 21 //検索対象のフィールド名、適宜変更を行って下さい。 22 $this->alias.'.title LIKE' => '%' . $keyword . '%' 23 ); 24 array_push($conditions['AND'], $condition); 25 } 26 } 27 return $conditions; 28} 29 public $name = 'Task';

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そのコードでは検索語が指定されている場合にしか$dataがViewに渡りません。
Controller::set()をif文の外に出して必ず呼び出されるようにしてみてください。
一例です↓。

PHP

1// TasksController.php 2public function find(){ 3 $this->Prg->commonProcess(); 4 $options = array( 'limit' => 2 5 , 'order' => array('id' => 'desc')); 6 if(isset($this->passedArgs['search_word'])){ 7 $options['conditions'] = $this->Task->parseCriteria($this->passedArgs); 8 } 9 $this->paginate = $options; 10 $this->set('data', $this->paginate('Task')); 11}

投稿2016/02/12 00:50

編集2016/02/12 01:24
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

AMK

2016/03/12 07:00

遅れまして申し訳ないです。 ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問