Quelque part sur le web j'ai vu un site qui a un script de base "like" pour les billets de blog. J'essaie de le reproduire, je suis juste un peu confus. Voici le code que j'ai pour le frontendComment stocker des votes avec des cookies dans PHP/JS
Javascript REQUIERT jquery
jQuery(document).ready(function() {
function my_reloadLikes(who) {
var text = jQuery("#" + who).html();
var patt= /(\d)+/;
var num = patt.exec(text);
num[0]++;
text = text.replace(patt,num[0]);
jQuery("#" + who).html('<span class="count">' + text + '</span>');
} //reloadLikes
function my_likeInit() {
jQuery(".likeThis").click(function() {
var classes = jQuery(this).attr("class");
classes = classes.split(" ");
if(classes[1] == "active") {
return false;
}
var classes = jQuery(this).addClass("active");
var id = jQuery(this).attr("id");
id = id.split("like-");
jQuery.ajax({
type: "POST",
url: "index.php",
data: "likepost=" + id[1],
success: my_reloadLikes("like-" + id[1])
});
return false;
});
}
my_likeInit();
});
HTML
.like-count .icon {
background-position: 0 -19px;
width: 13px;
height: 11px;
float: left;
margin: 4px 5px 0 0;
}
.like-count a:hover .icon,
.like-count a.active .icon { background-position: -15px -19px; }
.like-count,
.edit-post,
.comment-count {
float: right;
margin: 0 0 0 10px;
}
<li class="like-count">
<a href="#" class="likeThis active" id="like-356">
<span class="count"><span class="icon"></span>
<span class="count">397</span></span>
</a>
</li>
Voici ce que j'ai recueilli jusqu'à présent ...
my_likeInit() fonction
- Ajoute un cliquez sur l'événement à la classe .likeThis
- Enregistre la classe CommeCeci à une variable
- Splits la valeur de .likeThis s'il y a un « » espace, il vérifie pour voir s'il y a une « classe active » attachée à ou non
- Si .active se trouve alors il meurt comme cela a été voté alread/aimé pour
- Dans le cas contraire, il ajoute la classe .active à .likeThis
- ensuite, il obtient l'id = comme- 123number
- Divise et coupe la partie "like-" et obtient le numéro
- Envoyez le numéro d'identification du script PHP comme « likepost = NUMBERHERE
- En cas de succès de la demande AJAX, il exécute les my_reloadLikes() fonction, en passant de la valeur "comme-NUMBERHERE"
my_reloadLikes() fonction
- je vais dans l'habitude, mais vous pouvez le voir, il trouve la div par numéro d'identification et ajoute le nombre et puis met à jour le numéro de la page
Quand je lance Firebug, sous Net/XHR je reçois ce,
têtes de demande
POST: likepost=811
// dans ce cas, j'avais cliqué pour voter id 811 w3tc_referrer=http%3A%2F%2Ftest.testdomain.com%2F%3Ftheme%3Dtest; 795=795; 835=835; 832=832
C'est une sorte de cookie étant mis en place qui semble enregistrer l'identifiant de toutes les choses que je vote/j'aime.
têtes de réponse Set-Cookie 811=811; expires=Sat, 13-Jan-2807 11:04:20 GMT; path=/
Ici, je peux voir l'identification est définitivement en cours d'enregistrement à un cookie. Pour moi, il semble que ce serait son propre cookie, mais au-dessus, il montre plusieurs valeurs dans le cookie, alors sont-ils simplement ajoutés à la fin? Toutes les pièces d'identité sur lesquelles j'ai voté ci-dessus étaient sur la même page, peut-être un cookie par page, j'espère seulement 1 par site ...
C'est donc aussi loin que je suis, je suis essentiellement disséqué le code et je comprends bien tout ce qui précède, maintenant sur le back-end qui sera hors de ma tête et où je besoin d'aide
Ok, quand une page se charge, je vais remplir le nombre similaire à partir d'une base de données MySQL, je sais comment faire le backend d'ajouter les valeurs et obtenir les valeurs pour ce script. La partie cookie est où je suis un peu confus. Je viens de faire un autre test, je vois maintenant que le script enregistre chaque vote dans un cookie séparé, donc si je vote sur 100 éléments, j'ai 100 cookies pour ce site, cela ne semble pas correct?
Y a-t-il un meilleur moyen? Les cookies identifient si j'ai déjà voté et m'empêchent de voter à nouveau jusqu'à ce que mes cookies soient effacés. Ce sera sur un blog wordpress afin que les utilisateurs ne seront pas connectés, donc il n'y a pas beaucoup d'options en dehors de cookies et/ou adresse IP.
Questions
- est-il une meilleure façon de garder une trace des articles que j'ai voté/aimé au lieu d'un cookie pour chaque élément?
- Certains exemples de code PHP pour vérifier un cookie afin que je puisse ajouter une classe "active" aux éléments qui ont déjà voté (basé sur s'ils ont un cookie pour cela)
- Sur un blog wordpress, comment puis-je POST à index.php? Likepost = 1234 ou suis-je mieux de simplement poster sur une page URI différente et faire une connexion DB manuellement au lieu d'utiliser les trucs wordpress?
========= Merci pour toute connaissance sur les questions de biscuits, je me rends compte que je peu rambled là-bas un peu.
Pour répondre # 1, la sérialisation est un excellent moyen de stocker plusieurs entrées de données dans une entité. http://api.jquery.com/serializeArray/. Cependant, je ne ferais pas cela en utilisant des cookies - Ils peuvent être facilement modifiés par l'utilisateur et visser votre logique. – nickb
Alors, comment recommanderiez-vous? Stocker dans DB? – JasonDavis
Je recommande d'enregistrer des votes/aime dans DB. C'est la manière logique. Comme vous le savez, les cookies sont côté client. Vous devriez vérifier auprès de DB si l'utilisateur a voté ou non. – onatm