We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 1876
    • 835 Posts
    Salut

    Cela à l’air vraiment très puissant.

    Comme Ditto, je pense qu’il va falloir une documentation précise car cela risque fortement de devenir un module très important. Pour moi c’est d’ailleurs un nouveau plus sans équivalent pour MODx vis à vis d’autres projets.

    En tout cas merci à Helio pour ce magnifique travail
      • 23050
      • 1,842 Posts
      Je confirme que tve donne un élan supplémentaire à MODx.

      Avec tvEditor, je gère plusieurs dizaines d’options TV sur Déco’In : les styles, les couleurs, les pièces à décorer, etc...

      Avec tvExplorer, j’ai un super moteur de recherche avancé sur le back et le front.

      tve ouvre de nouvelles perspectives et va permettre de réaliser des sites construits à base de fiches, contenant elles-même plusieurs tv (catalogue de produits, agence immobilière, recettes de cuisine, etc..)

      Merci Helio smiley
        • 6726
        • 7,075 Posts
        Effectivement c’est du jamais vu sur un CMS open source en tout cas et implémenter d’une manière aussi user-friendly, c’est un gros plus pour la vente de certains projets laugh

        Go MODx, go !

        La syntaxe présentée dans les exemple est assez parlante je trouve, on devrait rapidement se familariser avec...
          .: COO - Commerce Guys - Community Driven Innovation :.


          MODx est l'outil id
          • 24731 ☆ A M B ☆
          • 211 Posts
          Quote from: davidm at May 17, 2007, 06:18 AM

          Hi Jose, the module is being completed as we speak, the documentation is not ready yet but I’ll handle the translating to english as fast as possible and post something on the english boards when I do smiley



          I understand, thank you for the update.

          Regards,
          Jose R Lopez
            • 11975
            • 2,542 Posts
            Un peu d’info

            tvExplorer et Ditto

            comment ca marche:

            voici le cycle (simplifié) effectué lors de l’execution de tvexplorer
            (je passe l’etape ou le chunk contenant le formulaire est parsé pour relever les tvs et leurs parametres)

            Si keywordSearch est actif et renseigné (une saisie dans le champ)

            Si parentElt est actif et renseigné => Charge la liste des folders contenus dans le parent sélectionné.
            Si non => le parametre "parents" de ditto s’applique => Charge la liste des folders pour cette valeur.

            => on execute une version modiféie d’ajaxSearch en limitant les resultats aux documents pour lequel le parent est dans la liste constitueé ci dessus.
            et on récupére les IDs retournées par le snippet de recherche fullText.

            Si une tv a fullText dans sa liste de parametres ([+tvName:fullText->1+])

            Si keywordSearch a été éxécuté => on execute une version modifiée d’ajaxSearch en limitant les resultats :
            - aux documents dont l’ID est contenue dans la liste obtenus par keywordSearch
            - à l’ID de la TV sur laquelle porte la requete
            Si non => on execute une version modifiée d’ajaxSearch en limitant les resultats :
            - à l’ID de la TV sur laquelle porte la requete
            et on récupére les IDs retournées par le snippet de recherche fullText.

            Si parmi les autres tvs(select, checkbox, radio)([+tvName:filter->7+]) du formulaire des valeurs ont été sélectionnées
            => on construit les filtres pour ditto
            Ex: ma tv contient plusieurs valeurs (1, 2 et 3)
            La valeur est sélectionnée est 3. on va donc créer un filtre avec la valeur sélectionnée en appliquant le filtre(filterMode) passé en parametre
            filter=nomTV,valeur_selectionné,filterMode (en réalité le filtre est pas écrit de cette manière on passe les filtres dans un tableau à ditto directement pour lui éviter d’avoir à les parser)
            En complément de ce filtre et pour assurer une recherche AND AND on va construire un nveau filtre composé du filterMode opposé et des valeurs non sélectionnées.

            pour finir on passe les différents params ainsi constitués à ditto pour affichage.

            Ou en est le dvpt:
            J’ai terminé le snippet pour une beta test mais je bloque sur le module.
            Je verrai si je peux faire une release dissociée.

            :-)
              Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
              • 11975
              • 2,542 Posts
              Salut,

              J’ai mis à jour la démo en ligne de tvexplorer pour vous montrer comme il est extrémement simple de générer un formulaire multicriteres avec ce snippet


              http://www.dixsix.fr/explorer/


              Le code du chunk:


              <form action="[~[*id*]~]" method="get" >
              <fieldset>
              [+tve.keywordsSearch:excludeTVs->all:label->Mots clés+]
              </fieldset>
              <fieldset>
              [+tve.Appellation:filter->9+]
              </fieldset>
              <fieldset>
              [+tve.categorie:filter->9:c_blankLabel->-+]
              </fieldset>
              <fieldset>
              [+tve.Couleur:filter->9+]
              </fieldset>
              <fieldset class="sendForm">
              <input type="submit" name="tve_search" value="Search" />
              </fieldset>
              </form>

              L’appel et les placeholders

              [[tvExplorer? &amp;dittoName=`Ditto` &amp;formTPL=`formVin` &amp;dittoSnippetParameters=`tpl:testPHX2|summarize:30|debug:1|paginate:1|depth:5|parents:23` ]]
              [+tve.searchForm+]
              <h3>nb documents:[+total+]
              </h3>
              <div id="ditto_list">
              [+tve.dittoList+]
              </div>
              <p class="ditto_pagination">
              Page <strong>[+currentPage+]</strong> of <strong>[+totalPages+]</strong>
              </p>
              <p class="ditto_pagination">
              <span id="ditto_pages">[+previous+] [+pages+] [+next+]</span>
              </p>

              J’ai activé le mode debug de ditto pour que vous puissiez voir les filtres créés par le snippet.
              Je tacherai de mettre en ligne des formulaires plus complexes(utilisant le mode #RANGE) dans les jours qui viennent et je pense également mettre en ligne un site dédié.

              :-)

              P.S: bon vous attardez pas sur la forme smiley j’ai pas eu le temps de peaufiner le css.

              EDIT: le filtre 9 est un filtre que j’ai ajouté je reviendrai plus tard sur ce sujet
              La recherche pour les mots clés est par défaut configurée pour utiliser ts les mots et non l’expression.
                Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                • 11975
                • 2,542 Posts
                Salut à tous,

                Un nouvel exemple de formulaire (celui de deco-in, pas encore en ligne), il contient plus de variables

                Voici le code du chunk: catalogueDeco


                <form action="[~[*id*]~]" name="tvExplorer" id="tvExplorer" method="get">
                <fieldset>
                [+tve.keywordsSearch:label->Mots-clés+]
                </fieldset>
                <fieldset >
                [+tve.parentElt:type->select:start->4:depth->3:blankLabel->-:label->Choisissez une rubrique+]
                </fieldset>
                <fieldset >
                [+tve.ObjetPrix:#RANGE{tvtype->dropdown:elements->@CHUNK intervalPrix:filter->4:label->Votre budget (prix max.)}+]
                </fieldset>
                <div class="tab-pane" id="decoPane">
                <script type="text/javascript">tpResources = new WebFXTabPane( document.getElementById( "decoPane" ) );</script>
                <div class="tab-page" id="tvStyle">
                <h5 class="tab">Styles</h5>
                <script type="text/javascript">tpResources.addTabPage( document.getElementById( "tvStyle" ) );</script>
                <fieldset>
                [+tve.ObjetStyle:label->Quel(s) style(s) ?:filter->9:size->8+]
                </fieldset>
                </div>
                <div class="tab-page" id="tvColoris">
                <h5 class="tab">Coloris</h5>
                <script type="text/javascript">tpResources.addTabPage( document.getElementById( "tvColoris" ) );</script>
                <fieldset>
                [+tve.ObjetColoris:label->Quel(s) coloris ?:filter->9:size->8+]
                </fieldset>
                </div>
                <div class="tab-page" id="tvMatiere">
                <h5 class="tab">Matières</h5>
                <script type="text/javascript">tpResources.addTabPage( document.getElementById( "tvMatiere" ) );</script>
                <fieldset>
                [+tve.ObjetMateriau:label->Quelle(s) matière(s) ?:filter->9:size->8+]
                </fieldset>
                </div>
                <div class="tab-page" id="tvPieces">
                <h5 class="tab">Pièces</h5>
                <script type="text/javascript">tpResources.addTabPage( document.getElementById( "tvPieces" ) );</script>
                <fieldset class="test" >
                [+tve.ObjetPiece:label->Quelle(s) pièce(s) ?:filter->9:size->8+]
                </fieldset>
                </div>
                <div class="tab-page" id="tvCadeau">
                <h5 class="tab">Cadeaux</h5>
                <script type="text/javascript">tpResources.addTabPage( document.getElementById( "tvCadeau" ) );</script>
                <fieldset>
                [+tve.ObjetCadeau:label->Idée(s) cadeau pour ?:filter->9:size->8+]
                </fieldset>
                </div>
                </div><!-- tvManagerPane -->
                <fieldset>
                <input type="submit" id="tve_search" name="tve_search" value="Chercher" />
                </fieldset>
                </form>


                Je vais pas expliquer tous les tags mais au moins celui employant la méthode RANGE.

                Objectifs:
                Au depart la tv(ObjetPrix) est de type number.
                On souhaite offrir au visiteur la possibilité de choisir parmi une liste de valeur le prix max qu’il souhaite dépenser.

                Comment faire:
                on va invoquer la methode RANGE de tvExplorer.

                [+tve.ObjetPrix:#RANGE{tvtype->dropdown:elements->@CHUNK intervalPrix:filter->4:label->Votre budget (prix max.)}+]

                Prenons chaque partie du tag:
                - tve.ObjetPrix => on ajoute à la liste de critere la tv ObjetPrix

                Sur cette tv on applique la methode #RANGE (qui permet de definir des intervalles de valeur, pour cet exemple on crée un seul objet supplémentaire pour définir les valeurs de l’intervalle)
                - #RANGE{tvtype->dropdown:elements->@CHUNK intervalPrix:filter->4:label->Votre budget (prix max.)}

                Pour en créer une deuxieme separer les parametres de chaque borne avec ||:
                #RANGE{tvtype->dropdown:elements->@CHUNK intervalPrix:filter->4:label->Votre budget (prix max.)||tvtype->dropdown:elements->@CHUNK intervalPrix:filter->4:label->Votre budget (prix max.)}

                Les propriétés de RANGE

                - tvtype->dropdown
                La TV ObjetPrix est enregistré dans la base avec un type number.
                On force donc le rendu pour transformer la TV en dropdown (ou plutot on attribue à la borne le type dropdown).

                - elements->@CHUNK intervalPrix
                Dans la base la TV ne contient pas d’options (du fait de son type number) on va donc les créer avec la propriété "elements"
                Ici on va aller chercher les valeurs dans un CHUNK (les bindings => EVAL ou SELECT sont supportées)
                Le contenu du chunk intervalPrix dans notre exemple
                Moins de 15€==15||Moins de 50€==50||Moins de 80€==80||Pas de limite==9999

                - filter->4
                Le filtre à appliquer est 4 (supprime de la liste de résultats les objets dont le prix est > à la valeur recherchée)

                - label->Votre budget (prix max.)
                Se comprend sans explications.

                :-)
                  Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                  • 11975
                  • 2,542 Posts
                  Re,


                  des images seront certainement plus parlantes

                  Voici la tv ObjetPrix sans la methode RANGE


                  avec la methode RANGE



                  Comme je l’expliquais precedemment on pourrait tres bien creer un deuxieme select pour une recherche du type compris entre x et y

                  :-)
                    Made with MODx : [url=http://www.copadel.com]copadel, fruits et l
                    • 6726
                    • 7,075 Posts
                    Franchement tout ça met l’eau à la bouche et va ouvrir de nombreuses applications pour des sites corporates !

                    Je ne connais aucun module équivalent dans le monde des CMS open source... j’aimerai bien si tu as le temps voir un post de ta part sur le blog de la MODx team (on ne s’en sert pas assez !) qui explique le cheminement que tu as suivi pour aboutir à ce combo TVEditor / TVExplorer smiley Ca a du être un chemin d’apprentissage passionnant !
                      .: COO - Commerce Guys - Community Driven Innovation :.


                      MODx est l&#39;outil id
                      • 11975
                      • 2,542 Posts
                      Merci David de ta proposition, je tacherai d’ecrire un making-off si je trouve le temps.

                      je pense que je vais poster aujourd’hui tveditor & tvexplorer pour les francophones pour debusquer les derniers bugs.


                      Stay tuned smiley
                        Made with MODx : [url=http://www.copadel.com]copadel, fruits et l