We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 36730
    • 63 Posts
    Bonsoir tout le monde
    petit nouveau ici, et déjà enthousiaste à l’idée de développer mon site avec modx smiley
    Je viens à la pêche aux infos pour savoir si quelque chose que je tapais manuellement avant (tout le site en html statique à la mano ^_^ ) est possible avec l’un des outils proposés par modx (snippet, chunk ou mieux ?)

    J’ai besoin de saisir une liste dans certains documents avec un nombre de lignes indéfini à l’avance, cela variera en fait dans chaque document, et il n’est pas dit que je l’utilise dans chacun non plus, en gros le code html en sortie ressemblerait à ça:
    			<div id="postit_haut">
    				<div id="postit_bas">
    				<p>A savoir avant:</p>
    				<ul>
    					<li>Lorem</li>
    					<li>ipsum</li>
    					<li>dolor</li>
    					<li>sit amet</li>
    				</ul>
    				</div>
    			</div>

    Et donc je souhaiterais n’avoir qu’à appeler un bout de code dans la zone de rédaction d’un document, et indiquer mes lignes une par une sans me soucier du reste. Bien sûr je les rentre dans un ordre précis, la ligne <paragraph> en premier et les autres ensuite
    Est-ce possible ? Si oui avec quoi ?
    J’ai évidemment réfléchi à la question en lisant la doc, et je pense déjà pouvoir éliminer les TV pour ceci, puisque cela impose de donner un nombre fini de ligne, peut-être est-ce que je me trompe ?

    Une fois que je saurai quel outil utiliser je me débrouillerai pour le réaliser smiley

    En vous remerciant wink
    • Bonjour,

      à première vue le plus simple serait d’utiliser un RTE tel que TinyMCE ( intégré par défaut avec MODx ) ou CKEditor qui permettent de créer des listes, paragraphes, div… relativement facilement.
      Après peut être as-tu des besoins plus spécifiques…
        • 34001
        • 428 Posts
        Bonjour,

        Je suis du même avis que Romain. Tu pourrais par exemple créer une TV de type «Texte riche» appelée PostIt.
        Au niveau du code source de ton modèle, cela donnera:
        <div id="postit_haut">
            <div id="postit_bas">
                [*PostIt*]
            </div>
        </div>
        

        Pour chaque page affectée à ce modèle, tu auras donc une zone d’édition supplémentaire pour modifier le contenu du bloc.
          Intégrateur web freelance
          • 36730
          • 63 Posts
          Bonjour
          Alors, si j’ai bien compris pour le RTE c’est bien ce que je comptais utiliser, je voulais justement éviter d’avoir à taper ça en mode "HTML" même si c’est évidemment possible.
          Mais donc j’ai bien un besoin spécifique: que cette liste soit intégrée dans deux div avec des classes bien précises, car cela me dessine un postit à l’écran (grâce à la feuille de style) désolé si ce n’était pas clair

          Et l’autre besoin spécifique est de pouvoir lui indiquer une première ligne qui sera dans des balises <p></p>, toujours assez courte et souvent identique mais pas toujours.
          Et ensuite un certain nombre de <li>gnes</li> sans avoir à l’avance combien je vais en mettre.

          Avec ta proposition Fairytree, je ne vois pas comment faire cette séparation
          Et ensuite, et c’est pour cela que j’avais éliminé l’idée des TV (à la condition où j’ai bien compris ce que c’est) c’est que je ne sais pas dans quel document je vais en avoir besoin à l’avance.
          J’aimerai que ce soit quelque chose de totalement optionnel, par exemple, un document untel auquel j’ajoute au début:
          [Postit:"A savoir avant:","lorem","ipsum"]

          La première phrase envoyée en paramètre est donc considérée comme celle dans les balises <p></p> de mon code de tout à l’heure, les autres sont dans des <li></li> sans limite de nombre

          Si j’assigne une TV au modèle de touts mes documents, mon modèle par défaut, est-ce que je vais être obligé de remplir tous les champs à chaque rédaction d’un document ? Je risque de toutes façons dans ce cas d’avoir mon postit dessiné mais vide dans chaque document

          En gros ça serait un peu un "chunk" mais avec du contenu variable en fonction de ce qui est saisi dans l’éditeur au moment de son appel, ça existe des chunk avec variables ?

          Merci pour les réponses wink
          • L’avantage ( ou inconvénient, selon l’humeur ) de MODx est d’avoir autant de possibilités pour arriver à un résultat, que de façon de raisonner.

            As-tu regardé le fonctionnement de TinyMCE ? Il te permet de « composer » ton contenu en mode graphique ( Word-like ) aussi bien qu’éditer ton code HTML à la main ( cf. http://tinymce.moxiecode.com/examples/full.php ).

            Dans la proposition de Fairytree, tu crées un modèle de page ( template ) qui représente la structure de ta page HTML. Ce template contient une ( ou plusieurs ) partie variable ( Template Variable ) que tu peux éditer à l’aide d’un RTE ( Rich Text Editor ) comme TinyMCE. Cela te permet donc de rédiger ta première ligne dans un paragraphe puis de définir ta liste, avec le nombre d’éléments que tu souhaites.

            Lors de la création de ton document qui devra contenir un post-it, tu sélectionnera donc ton modèle de page ( template ) créé.

            Sinon je suppose que la création d’un snippet ( code PHP ) permettrait de répondre à tes besoins ( grâce à « for each » je suppose ) mais cela dépasse mon domaine de compétence smiley

            J’espère que cela t’aidera. Bon courage.
              • 34001
              • 428 Posts
              Quote from: Epy at May 24, 2010, 12:58 PM

              Si j’assigne une TV au modèle de touts mes documents, mon modèle par défaut, est-ce que je vais être obligé de remplir tous les champs à chaque rédaction d’un document ? Je risque de toutes façons dans ce cas d’avoir mon postit dessiné mais vide dans chaque document
              La réponse est non. smiley

              Et pour compléter sur la partie conditionnelle—c’est à dire ne pas afficher le post-it s’il n’y a pas de contenu, tu peux utiliser le plugin PHx.
              Par exemple:
              [+phx:if=`[*PostIt*]`:isnot=``:then=`<div id="postit_haut">div id="postit_bas">[*PostIt*]</div></div>`+]
              

              Bien entendu, ce code est toujours à placer dans le modèle.
              Si la variable [*PostIt*] n’est pas vide, alors on affiche le code HTML complet avec la TV. Sinon, on n’affiche rien.

              Comme le précisais Romain, tu peux également passer par l’utilisation d’un snippet codé sur-mesure. Mais comme tu démarres tout juste avec MODx, mieux vaut utiliser PHx pour le moment...
                Intégrateur web freelance
                • 36730
                • 63 Posts
                D’accord je vois un peu plus clair smiley
                Pour TinyMCE j’ai bien vu que j’avais un mode Aucun RTE et que je pouvais donc taper mon code HTML, mais je souhaitais éviter ça, un peu pour simplifier et ne pas avoir à aller copier et coller le bout de code que j’ai posté en haut à chaque fois parce que je ne m’en souviendrais pas forcément, mais ça reste une possibilité pour le moment. (Je ne pense pas que j’aurai d’autres rédacteurs sur mon site)

                Je vais probablement m’orienter vers la solution avec PHx et les TV qui me semble sympa, mais une dernière supposition après que mon cerveau aie mouliné un peu:
                Un snippet est bien capable de prendre des arguments il me semble ? Donc avec un snippet perso qui ne fait finalement qu’écrire du code HTML statique + les quelques variables que je lui envoie ça pourrait marcher ?

                Quelque chose comme (bon, veuillez excuser les fautes de code c’est un exemple):
                <?php
                function Postit()
                {
                print("<div id='postit_haut'>
                    <div id='postit_bas'>
                       <p>$1</p>
                <ul>
                // boucle for()
                <li>$argX</li>
                // fin de boucle
                </ul>
                    </div>
                </div>")
                }
                ?>

                Et je l’appelle donc comme ceci dans mon modèle [+phx:if=`[*PostIt*]`:isnot=``:then=`[*PostIt*]`+]
                ça pourrait marcher ?
                Je ne sais pas si on peut récupérer des arguments sans connaitre leur nombre en PHP ($1 $2 $3 ... ), je mélange peut être avec un autre langage

                -> Je viens de voir qu’on pouvait connaitre le nombre d’arguments avec func_get_args() et donc récupérer les arguments avec une boucle for()

                Je vais continuer de chercher des solutions et en attendant je vais appliquer les vôtres, je sais que j’essaie peut-être d’aller trop vite par rapport à mes connaissances, mais au moins ça me motive et me fait progresser smiley

                Merci encore smiley

                Edit:
                Humm en fait je ne vois pas comment tu traites un nombre indéfini de variables avec cette solution:
                Quote from: Fairytree at May 24, 2010, 02:09 PM


                [+phx:if=`[*PostIt*]`:isnot=``:then=`<div id="postit_haut">div id="postit_bas">[*PostIt*]</div></div>`+]
                


                Les TV que je met dans un modèle sont des champs qui s’ajoutent dans l’éditeur de texte si je ne me trompe pas, et donc ce nombre de champ est défini par le nombres de TV que j’ai ajoutées au modèle, non ?
                  • 36730
                  • 63 Posts
                  Bonsoir !
                  Je viens donner des nouvelles puisque j’ai bien progressé smiley
                  Je suis passé à ModX Revolution parce qu’il a pas mal de fonctionnalités qui m’intéressent, et après test, je trouve l’interface plus intuitive
                  Bref
                  J’ai fini par parvenir à ce que je voulais, sous forme de Snippet: j’avais quelque chose de sympa avec un Chunk simple, mais un nombre de <li></li> défini à l’avance et des lignes vides si je mets rien, ce qui n’est pas génial.

                  Je me suis plongé dans le PHP et j’ai pondu ceci:
                  <?php
                  $postit = "";
                  
                  if(!empty($titre) && !empty($lignes)) { // Si le snippet n'a pas été appelé sans arguments
                  	$postit.= '<div id="postit_haut">
                  	<div id="postit_bas">';
                  
                  	if(!empty($titre)) {		// On ajoute le titre si présent
                  		$postit.="		<p>$titre</p>"; 
                  	}
                  
                  	$postit.="		<ul>";	// Surtout éviter qu'il manque <ul>
                  
                  	if (!empty($lignes)) {
                  		$tab_lignes = explode(", ", $lignes);
                  		$i = 0;
                  			while (!empty($tab_lignes[$i])) {
                  				$postit.= "			<li>" ;
                  				$postit.= $tab_lignes[$i] ;
                  				$postit.= "</li>" ;
                  				$i++ ;
                  			}
                  	}
                  
                  		$postit.="		</ul> 
                  			</div>
                  		</div>";
                  		return $postit;
                  }
                  ?>


                  Cela sort donc le HTML prévu, avec un nombre de ligne à volonté au moment de l’appel
                  [[PostIt? &titre=`Titre` &lignes=`Ligne 1, Ligne 222222, Blablabla, Test`]]

                  Donne
                  <div id="postit_haut">
                  <div id="postit_bas">
                  <p>Titre</p>
                  <ul>
                  <li>Ligne 1</li>
                  <li>Ligne 222222</li>
                  <li>Blablabla</li>
                  <li>Test</li>
                  </ul> 
                  </div>
                  </div>
                  


                  Et donc avec la CSS qui va bien:

                  Et ce postit est de longueur variable selon le nombre de flèches que je lui demande \o/

                  Je suis RA-VI laugh

                  Merci pour votre aide

                  (Les tabulations dans les chaines de caractères en PHP sont volontaires, c’était pour que le HTML sorte indenté proprement comme si je l’avais tapé à la main, hélas c’est pas trop ça pour le moment, j’ai donc ’aplati’ le code pour le forum)
                  • Merci Epy d’être passé donner ta solution.
                    Et bienvenue sur Revo =)