Skip to main content Help Control Panel

 

support «   Besoin d'aide «  

Liens "intelligents" entre pages

PreviousNextIndex

OwnerJmarc
Progress0%
WorkflowSupport request
StatusProblem has been recorded
  • Submission on Mar. 24 2010 by Jmarc

Je cherche à "tirer des liens" entre des pages qui seraient ensuite listés automatiquement.

Je m'explique avec un exemple. J'ai :

  • des pages parlant de produits (une page par produit)
  • des pages parlant de revendeur (une page par revendeur)

Tout d'abord, lorsque je crée une page "produit", j'aimerais pouvoir indiquer les revendeurs qui vendent ce produit, par exemple, en allant les désigner dans la liste de tous les revendeurs.
Je dois ensuite afficher la liste des revendeurs de ce produit dans la page de mon produit (avec le lien vers la page parlant du revendeur).

D'autre part, lorsque je me rends sur la page d'un revendeur, j'aimerais inclure automatiquement dans la page la liste des produits qui ont "désignés" ce revendeur.

Avant de me lancer dans le développement de code spécifique, je me demande s'il n'y a pas moyen d'obtenir cela avec les possibilités offertes par Yacs.

Avec les catégories peut-être ?

 




Jmarc
on Apr. 15 2010

Ben mince alors... Je suis en train de réaliser que la fonction après laquelle je cours pour établir des liens entre mes pages Yacs, et bien, elle existe déjà en bonne partie dans Yacs !

En effet, Yacs propose d'ajouter des liens (url) à une page. Ces liens peuvent être du type [section=1234].

Dans ce cas, yacs remplie le reste des champs (titre, description) avec le titre de la page et son introduction.

J'ai donc l'essentiel du fonctionnement :

  • le lien dans la boite "outil" pour proposer d'ajouter un lien
  • le contrôle des droits du surfeur
  • tout ce qu'il faut pour supprimer ou modifier le lien
  • la table de stockage des infos (yacs_links)

Bon, cela oblige à connaître et à renseigner le numéro id de la page mais cela reste acceptable.

Par contre, je remarque que le titre et le résumé de la page sont stockés en dur dans la table "links" donc ils ne seront pas modifiés si le titre ou l'introduction de la page liée sont modifiés...

m'en vais faire un petit tour dans le code qui gère les liens pour l'adapter à ma sauce


Alexis Raimbault
on Mar. 26 2010

"

ça veux dire un overlay systèmatique sur chaque section "

Aie. J'ai déjà des sections qui ont un overlay (fiche produit) et je ne crois pas que l'on puisse empiler 2 overlay pour une même page...
"

tu peux utiliser aussi le calibre au dessus : view_as_foo_bar

dedans tu mets tout ce qui est systématique à tes pages, tandis que dans les overlay tu mettrais ce qui est spécifique à un type de page.

@christian : j'ai pas encore regardé ton overlay pour chéri FM. Mais ici on se noie dans les infos. Tu devrais peut être nous le présenter dans un sujet dédié.




Alexis Raimbault webmaster free-lance
Jmarc - on Mar. 26 2010

Alexis :

" tu peux utiliser aussi le calibre au dessus : view_as_foo_bar
dedans tu mets tout ce qui est systématique à tes pages, tandis que dans les overlay tu mettrais ce qui est spécifique à un type de page.
"

C'est parfait !

Christian - on Mar. 26 2010

Alexis Raimbault : j'en ai parlé ici car j'ai pensé que ca pourrait servir à Jmarc. sinon c'est par là :C_categories




Actupro
quelques sites yacs : création site internet annuaire pro

Jmarc
on Mar. 25 2010

Christian :

" Et bien non justement c'est l'intéret. tu peux mettre produit ou revendeur si tu en as envie "

Alors c'est tout bon

Merci pour le tuyau.


Jmarc
on Mar. 25 2010

Alexis :

