[spip-dev] Re: [Spip] Je voudrais aller plus ploin avec SPIP

Hello,

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.

-Nicolas

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

<? echo file(http://monsite/affichelienscookie.php3?cookie=$lecookie") ?>

Seul souci, la taille maxi du cookie. Pour des bookmarks c'est pas grave,
pçour du commerce électronique, je sais pas... à tester

-- Fil

Oui, ça m'intéresse aussi. En fait il suffirait d'un cookie
contenant la liste des id_article bookmarkés.

Ou même juste un id d'utilisateur (tiens, voilà que votre boulot des
derniers jours a une nouvelle utilisation), la liste étant stockée en
base ...

Cela permettrait par exemple de faire des statistiques sur les
articles les plus bookmarkés ... :wink:

Seul souci, la taille maxi du cookie. Pour des bookmarks c'est pas
grave, pçour du commerce électronique, je sais pas...

Si on stocke la liste dans un cookie, il faut vraiment bien remplir le
caddie pour exploser le cookie ...

-Nicolas

Ou même juste un id d'utilisateur (tiens, voilà que votre boulot des
derniers jours a une nouvelle utilisation), la liste étant stockée en
base ...

Non, car tu ne peux plus cacher la chose sans mettre ces données dans la
session. Overhead sans intérêt autre que...

Cela permettrait par exemple de faire des statistiques sur les
articles les plus bookmarkés ... :wink:

... le flicage.

> Seul souci, la taille maxi du cookie. Pour des bookmarks c'est pas
> grave, pçour du commerce électronique, je sais pas...

Si on stocke la liste dans un cookie, il faut vraiment bien remplir le
caddie pour exploser le cookie ...

Au pire tu poses autant de cookies que nécessaire, par paquets de 100 items
notés.

-- Fil

> > 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 ?

-- Fil

Est-ce qu'on pourrait se fixer un format commun pour les listes de
bookmarks ?

Ce serait bien.

Est-ce qu'on se limite aux articles, ou à tous les objets (via
plusieurs cookies) ?

A mon avis, on limite aux articles.

Format de base :
cookie signet_articles = '1,2,3,4,5,19' ?

Oui.

ou bien on peut passer par un pack()...unpack() qui réduirait un peu
la taille du cookie et le rendrait moins lisible ?

Bof.

-Nicolas

> cookie signet_articles = '1,2,3,4,5,19' ?
Oui.

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);
        }
    }
?>

-- Fil

[...]
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.

-Nicolas

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.

-- Fil

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.

-Nicolas

@ Nicolas Hoizey <nhoizey@phpheaven.net> :

> 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.

-- Fil