User、Tweet、Followのテーブルを作成しており、
ユーザー名を検索して、
結果を表示し、
ログインしているusernameを検索として出てきた、User.usernameが、
既にfollowしているならボタンを表示せず、
フォローしていないならfollowボタンを表示、
押したら、followし、表示を非表示にするプログラムを作成してるのですが、
なかな機能実装することができず、困っています。
現在、
UserとTweetをhasManyのアソシエーションにしており、
ビューにて、
ユーザーネームと一番新しいtweetを表示しており、
そこに、followボタンを設置している状況です。
追記しました。
かなり、色々試したので、
コードがひどいと思いますが、
よろしくお願いいたします。
cakephp2.×を仕様しています。
理想は
viewで$data['User']['username']を値として渡せば、
わかる関数を作成し、帰ってきた値で、
このユーザーはfollowしているか、していないか。分かるのが一番理想です。
現在のプログラムだと、
foreach文で、以下のプログラムで
followボタンを表示させています。
その後、コントローラにて、
postされたら、データベースに保存し、
findにリダイレクトで返すプログラムにしているのですが、
下記のプログラムが、リダイレクトした後も、saveし続けており、
$this->Follow->save($this->request->data['Follow'])
データベースには登録しているものの、
確認してみてもfollowボタンが表示されているという状態です。
---contoroller---
cakephp
1public function find($searchname = NULL){ 2 $this->loadModel('Tweet'); 3 $this->loadModel('Follow'); 4 5 $data=$this->User->find('all',array('conditions' => array('or' => array( array("User.name like '%$searchname%'"),array("User.username like '%$searchname%'"))))); 6 7 $follows = $this->Follow->find('all',array('conditions' => array('Follow.follow' => AuthComponent::user('username')))); 8 9 //$da = $this->User->find('all',array('conditions' => array('User.username'=>$follows['follow']))); 10 11 if(empty($data)){ 12 $this->Session->setFlash('対象のユーザーは見つかりません。'); 13} 14 $this->set('searchname', $searchname); 15 $this->set('username',$this->Auth->user()); 16 $this->set('userdata',$data); 17 $this->set('follows',$follows); 18 19if($this->request->is('post')){ 20 if(isset($this->data['Search']['title'])){ 21 $search = $this->request->data['Search']['title']; 22 $this->redirect(array('action'=>'find', $search));} 23 24 else if($this->Follow->save($this->request->data['Follow'])){ 25 //$this->requset->deleteAll($data['Follow']); 26 $this->redirect(array('action'=>'find', $searchname));} 27 28} 29}
--view find.ctp--
cakephp
1<?php echo $searchname; ?> 2<?php if($searchname==NULL):?> 3検索結果 4<?php else: ?> 5の検索結果 6<?php endif; ?> 7 <br/> 8<?php 9 echo $this->Form->create('Search'); 10 echo $this->Form->input('title',array('label'=>'')); 11 echo $this->Form->end('検索'); 12 ?> 13 14ユーザー名や名前で検索<br /> 15<?php echo $this->Session->flash(); ?> 16 <?php 17 foreach ($userdata as $data){ 18 if(empty($data)): 19 echo print(h("データが見つかりませんでした。")); 20 else: 21 echo $this->HTML->link($data['User']['username'],array('action'=>'mypage')); 22 echo("<br>"); 23 echo nl2br($data['joinTweet'][0]['tweet']); 24 echo("<br>"); 25 echo($data['joinTweet'][0]['tweettime']); 26 echo("<br>"); 27 //if($follows !=NULL): 28 $count = 0; 29 foreach ($follows as $searchcheck){ 30 31 if(($searchcheck['Follow']['follower']==$data['User']['username'] || ($data['User']['username'] == $username['username']))): 32 $count++; 33 //if(($searchcheck['Follow']['follower']==$data['User']['username'])): 34 else: 35 //if($data['User']['username']==$searchcheck['Follow']['follow']): 36 37 endif; 38 39 if($count == 0): 40 echo $this->Form->create('Follow'); 41 echo $this->Form->hidden('follow',array('value'=>$username['username'])); 42 echo $this->Form->hidden('follower',array('value'=>$data['User']['username'])); 43 echo $this->Form->end('follow'); 44 $count++; 45 endif; 46 } 47 echo("<br>"); 48 endif; 49 } 50 ?>
回答2件
あなたの回答
tips
プレビュー