" Peut être tu pourrais stocker ton paramètre dans un nouvel index de la variable $context. Cela t'éviterais de completer toutes les urls des pages traversées. "

Très bonne idée !!!

" Par contre pourquoi une liaison dans les deux sens ? Le produit est lié au revendeur c'est tout. "

Moi, un seul enregistrement liaison dans un seul sens, ça me va parfaitement. Je pensais, après avoir lu Christian, qu'il fallait les laisons dans les 2 sens pour pouvoir utiliser les fonctions de members...

 


Christian
on Mar. 25 2010

pour appuyer le propos d'Agnès. Quelqu'un a-t-il regarder mon overlay et son exemple d'utilisation sur l'agenda de Chérie FM. J'utilise moi aussi les catégories

A noter aussi que pour associer 2 éléments dans la table members il faut insérer 2 lignes




Actupro
quelques sites yacs : création site internet annuaire pro
Jmarc - on Mar. 25 2010

Christian :

" A noter aussi que pour associer 2 éléments dans la table members il faut insérer 2 lignes "

je suppose que c'est une première ligne pour lier la page A à la page B et une seconde ligne pour lier la page B à la page A...

Donc on double le nombre de ligne et on perd la notion "d'orientation" du lien (d'une page "fille" vers une page "mère")... Pas top

Une autre chose qui me chagrine avec la table members c'est qu'il me manque un champ pour pouvoir mémoriser le type de lien (par exemple, indiquer que ce lien concerne un revendeur, ou produit, etc) ce qui peut s'avérer utile (pour regrouper les liens par type par exemple).

Il y a bien un champ member_type mais j'ai l'impression qu'il faut obligatoirement y mettre section dans mon cas


Agnès Rambaud
on Mar. 25 2010
Juste pour info (à ce fil fleuve) : on peut très bien mettre une catégorie en onglet ! Voir gresivaudan.org : annuaire. C'est une catégorie qui est affichée...

J'ai pas tout tout saisi, mais quand même les catégories me semblent vraiment les plus appropriées.


Agnès
Il n'y a pas de problèmes, que des solutions.
Alexis Raimbault - on Mar. 25 2010

Agnès Rambaud :

oui on peut mettre manuellement ce qu'on veut dans les onglets.

Par contre dans ce cas pour continuer d'utiliser topfocus (la mise en évidence de l'onglet actif lorsque des pages inférieures sont affichées) c'est plus délicat.




Alexis Raimbault webmaster free-lance

Jmarc
on Mar. 25 2010

Alexis :

" il faut que tu puisse aussi revenir en arrière et supprimer une association "

ah oui tiens. J'avais pas pensé à ça.

Je peux faire comme sur mon site actuel : à coté du lien vers la page liées, j'ajoute une icône pour poubelliser le lien (après confirmation et vérification des droits du surfeur).

" comment tu fais le lien entre la page de départ et la page cible, sachant que d'après ta description on atteint pas la cible au premier clic. "

En fait, il n'est même pas nécessaire d'ouvrir une nouvelle fenetre. Lorsque le surfeur clique sur le lien pour définir un lien vers une autre section -->

propagation du parametre de retour

j'arrive sur la section des revendeur avec l'url : /section/view.php?id=456&id_retour=123

le view.php détecte la présence du parametre id_retour qu'il transmet à la fonction get_url pour que les url pointant vers d'autres pages disposent également du &id_retour=123

Traitement du retour

View.php, après avoir détecté la présence du parametre id_retour, ajoute dans le panneau extra un lien qui amène à une page PHP chargée d'enregistrer dans la table members le lien entre la section 456 et la section 123 puis qui redirige vers la page de départ (123) qui est alors mise à jour pour afficher le nouveau lien vers la section 456 

Alexis Raimbault - on Mar. 25 2010

Jmarc : j'ai toujours pas tout à fait compris.

J'ai l'impression que pour générer un lien vers une autre page, il doit cliquer sur un lien vers la page cible. Donc le lien existe déjà ?




