Je voudrais aller un peu plus loin en proposant de rajouter un
"panier" pour que les internautes puissent passer des commandes
Quelqu'unE a-t-il déjà fait cela ?
Je ne l'ai pas fait, mais c'est une fonctionnalité qui pourrait
m'intéresser, donc je suis prêt à en discuter (sur la liste spip-dev
bien évidemment).
L'idée serait plutôt de faire un système de bookmarks locaux,
qui permette au visiteur de lister ses articles préférés.
Ensuite, rien de plus simple que d'utiliser ce système pour en faire
un caddie.
L'idée serait plutôt de faire un système de bookmarks locaux,
qui permette au visiteur de lister ses articles préférés.
Oui, ça m'intéresse aussi. En fait il suffirait d'un cookie contenant la
liste des id_article bookmarkés.
Ensuite, dans le squelette, il suffirait d'inclure une fonction php capable
d'afficher la liste des liens vers ces articles-là si le cookie existe. Si
on veut assurer, on peut mettre en cache la relation cookie<->liste des
liens en l'appelant via spip (soit en inclusion de squelette (?) soit par un
lien interne du genre
> > Seul souci, la taille maxi du cookie. Pour des bookmarks c'est pas
> > grave, pçour du commerce électronique, je sais pas...
Est-ce qu'on pourrait se fixer un format commun pour les listes de
bookmarks ? Est-ce qu'on se limite aux articles, ou à tous les objets (via
plusieurs cookies) ?
Format de base : cookie signet_articles = '1,2,3,4,5,19' ? ou bien on
peut passer par un pack()...unpack() qui réduirait un peu la taille du
cookie et le rendrait moins lisible ?
Bon, bah c'est rien à faire : un lien 'ajouter cet article à votre liste'
qui pointe vers #URL_ARTICLE&ajouter_signet=#ID_ARTICLE
Dans article.php3, ou dans le squelette, un test
<?php
if ($ajouter_signet) {
include_local (signets.php3);
ajoute_signet($ajouter_signets);
}
?>
Et, dans signets.php3
<?php
function ajoute_signet ($id) {
// recupère le cookie
...
// decompose le cookie et y ajoute l'article
...
// pose le cookie modifié
...
}
?>
Un peu plus loin dans le squelette - et c'est là que cx'est intéressant - il
faut gérer la boucle qui traite le cookie. Le faire salement, en tapant dans
la base en php, y'a pas de problème. La question est comment le faire sous
forme de boucle spip. Est-ce vraiment nécessaire, vu qu'on est un peu
hors-sujet-spip ? Ranger la chose au coin des trucs et astuces ?
Salement :
<?php
if ($signet_article) {
include_ecrire("inc_connect.php3"); // connecter a la base
$query = "SELECT id_article,titre FROM spip_articles WHERE
id_article in ($signet_article)";
$result = spip_query($query);
while (...) {
etc....// affficher les articles signetés
echo "<br>".typo($titre);
}
}
?>
[...]
Un peu plus loin dans le squelette - et c'est là que cx'est
intéressant - il faut gérer la boucle qui traite le cookie. Le faire
salement, en tapant dans la base en php, y'a pas de problème. La
question est comment le faire sous forme de boucle spip. Est-ce
vraiment nécessaire, vu qu'on est un peu hors-sujet-spip ? Ranger la
chose au coin des trucs et astuces ?
Pour moi ce n'est pas hors sujet, c'est une fonctionnalité vraiment
intéressante, donc une vraie solution SPIP serait un plus.
Pour moi ce n'est pas hors sujet, c'est une fonctionnalité vraiment
intéressante, donc une vraie solution SPIP serait un plus.
Si on passe par une boucle spip, ça veut dire qu'on ne peut utiliser le
cache que si le cookie de panier est absent. Il y aura pas mal d'effets de
bord, donc chiant à programmer. Personnellement, je passe.
> Si on passe par une boucle spip, ça veut dire qu'on ne peut utiliser
> le cache que si le cookie de panier est absent.
A oui, et donc on ne bnéficie plus de la gestion du cache si on
utilise le panier, pas cool.
En gros, toute fonctionnalité "personnalisée" empêche d'utiliser le
cache, à moins qu'on trouve une parade magique.
C'est la même chose avec les sessions. Si on passe par un tag du genre #DEBUT_SESSION_ADMIN#FIN_SESSION_ADMIN on peut avoir le cache. Si on a #DEBUT_PANIER ... #FIN_PANIER aussi. SAUF SI le truc caché dépend du
panier...
La solution passera par l'inclusion de squelette : ton squelette "père" est
en cache ($delai>0), le squelette inclus en cas de panier est en $delai=0.