Submitted by spiritdaemon on
Bonsoir à tous,
Voilà ce qui me préhocupe pour le moment.
J'ai créé une page (page) avec une vue (view) pour un type de contenu (content type), jusque là tout va bien.
Je vais attaquer par un exemple :
Content type = voiture (qui possède une marque via la taxonomy, des spécifications, un style etc)
- Je crée mon nouveau type de contenu voiture : "Citroen Berlingo."
- J'ai mon affichage qui affiche correctement le type de contenu voiture.
A ca je veux ajouter une liste de type de contenu "showcase", dans celui ci, j'ai un champ CCK node reference qui pointe vers Citroen Berlingo.
-> Dans mon type de contenu showcase, j'ai bien le référence vers Citroen Berlingo.
-> Je voudrais avoir dans le type de contenu Citroen Berlingo, un liste contenant l'élément showcase.
Un showcase peut etre affecté à plusieurs voitures (imaginons le salon de l auto).
A partir de view, j'ai ajouté un filtre sur "showcase", relation sur "node reference = voiture Citroen Berlingo"
Donc à partir de la vue de type de contenu "Citroen Berlingo" j'arrive à afficher tous les showcase, mais dans ce cas, aussi ceux qui ne sont pas lié à ce modèle. Je peux rajouter un filtre sur node reference -> Citroen Berlingo mais dans ce cas, je vais devoir créer une vue pour chaque modèle.
Comment lui faire passer le paramètre en direct ? sans devoir le spécifier?
Comment puis-je intégré celà correctement?
J'espere que c'est plus ou moins clair. Celà correspondrait à la phrase : "+ de vidéos de cette voiture", cette vue serait créé dynamiquement à chaque modèle de type "voiture".
Un tout grand merci d'avance.
Spir!t
Bonjour, J’ai le même type de
Permalien Soumis par Stéphane Lojkine le 18 Février, 2012 - 16:49
Bonjour,
J'ai le même type de problème pour créer le site d'un laboratoire de recherche.
J'ai créé deux types de formulaire :
Un formulaire "Membre" et un formulaire "Publication".
Comment créer une Vue associant à chaque fiche "Membre" l'ensemble de ses "Publications" ?
Je pense que mes membres sont un peu comme les voitures et mes publications comme les salons auto de spiridaemon !
Merci à qui peut nous aider
Bonjour ! j’ai une solution.
Permalien Soumis par radd le 19 Février, 2012 - 14:29
Bonjour! j'ai une solution. J'utilise drupal 7 avec les modules views, panel, entity API et entity tokens.
Pour le contenu membre, ajoute un champ noms(table field_noms dans la base de donnée), Dans ce champ tu met le nom complet du membre. Pour le contenu publication ajoute un champ entity reférence(table field_chercheur) pointant sur un contenu chercheur. Choisit un widget autocomplétion.
Crées une vue de type content pane(pas d'url) et à l'intérieur crée 2 volet de contenu:
Tu crée maintenant un panel de type page(page du panel) avec un chemin d'url comme recherche/%1 par exemple, il faut juste qu'il y ai un argument.
Maintenant quand tu fais ?q=recherche/1 dans l'url par exemple la page affiche les 2 volets cad le membre dont l'uid est 1 et en bas ses publications.
Maintenant pour que tu ne sois pas obliger de taper dans l'url à chaque fois. Tu vas créer une vue de type page avec une url sans argument. Elle va afficher les champs Nom(field_noms) des contenu membre. Et tu vas créer un module, dans ton fichier tonmodule.module ajoute les lignes:
Maintenant chaque nom de membre aura un lien pointant vers ?q=recherche/nid_du_membre qui n'est autre que le lien vers la page du panel avec un argument. Bien sûr il faut passer par cette dernière vue avant de voir le membre et ses publications. J'ai testé chez moi et ça fonctionne.
Bon courage!
Je suis très impressionné,
Permalien Soumis par Stéphane Lojkine le 19 Février, 2012 - 16:56
Je suis très impressionné, merci beaucoup !
Bon, je me mets au travail...
Merci encore.
Bon, j’ai essayé de suivre
Permalien Soumis par Stéphane Lojkine le 19 Février, 2012 - 18:27
Bon, j'ai essayé de suivre tes indications, mais je ne retrouve pas les menus et les paramètres que tu indiques, peut-être parce que ma configuration est en français.
Je reprends méthodiquement.
Dans Structure/Types de contenu j'avais créé un formulaire Membre et un formulaire Publication.
Dans le formulaire Publication, j'ai ajouté un champ "Nom du membre" dont le nom est "field_membre" le type "Référence à un terme", le widget "Widget d'auto-complétion de terme".
Première question, comment Drupal va-t-il comprendre que ce champ doit être lié au champ "field_nom" du formulaire "Membre" ?
Dans Structure/Vues, j'ai créé une vue "Membre avec ses publications".
Cette vue contient un block et un volet de contenu.
Pour le block, le critère de filtrage est Contenu(Type=Membre)
Pour le volet de contenu, le critère de filtrage est Contenu(Type=Publication) et Contenu(Nid=)
Mais comment dire nid = quoi ?
Faut-il créer un deuxième volet de contenu ?
Ensuite dans Structure/Pages, j'ai créé une nouvelle page "Add Custom Page".
Type : Personnalisé
Titre : Le membre et ses publications
Chemin :/recherche/%1
Stockage : Normal
J'ai bien rempli la rubrique Argument :
Argument : %1
Position dans le chemin : 1
Contexte assigné : Noeud:ID
Mais je ne vois aucune rubrique Contenu.
Dans Structure/Types de
Permalien Soumis par radd le 20 Février, 2012 - 10:17
Dans Structure/Types de contenu j’avais créé un formulaire Membre et un formulaire Publication.
Dans le formulaire Publication, j’ai ajouté un champ «Nom du membre» dont le nom est «field_membre» le type «Référence à un terme», le widget «Widget d’auto-complétion de terme».
Première question, comment Drupal va-t-il comprendre que ce champ doit être lié au champ «field_nom» du formulaire «Membre» ?
D'abord tu ne crée pas un champ field_membre de type référence à un terme mais de type Entity reference. C'est pour ça que tu dois télécharger les modules Entity tokens et Entity API(DRUPAL 7 PAS 6). Une fois créee quand tu clique sur modifier le champ, dans l'onglet paramètre du champ il ya une liste déroulante "Target type" choisit Noeud. Dans la liste de séléction "Target Bundle" choisit le type de contenu "membre". Donc maintenant notre contenu publication est lié à un et un seul contenu de type membre.
Fait attention quand tu crée un nouveau contenu publication et que tu rempli ce champ ce sont les titres des contenu membre qui doivent y être, c'est de la forme: "titre (nid)" si tu rempli seulement par titre ça fonctionnera pas. C'est pour ça que l'autocomplétion est utile parcequ'il affiche automatiquement le nid à coté du titre.
Dans Structure/Vues, j’ai créé une vue «Membre avec ses publications».
Cette vue contient un block et un volet de contenu.
Pour le block, le critère de filtrage est Contenu(Type=Membre)
Pour le volet de contenu, le critère de filtrage est Contenu(Type=Publication) et Contenu(Nid=)
Mais comment dire nid = quoi ?
Faut-il créer un deuxième volet de contenu ?
Mon views est également traduit en français donc on a la même interface. Tu dois créer une vue avec 2 volets de contenu mais pas un bloc et un volet de contenu. La raison c'est qu'on doit afficher chacun de ces volets de contenu dans un panel. L'argument dont ils ont besoin est fourni par le panel or un bloc n'accepte pas d'argument!
Dans le premier volet tu fais critère de filtrage Contenu(Type=Membre) et un FILTRE CONTEXTUEL(se trouve tout à droite dans un fieldset "Avancé") Contenu : Nid.
Dans le deuxième volet tu fais Contenu : Type (= publication) puis ajoute une relation(également dans "Avancé") de type Entity reference puis coche la case "Entity Reference : Referenced Entity
A bridge to the Contenu entity that is referenced via field_membre".
Puis ajoute un filtre contextuel Contenu:nid et dans la liste déroulante "Relation" choisit la relation que tu viens de créer.
En gros voilà comment ça fonctionne:
Si tu ne connais pas le nid d'un contenu membre regarde dans la base de donnée la table node, il y a une liste de tout les contenu que tu as créer avec leur type et leur nid.
Quand t'auras terminé poste un message.
Je me sens vraiment bête, je
Permalien Soumis par Stéphane Lojkine le 20 Février, 2012 - 22:17
Je me sens vraiment bête, je n'ai pas le type "Entity reference" comme type de champ dans la liste proposée, qui comporte :
Booléen, Décimal, Entier, Fichier, Image, Liste (entier), Liste (réel à virgule flottante), Liste (texte), Réel (Float), Référence à un terme, Texte, Texte Long, Texte long et résumé.
J'ai pourtant téléchargé les deux modules Entity tokens et Entity API, version entity-7x.x-1.0-rc1.
Dans Module, ils figurent à la rubrique "Autre" (avec Advanced help) et sont tous les deux indiqués comme activés, mais la case à cocher d'Entité API est grisée.
Est-ce de là que vient le problème ?
Ah j’ai trouvé ! Il faut
Permalien Soumis par Stéphane Lojkine le 20 Février, 2012 - 22:31
Ah j'ai trouvé !
Il faut installer le module Entity Reference !
Entity tokens et Entity API sont en fait un seul module, tu as dû confondre à cause de ça.
Bon, je reprends tout ça...
Ça a avancé, mais ce n’est
Permalien Soumis par Stéphane Lojkine le 21 Février, 2012 - 00:17
Ça a avancé, mais ce n'est pas encore ça.
Cette fois j'ai pu modifier correctement le formulaire de Publications, le nom du chercheur s'affiche bien avec son numéro "nid" entre parenthèses.
J'ai ensuite refait la vue en supprimant le block et avec les deux volets de contenu.
Puis j'ai procédé aux tests. Je peux en fait récupérer le nid dans les publications, sans avoir à chercher dans la base de données.
La liste des publications s'affiche correctement, mais je ne vois pas le nom du chercheur :
Le 1er volet de contenu s'est modifié pour prendre la même configuration que le premier, je n'arrive pas à les dissocier.
Comment faire pour que les deux volets de contenu soient paramétrés différemment l'un de l'autre ?
Là c’est moi qui me sent
Permalien Soumis par radd le 21 Février, 2012 - 07:05
Là c'est moi qui me sent vraiment bête!! Il y a effectivement un moyen d'afficher tout ça dans une seule vue de type page sans utiliser panel(ça t'éviteras d'utiliser un module plutôt complexe) grâce aux fichier attachés. Désolé! j'utilise drupal que depuis 2 mois et je manque d'exercice.
Mais d'abord je vois que tu manque encore plus d'exercice que moi! Dans views il y a une chose essentielle:
Quand tu ajoute n'importequel propriété (filtre, relation, champ ...) ou en supprime un dans la fenêtre qui s'affiche tout en haut de la page il y a une liste déroulante qui affiche "Pour tous les affichages" ou "cette affichage (supplanter)".- "Pour tous les affichages": peu importe ce que tu ajoutes ça sera ajouté à tout les volets de contenu, block, fichier attaché... que tu as creé et que tu vas crée
- "cette affichage (supplanter)": la propriété s'appliquera uniquement à l'affichage en cours: C'EST CE QUE TU DOIS CHOISIR.
Maintenant on recommence!! si tu suis bien ça devrait te prendre moins de 15 minutes.
Oui, je suis néophyte ! J’ai
Permalien Soumis par Stéphane Lojkine le 21 Février, 2012 - 08:25
Oui, je suis néophyte !
J'ai créé une vue de type page avec un fichier attaché, jusque là tout va bien.
La page et le fichier attaché ont chacun leurs caractéristiques séparées.
Mais le résultat n'affiche toujours pas le nom du chercheur.
Il se présente ainsi :
Titre :
Membre et ses publications
Pièce jointe après :
Titre :
Publications
Contenu :
Et là les publications s'affichent
Pourquoi n'y a-t-il pas de rubrique contenu pour la Page "Membre et ses publications" ?
Pour la page «membre et
Permalien Soumis par radd le 21 Février, 2012 - 14:05
Pour la page "membre et publication" regarde tes critères de filtrage s'il y a "Contenu : Publié (Oui) " et regarde ton contenu chercheur. S'il n'est pas publié il ne s'affichera pas. Essais de créer plusieurs contenu membres avec plusieurs publications liés à eux et refait les tests.
Hourrah j’ai trouvé ! Sur la
Permalien Soumis par Stéphane Lojkine le 21 Février, 2012 - 21:16
Hourrah j'ai trouvé !
Sur la partie Page de la Vue, je n'avais pas placé le filtre "Nid" au bon endroit.
Je l'avais mis à gauche, dans "Critères de filtrage" alors qu'il faut le mettre à droite dans "Filtres contextuels", Contenu:Nid.
Je peux donc maintenant résumer le tutoriel :
Création d'une vue présentant simultanément le profil d'un chercheur et l'ensemble de ses publications.
Dans le formulaire "Membre", le champ titre ("title") est appelé "Prénom et Nom"
Dans le formulaire "Publication" un champ "Prénom et Nom" est recréé sous la forme suivante :
Champ field_membre, de type Entity Reference, widget "Autocomplétion".
Paramétrer le champ de la façon suivante :
Correspondance de l'autocomplétion = Contient
Paquet cible = Membre
J'ai choisi dans "Publication" de permettre un nombre de valeurs illimité (pour les publications collectives).
Cette vue se composera d'une Page et d'un Fichier attaché.
Paramètre de la page (colonne centrale de l'affichage définitif) :
Chemin : /membre/%
Attention, pour tous les réglages qui suivent, sélectionner en haut des fenêtres de paramétrage qui s'affichent en surimposition :
Configurer pour "Cette page (supplanter)" et non "Tous les affichages"
Titre (colonne de gauche)
Aucun
Critère de filtrage (colonne de gauche)
Contenu (Type=Membre)
Filtre contextuel (colonne de droite)
Contenu : Nid
Choisir "Fichier attaché" dans le menu déroulant de "Add"
Rappel : pour tous les réglages qui suivent, sélectionner en haut des fenêtres de paramétrage qui s'affichent en surimposition :
Configurer pour "Cette page (supplanter)" et non "Tous les affichages" (sinon, vous détricotez tous les réglages de Page).
Colonne de gauche :
Titre : Publications
Critère de filtrage : Contenu (Type=Publication)
Colonne centrale :
Attacher à Page
Position de l'attachement : Après
Hériter des filtres contextuels : Oui
Colonne de droite :
Filtres contextuels :
Après avoir sélectionné "Contenu : Nid", on choisit, dans la fenêtre qui s'affiche alors :
Entité contenu référencée par field_membre
Relations :
Entity Reference : Prénom et Nom
Pour cela créer au moins 2 ou 3 contenus "Membre" et pour chacun une ou deux publications. Au moment de créer les publications, noter le numéro "nid".
Dans l'URL du site, après l'adresse racine ajouter /membre/ et un "nid".
Par exemple : http://machinchose/drupal/membre/14
Alors s'affiche la fiche du membre 14 et en dessous sa ou ses publications.
Je passe à la dernière étape,
Permalien Soumis par Stéphane Lojkine le 21 Février, 2012 - 21:34
Je passe à la dernière étape, la création d'une Vue depuis laquelle aller directement d'une liste des membres vers la vue "Membre et Publications" qui correspond à chacun.
Tu dis que je dois créer une Vue de type page avec une url sans argument.
Je ne sais pas le faire : la machine me répond
"L'affichage Page utilise un chemin, mais le chemin n'est pas défini"
C'est bien une vue de type page et non une page de "Pages" ? De toutes façons, même message d'erreur.
Merci de m'aider encore, si près du but.
Dans le contenu de type
Permalien Soumis par radd le 22 Février, 2012 - 15:42
Dans le contenu de type membre tu as oublié d'ajouter un champ field_noms(c'est sur lui qu'on va travailler), à la création du contenu tu vas y mettre le nom et prénom du membre. Attention il doit s'appeler field_noms sinon le code ne fonctionnera pas.
Tu crée une vue de type page et dans le chemin tu met un mot, met 'liste-membres';"dans format d'affichage" c'est liste non mise en forme sur "champs". Puis clique sur "continuer et modiifer". Dans la vue met "Contenu : Type (= chercheur)" comme critère de filtrage. Dans CHAMPS ajoute le champ field_noms(applique à tous les affichages) puis supprime le champ:Titre s'il y en a.
Maintenant quand tu clique sur actualiser l'aperçu tout les noms des membres devraient s'afficher. Vérifie qu'il n'ont pas de liens. S'il n'en ont pas alors tu peux continuer. Je te conseille également d'ajouter un menu à cette vue. Sur le bloc du centre dans "Paramètres de la page" il y a "menu" clique sur ajouter et coche "Entrée de menu normale". Choisit un titre puis dans la liste déroulante "Menu" choisit "Menu principale" par exemple. Un lien vers la vue devrait apparaître dans le tout en haut du site.
Maintenant tu dois créer un module, c'est une solution assez lourde pour ton problème mais j'ai pas trouvé d'autre solution. Dans le dossier de ton site va dans sites/all/modules , ajoute un dossier dont le nom est "custom". Puis dans custom ajoute un dossier avec le nom est "membre". C'est le nom du module.
A l'intérieur tu vas crée 2 fichiers textes; l'un tu le renomme en "membre.info" et l'autre "membre.module". Fais attention aux extensions des fichiers, ils doivent être .info et .module.
Dans le .info met:
name = membre
description = Juste pour afficher des liens
core = 7.x
package = Z
files[] = membre.module
Dans le fichier .module ajoute:
Active le module, normalement il devrait se trouver à la fin de la page des modules. Maintenant à chaque fois que le field_noms est affiché un lien est automatiquement ajouté. Un lien qui pointe vers membre/nid_du_contenu_membre_auquel_appartient_le_champ_field_noms.
Il y a un problème avec la
Permalien Soumis par Stéphane Lojkine le 23 Février, 2012 - 07:08
Il y a un problème avec la ligne 4 du fichier membres.module.
Drupal refuse d'activer ce module et me renvoie l'erreur suivante :
Parse error: syntax error, unexpected T_VARIABLE in /Library/WebServer/Documents/UtpicturaServeur/drupal/modules/custom/membres/membres.module on line 4
Je n'ai pas fait exactement ce que tu m'as dit, mais je ne crois pas que ce soit la cause.
A tout hasard, je récapitule ce que j'ai fait.
Dans le formulaire "Membre", j'avais déjà créé un champ field_nom, qui me servait à classer par ordre alphabétique de Nom les chercheurs, bien que je les présente sous la forme "Prénom et Nom". Je me suis donc contenté de créer un champ field_prénom, qui me permettra d'aboutir au même affichage.
J'ai ensuite créé une Vue de type page intitulée "Liste des membres", avec comme chemin "/liste-des-membres".
C'est là que je me suis enhardi :
J'ai demandé comme champs à la fois Prénom, Nom, Groupe (le labo est divisé en groupes de travail), Statut
Pour l'affichage, dans Paramètres, j'ai coché "Fournir les éléments des enveloppes de champ par défaut" et les 4 champs, pour le 3e et le 4e champ, j'ai créé une étiquette ",".
Cela me permet d'afficher en ligne Prénom Nom, Groupe, Statut.
Je n'ai donc pas utilisé (dans Paramètres, Options de style de ligne) le séparateur virgule, car je ne veux pas de virgule entre Prénom et Nom.
J'obtiens un affichage plus riche, mais je pense que cela ne change rien à notre affaire ?
Critère de Filtrage : Contenu : Type (=Membre)
Critère de Tri : Contenu : Nom (Asc).....pour qu'ils soient rangés par ordre alphabétique
Dans la colonne centrale : Menu : Normal : Les membres
Et là c'est bon, tout s'affiche comme je veux, à l'identique de mon ancienne vue, mais sans lien hypertexte.
J'ai créé ensuite le module
/modules/custom/membres
avec deux fichiers, membres.info et membres.module
Le texte de membres.info :
name = membres
description = Ce module permet d'afficher des liens depuis la vue "Liste des membres" vers la vue "Membre et publications"
core = 7.x
package = Z
files[] = membres.module
Le texte de membres.module :
J'ai bien fait attention de noter field_nom sans s, puisque c'était l'intitulé de mon champ.
De toute façon le problème porte apparemment sur
$nid = $context['entity']->nid;
Mon champ field_nom est de
Permalien Soumis par Stéphane Lojkine le 23 Février, 2012 - 07:30
Mon champ field_nom est de type texte, est-ce là le problème ?
Mais j'ai essayé avec un champ de type Entity Reference et ça ne marche pas non plus.
Le problème ne vient donc pas de nid, mais peut-être de $context ?
Tu as appelé ton module
Permalien Soumis par radd le 23 Février, 2012 - 19:16
Tu as appelé ton module membres(avec s) et non membre. Donc tu renomme le nom du hook en: membres_field_attach_view_alter((&$output, $context). Et vérifie bien qu'il n y a pas un ";" qui manque ou des espaces entre les instructions du code. C'est ce qui cause généralement des erreurs. Enlève aussi la balise fermante "?>" à la fin du fichier .module si tu en as mis.
Ça y est, ça marche ! J’ai dû
Permalien Soumis par Stéphane Lojkine le 24 Février, 2012 - 01:35
Ça y est, ça marche !
J'ai dû recommencer 20 fois, j'ai l'impression que drupal ne prend pas immédiatement en compte les changements de code.
Voici le code définitif :
Merci beaucoup !
En fait tu dois effacer le
Permalien Soumis par radd le 24 Février, 2012 - 05:24
En fait tu dois effacer le tous les cache de drupal après chaque ajout de fonction dans configuration>>performance. OK bonne continuation.
j’en profite aussi. «Fait
Permalien Soumis par Wojtek le 6 Mars, 2012 - 13:16
j'en profite aussi.
"Fait attention quand tu crée un nouveau contenu publication et que tu rempli ce champ ce sont les titres des contenu membre qui doivent y être, c’est de la forme : «titre (nid)» si tu rempli seulement par titre ça fonctionnera pas. C’est pour ça que l’autocomplétion est utile parcequ’il affiche automatiquement le nid à coté du titre."
Veuillez préciser cette phrase SVP.
j'ai de la forme : «titre » au lieu de: «titre (nid)». Qu'est ce que j'ai pu commettre comme erreur de paramétrage? (J'ai de la version drupal 7).
Merci d'avance
ça affiche une liste de titre
Permalien Soumis par radd le 6 Mars, 2012 - 14:01
ça affiche une liste de titre mais quand on clique sur un titre le nid s'affiche automatiquement à côté(normalement).
J’ai trouvé une solution pour
Permalien Soumis par Stéphane Lojkine le 19 Juin, 2012 - 23:42
J'ai trouvé une solution pour lier mes deux vues sans ajouter aucun module !
Dans la liste des champs à afficher dans la 1ère vue, j'ajoute "nid" que je place juste avant "title". L'ordre est important.
Pour "nid", je spécifie "exclure de l'affichage". Il est là mais on ne le voit pas.
Pour title, je m'assure que le lien automatique est désactivé.
Puis j'ouvre "réécrire les résultats".
Je sélectionne "afficher ce champ comme lien".
Drupal me demande alors d'écrire le lien.
J'écris l'adresse de la vue vers laquelle je veux aller, puis flash, puis [nid].
Mettons que l'adresse de ma vue soit : membre/%
J'écris alors = membre/[nid]
Pas besoin de module, pas besoin de code, et le lien se fait depuis le champ title (pour moi, le prénom et le nom) vers la vue d'arrivée.
Génial non ?
J'ai suivi à la lettre votre
Permalien Soumis par amel le 15 Juin, 2015 - 17:07
J'ai suivi à la lettre votre tuto, mais ça n'affiche pas les ppublicatiosn pour moi :( ?