Alexis Raimbault webmaster free-lance

Jmarc
on Mar. 25 2010

Alexis :

" ça veux dire un overlay systèmatique sur chaque section "

Aie. J'ai déjà des sections qui ont un overlay (fiche produit) et je ne crois pas que l'on puisse empiler 2 overlay pour une même page...
Mais peut-être qu'il suffit que j'ajoute le code cet overlay dans tous mes overlays existants

" La commande donne sur une page identique à celle qui chaine aux catégories, sauf que dans les choix tu as tout remplacé par des sections "

heu, là, j'ai pas compris... tu veux dire que j'arrive sur une page dédiée qui liste toutes mes sections sous forme d'arborescences de lien qu'il me suffit de cliquer pour créer le lien ?

Là, effectivement, avec mes 12 000 pages, le chargement risque d'être un peu long (et la navigation pas évidente... quoi qu'avec des arborescences dépliables, ça serait correct). Surtout que je compte sur yacs pour multiplier par 10 le nombre de pages gérées

C'est pour ça que l'idée de laisser le surfeur se balader normalement sur le site pour trouver et désigner la page qu'il veut lier me plait bien.

Une autre solution bien plus simple consisterait à lui demander de saisir le numéro de la page qu'il veut lier... (pas top ergonomique mais rapide, simple et efficace)

" de même que dans une section l'overlay permet de s'associer à une autre, dans l'autre il va permettre de lister les pages associées. "

oui, ça c'est malin ! Comme le fait aujourd'hui la boite des catégories qui propose le lien pour ajouter une catégorie tout en listant les catégories déjà liées. 

Alexis Raimbault - on Mar. 25 2010

Jmarc :

" heu, là, j'ai pas compris... tu veux dire que j'arrive sur une page dédiée qui liste toutes mes sections sous forme d'arborescences de lien qu'il me suffit de cliquer pour créer le lien ? "

je parle d'une page identique à /categories/select.php, mais détournée pour viser les sections.

peut être un petit bout d'ajax pour appeler l'aborescence tronçon par tronçon, à mesure que l'on clic sur les répertoires, limiterait la masse de sections présentées.




Alexis Raimbault webmaster free-lance

Christian
on Mar. 25 2010

Mais tof il me semble que l'on peut associer tout ce qu'on veut dans la table members même des objets que ne sont pas forcément issue de yacs.

A titre d'exemple je viens de mettre rapidement un overlay c_categories (comme choix catégorie) à disposition dans Overlays

Merci pour vos retours




Actupro
quelques sites yacs : création site internet annuaire pro
Christophe Battarel - on Mar. 25 2010
"

Mais tof il me semble que l'on peut associer tout ce qu'on veut dans la table members même des objets que ne sont pas forcément issue de yacs.

"

tout à fait christian, à condition de savoir programmer et de connaitre son yacs sur le bout des doigts...

le top serait de pouvoir le faire directement depuis yacs.




Christophe Battarel - Société altairis -

Alexis Raimbault
on Mar. 25 2010

JM : users liés aux sections en étant éditeur, oui.

Pour le reste, tu utilises déjà dans ton modèle uniquement des sections, pour pouvoir toujours chainer en dessous.

On dirait qu'il va te falloir apprendre aux sections à devenir membre d'une autre.

ça veux dire un overlay systèmatique sur chaque section, qui ajoute ces fonctions :

  • ajout en outil extra-box d'une commande pour devenir membre d'une autre section. La commande donne sur une page identique à celle qui chaine aux catégories, sauf que dans les choix tu as tout remplacé par des sections
  • l'info est stockée dans la table member. Bien étudier le modèle en place.

de même que dans une section l'overlay permet de s'associer à une autre, dans l'autre il va permettre de lister les pages associées.

pour cela il faut surcharger get_view_text ou autre, détourner une des fonctions de listage de la classe members pour trouver les sections membres d'une autre donnée par son id.

