2010-11-01 6 views
0

J'ai un contrôleur d'article modèle &. Je veux avoir une fonction qui ajoute un à un entier quand un lien est cliqué. Donc, j'ai un bouton "J'aime" (lien), il me prend à Articles/thumbsup il prendra alors le champ thumbsup de cet article et l'incrémenter par un, puis enregistrer l'article, et rediriger vers la vue.CakePHP: créer mes propres fonctions

Je ne sais pas comment modifier les enregistrements de cette manière. J'ai besoin de charger l'article, de modifier les données, puis de le sauvegarder.

Mon espoir est que cela soit géré par javascript, donc personne ne verra le changement d'URL.

Quelqu'un peut-il m'aider ici?

Merci,

Jonesy

Merci,

Billy

Répondre

1

Vous pouvez le faire avec un AjaxRequest.

modèles/article.php:

function thumbsup($id = null) 
    { 
    $conditions = array('Article.id' => $id); 
    $this->updateAll(
    array('Article.thumbsup' => 'Article.thumbsup + 1'), 
    $conditions 
    ); 
    $article = $this->find(
    'first', 
    array('conditions' => $conditions, 'fields' => array('Article.thumbsup')) 
    ); 
    return $article['Article']['thumbsup']; 
    } 

contrôleurs/articles_controller.php:

function thumbsup($id = null) 
    { 
    $this->set('count', $this->Article->thumbsup($id)); 
    $this->layout = 'ajax'; 
    } 

vues/articles/thumbsup.ctp:

<?php echo $count; ?> 

Webroot/js/thumbsup .js:

$(document).ready(function() 
    { 
    $('.iLikeSomething').click(function() 
    { 
    $.post('http://yoursite.com/articles/incrementThumbsup/'+this.id, function(data) 
     { 
     $('#iLikeSomethingCount').html(data); 
     }); 
    }); 
    }); 

échantillon Html pour cliquer:

<span class="iLikeSomething" id="insertYourArticleIdHere" style="cursor: pointer;">iLike</span> 
<div id="iLikeSomethingCount">0</div> 
+1

Cela va créer une condition de course et conduire à un dénombrement inexact. Utilisez DB pour incrémenter. – webbiedave

+0

Eh bien, ce serait un meilleur moyen en effet. Je suppose que la seule façon de faire cela via CakePHP est d'utiliser la fonction de requête personnalisée, quelqu'un veut me corriger? – PawelMysior

+0

Comme il s'avère - vous pouvez ajouter des conditions à la fonction UpdateAll(), je ne le savais pas. Edited la réponse avec le bon code. Aussi, il y a quelque chose comme http://bakery.cakephp.org/articles/ketan/2008/05/13/increment-behavior, pourrait vouloir vérifier. Ou au moins créer une fonction dans le modèle, pour garder le code fourni loin du contrôleur. – PawelMysior

Questions connexes