donc pour résumé deux fichiers :

  • un overlay
  • une page d'association de sections aux sections.

par contre comme tu as 12000 pages, à réflechir l'ergonomie de ta page d'association... et la requête qui va avec.




Alexis Raimbault webmaster free-lance

Christophe Battarel
on Mar. 25 2010

JMarc a dit :

"

Sauf que j'imagine que cela impose quelques limitations. J'en ai déjà identifié 2 :

 - on ne peut pas gérer en masse les catégories comme les sections ou les articles (c'est inconfortable mais ce n'est pas bloquant).

- on ne peut pas afficher certaines catégories et leur sous-catégories comme des sections rattachées à la base (et donc avec l'onglet correspondant).

"

en fait, tu fais émerger un vieux serpent de mer qui pose la question de la différenciation article/catégorie/section/utilisateur/etc que j'avais initié ici : Définition d'une entité mère aux sections, articles, etc...

Il serait en effet utile de pouvoir lier n'importe quelles entités entre elles via la table members, et pouvoir également bénéficier pour chaque entité des fonctionnalités des autres entités; par exemple, pouvoir avoir un article contenant d'autres articles, ...

Yacs a une structure qui pourrait gagner à être assouplie.




Christophe Battarel - Société altairis -
Jmarc - on Mar. 25 2010

Christophe : sus au serpent de mer ! clap

En attendant, une autre idée...
Dans une boite extra placée sur ma page produit (section-123-mon-produit-x par exemple), je mets un lien qui ouvre, dans une nouvelle fenêtre, la page des revendeurs en passant en paramètre l'id de la page de mon produit (exemple de lien : /section-456-les-revendeurs/id_retour-123 )

Il faudrait que lors de la construction d'une page, la présence de ce paramètre (/id_retour-123 ) dans l'url, indique qu'il faut rajouter un lien "Lier cette page à mon produit X"(en haut du panneau extra, par exemple) qui permet :

  • d'enregistrer en base le lien entre la page choisie et la page de mon produit
  • de fermer la fenêtre en cours (celle du revendeur)
  • de rafraichir la page du produit (pour afficher le nouveau lien vers le fournisseur)

Il faut également que je m'arrange (via les fonctions get_url...) pour que le paramètre avec l'id de ma page produit (/id_retour-123 ), soit transmis lorsque le surfeur va se balader dans les pages des revendeurs afin que toutes ces pages affichent le lien "Lier cette page à mon produit X".

Les avantages de cette méthode :

  • pas besoin de gérer les catégories en parallèle
  • je peux lier n'importe qu'elle page de mon site avec une autre
  • je peux envoyer le surfeur sur la partie du site approprié (par exemple, la section des revendeurs s'il s'agit d'une page produit) alors que pour attribuer une catégorie, il faut dérouler toute la liste (plusieurs milliers de lignes dans mon cas )

En fait, cela revient à permettre à l'utilisateur de créer un lien hypertexte sans devoir manipuler d'adresse url. Il lui suffit de naviguer sur le site dans une fenêtre ouverte en parallèle


Alain Lesage
on Mar. 25 2010

Merci Alexis, Merci Tof.

J'avais bien compris qu'il s'agissait d'une fonction d'une classe, dans un fichier yacs. Je n'étais pas certain que ce fichier aurait toujours exactement le même nom que la classe (je comprends des remarques d'Alexis que c'est le cas) et je ne savais pas où le trouver. Me voici éclairé.

Jmarc : créer un onglet qui mène à une catégorie est possible par un template de skin, mais ça ne fait peut-être quand même pas ce que tu recherches.


Jmarc
on Mar. 25 2010

Merci à tous pour vos réflexions et suggestions.

Pour illustrer ma demande, j'ai pris cet exemple de produit - fournisseur mais le besoin  s'applique également à d'autres "objets" : membre, petite annonce, emplacement(localisation), compte-rendu, etc. L'idée étant de pouvoir lier "une page" à une autre.

Par exemple, un article qui rend compte de l'essai d'un produit pourra être lié :

  • A la page du produit testé
  • à la page du revendeur qui a fourni le produit
  • aux pages de membres qui ont testé le produit
  • à la page emplacement qui décrit l'endroit où le test a été réalisé

On sent bien qu'il y a une notion de catégorie sauf que celle-ci est également une page d'information a part entière. Ca tombe bien, yacs permet de mettre du contenu dans une page "catégorie" de la même manière que dans une page article.

Donc, pourquoi pas créer mes pages produit, revendeur, etc sous forme de catégorie, comme suggéré par Alexis.

Sauf que j'imagine que cela impose quelques limitations. J'en ai déjà identifié 2 :

  • on ne peut pas gérer en masse les catégories comme les sections ou les articles (c'est inconfortable mais ce n'est pas bloquant).
  • On ne peut pas afficher certaines catégories et leur sous-catégories comme des sections rattachées à la base (et donc avec l'onglet correspondant).

Ce deuxième point est plus problématique dans mon cas. Je peux toujours créer une vraie section (qui va me créer l'onglet) et y mettre le code indiqué par Alexis... mais une fois que l'on aura cliqué sur une de ses sous-catégorie, on se retrouve dans la page catégorie qui n'est plus "associée" à mon onglet de départ (le surfeur va penser qu'il est parti ailleurs )

Reste l'autre option qui consiste à gérer mes "objets" dans des pages "normales" et de gérer mon arborescence de catégorie en parallèle. Mais là, il faut coder quelques chose pour que les nouvelles catégories se crées automatiquement chaque fois qu'un nouveau revendeur est créé.

Idem lorsque le titre de la page d'un revendeur est modifié ou qu'un revendeur est supprimé.

Pour la solution à base de page "membre", je n'ai pas compris comment un membre était  associé à une page
Faut-il pour cela l'ajouter dans la liste des éditeurs ?


Alexis Raimbault
on Mar. 25 2010

tir croisé avec Tof !

revendeur comme utilisateur. Ouaip, on peut stocker les coordonnées et tout ça dans la "carte de visite".

le lien entre les pages (sections pour JM) et utilisateurs se ferait en assignant les sections-produits aux utilisateurs-revendeurs. Après il faut peut être adapter le layout qui liste les sections.




Alexis Raimbault webmaster free-lance

Alain Lesage
on Mar. 25 2010

Wow ! Alexis, tu es génial !

Et en plus tu révèles le génie de Yacs avec des explications limpides. Merci.

Tout en suggérant une solution au problème de Jmarc, tu m'offres, à moi aussi, une solution pour un défi bien distinct. Mais comme j'en suis encore à mes balbutiements en programmation PHP, pourrais-tu me « partir » dans la rédaction d'un overlay qui fait un safe:redirect pour les non-associés, en m'indiquant où trouver le code qui décrit cette fontion (safe:redirect). Merci.

Alexis Raimbault - on Mar. 25 2010

Salut Alain,

bon j'ai fait qu'une suggestion. Il y a peut-être un os sur le chemin...

Concernant safe::redirect, cela veut dire la fonction "redirect" de la classe "safe".

dans yacs, toutes les classes sont dans un fichier php du même nom, donc ici safe.php. Easy !

Mais il n'y a pas de répertoire "safe". Il s'agit d'une classe "outil", surtout de manipulation de fichiers, mise à disposition par yacs (Yacs en tant que framework). Le fichier est rangé dans le répertoire /shared, comme tout ce qui est global au serveur.

Pour la suite, ouvre plutôt un autre sujet !




Alexis Raimbault webmaster free-lance
Christophe Battarel - on Mar. 25 2010

Alain Lesage : tu trouveras le code du Safe::redirect dans shared/safe.php qui contient tous les appels systemes de Yacs.




Christophe Battarel - Société altairis -

Alexis Raimbault
on Mar. 25 2010

tu peux modéliser ton comportement avec le mécanisme suivant :

  • une page par produit
  • une catégorie par vendeur
  • les pages produits sont associées aux catégories représentant leurs vendeurs. Les pages vendeurs listent naturellement les produits.

maitenant le fait que la page vendeur soit une catégorie ne te convient peut être pas ?

  • crée aussi une page par vendeur, rangée dans les sections
  • dans cette page vendeur, tu affiches le listage de la catégorie vendeur par un code yacs (published.layout=category:id)
  • a verifier si le code liste les sections (puisque dans ton modèle tu n'utilises pas l'article, pour d'autres raisons) (*)

maintenant tu as une page vendeur en double...

  • tu peux mettre un overlay sur la catégorie qui fera un safe::redirect vers la page vendeur pour les surfeurs non-associé. L'id de la page vendeur étant un paramètre de l'overlay
  • ou bien peut-être plus propre, tu donne à la catégorie vendeur et à la page vendeur le même surnom, et tu créés un view_as_foo_bar pour les catégories qui feront un safe::redirect vers la section du même surnom si elle existe (toujours uniquement pour les non-associés, de manière à pouvoir gérer la page)

(*) : si le code yacs ne liste pas les sections liées à la catégorie, il faudra un overlay sur la page vendeur pour faire le boulot.

C'est fou tout ce qu'on peut faire faire à Yacs sans toucher le source !




Alexis Raimbault webmaster free-lance

Alexis Raimbault
on Mar. 24 2010

les articles sont liés aux catégories via la table "members", qui sert aussi à d'autres usages.

 




Alexis Raimbault webmaster free-lance
Jmarc - on Mar. 24 2010

Merci Alexis pour l'info.

Je n'avais pas percuté lorsque Christian parlait de cette table...


Christian
on Mar. 24 2010

humm il me semble pas que ce soit possible automatiquement aussi simplement que çà. Si il existe un lien dans la base de données entre un produit et son revendeur ca sera assez simple de l'afficher soit par overlay soit par layout dans une liste.

Si le lien n'existe pas alors il va falloir le créer. C'est là qu'il y aura un peu plus de programmation à faire. C'es en tout cas ce que je ferais après une rapide réflexion. Le but serait de créer ces liens d'un nouveau type dans la table members

A noter aussi qu'on pourrait jouer avec les catégories en définissant soit les produits soit les revendeurs en tant que catégories. A la création d'un produit on lui affecte un "revendeur catégorie" et le lien se fait dans la base de données.

On peut aussi envisager un revendeur en tant que membre fictif, pourquoi  pas




Actupro
quelques sites yacs : création site internet annuaire pro
Jmarc - on Mar. 24 2010

Christian : je regarde comment fonctionne les catégories mais je ne comprends pas comment est stockée l'information qui fait le lien entre la page et les catégories associées

Je ne vois rien dans la table section ni dans la table catégorie et je ne vois pas de table de relation additionnelle... Mystère !

Christophe Battarel - on Mar. 25 2010

Christian a dit :

"

On peut aussi envisager un revendeur en tant que membre fictif, pourquoi  pas

"

Je serais plus partisan de cette option qui me parait moins capillo-tractée que le revendeur défini deux fois dans les sections et les catégories.

Pourquoi ? Parce qu'il y a déjà pas mal d'automatismes dans yacs pour associer des pages ou des sections à des utilisateurs (et qu'il est également simple de le faire dans un petit bout de code) d'une part, d'autre part parce que le jour où tu veux vraiment que tes revendeurs accèdent au site, ils existent déjà et tu n'as pas 3 entités revendeurs comme dans l'autre solution !




Christophe Battarel - Société altairis -

Jmarc
on Mar. 24 2010
Le problème a été enregistré

PreviousNextIndex