Forum CMS Made Simple FR

Version complète : [Fermé]Creation d'articles : Affichage des champs selon la catégorie
Vous consultez actuellement la version basse qualité d’un document. Voir la version complète avec le bon formatage.
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.12
#~ Url du site : localhost
#~ Hébergeur / Soft : mamp
#~ Informations Système :
#~ ----------------------------------------------
#~ Cms Version: 1.12
#~ Installed Modules:
#~ CMSMailer: 5.2.2
#~ CMSPrinting: 1.0.5
#~ FileManager: 1.4.5
#~ MenuManager: 1.8.6
#~ MicroTiny: 1.2.9
#~ ModuleManager: 1.5.8
#~ News: 2.15.1
#~ Search: 1.7.12
#~ ThemeManager: 1.1.8
#~ CGSimpleSmarty: 1.7.4
#~ CGExtensions: 1.46.4
#~ CGCalendar: 1.14.6
#~ Gallery: 2.0.2
#~ FormBuilder: 0.8.1.1
#~ ListIt2: 1.4.1
#~ CGSmartImage: 1.17
#~ Uploads: 1.18.5
#~ TinyMCE: 2.9.12
#~ CGJobMgr: 1.3.4
#~ Newsletter: 1.2.0
#~ NMS: 2.9.5
#~ Config Information:
#~ php_memory_limit:
#~ process_whole_template:
#~ max_upload_size: 10000000
#~ url_rewriting: none
#~ page_extension:
#~ query_var: page
#~ image_manipulation_prog: GD
#~ auto_alias_content: true
#~ locale: fr_FR.utf8
#~ default_encoding: utf-8
#~ admin_encoding: utf-8
#~ set_names: true
#~ Php Information:
#~ phpversion: 5.4.4-14+deb7u2
#~ md5_function: On (Vrai)
#~ gd_version: 2
#~ tempnam_function: On (Vrai)
#~ magic_quotes_runtime: Off (Faux)
#~ E_STRICT: 2048
#~ E_DEPRECATED: 0
#~ memory_limit: 140M
#~ max_execution_time: 60
#~ output_buffering: On
#~ safe_mode: Off (Faux)
#~ file_uploads: On (Vrai)
#~ post_max_size: 40M
#~ upload_max_filesize: 10M
#~ session_save_path: /tmp (0777)
#~ session_use_cookies: On (Vrai)
#~ xml_function: On (Vrai)
#~ xmlreader_class: On (Vrai)
#~ Server Information:
#~ Server Api: cgi-fcgi
#~ Server Db Type: MySQL (mysql)
#~ Server Db Version: 5.5.34
#~ Server Db Grants: Trouvé un privilège "GRANT ALL" qui semble être adapté
#~ Server Time Diff: Aucune différence de date du système de fichiers trouvées
#~ ----------------------------------------------
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour à vous chers tous,

Je viens poser une préoccupation qui me tracasse, dans l'espoir de trouver une solution avec votre aide.
J'utilise couramment les articles pour un site que je suis entrain de developper. Alors, j'ai crée certains champs par rapport à ce que je desire pour une catégorie donnée, jusque là tout va bien.

Alors, lorsque je crée mes articles quelque soit la catégorie tous les champs crées là haut, s'affiche dans le back office et cela me derange parce que lorsque le site sera livré il se pourrait que les utilisateurs finaux s'embrouillent.

Donc, je souhaiterai savoir, s'il est possible pendant la creation des articles d'attribuer selon les categories un back office different pour la zone creation d'articles.

Cordialement
Bonjour Glany,
à ma connaissance, on ne peut pas.
Les champs supplémentaires s'appliquent à tous les articles quelque soit la catégorie.
La seule solution que je vois, serait de modifier le template d'édition d'article et d'y mettre un peu de javascript pour masquer/montrer le champ quand la catégorie est sélectionnée en s'inspirant de ce qui est fait avec les dates d'expiration.
Regarde dans modules/News/templates/editarticle.tpl
Merci Jissey,

J'y avais pensé. Ok je vais éplucher dans ce sens et donnerai la suite.

Cdt.
Je reviens après un bon moment d'inaction par rapport a ce post. J'ai pu ebaucher une petite fonction qui me permettrait de masquer/afficher les champs selon les categories avec du JAVASCRIPT.
Exemple de la fonction :
Code :
[== Indéfini ==]
<script language="javascript">
function changementCategory() {
var type = document.getElementById("type").value;

if (type == "Category1")
    {
        document.getElementById("category1").style="display:block";
    } else {
        document.getElementById("category1").style="display:none";
    }


if (type == "Category2")
    {
        document.getElementById("category2").style="display:block";
    } else     {
        document.getElementById("category2").style="display:none";
    }



    if (type == "Category3")
    {
        document.getElementById("category3").style="display:block";
    } else     {
        document.getElementById("category3").style="display:none";
    }

}
</script>

Dans mon body j'ai :
Code :
[== Indéfini ==]
<select id="type" name="type" onChange="changementCategory();">
           <option value="Category1">Category X</option>      
           <option value="Category2">Category Y</option>    
           <option value="Category3">Category Z</option>                     
       </select><br/><br/>
      
       <div id ="category1" style="display:none">
            Template article par défaut + champs supplémentaire liés à cette catégorie X
       </div>
      
       <div id="category2" style="display:none">
           Template article par défaut + champs supplémentaire liés à cette catégorie Y
       </div>
      
       <div id="category3" style="display:none">
           Template article par défaut + champs supplémentaire liés à cette catégorie Z
       </div>é

Alors, ma question par rapport à l'orientation suggérée par Jissey, comment dois je l'intégrer dans le template editarticle.tpl et surtout comment récupérer les champs crées pour les afficher selon la catégorie choisie.
Une question cruciale que tu dois te poser avant tout codage : l'utilisateur aura-t-il la possibilité d'ajouter des catégories et/ou des champs supplémentaires ?
De plus, tu ne pourras pas ajouter l'événement onchange() dans editarticle.tpl, mais bien dans action.addarticle.php
Code :
[== Indéfini ==]
ligne 333 : $onchangetext='onchange="document'.$id.'moduleform_1.submit();changementCategory()"';
ce qui est totalement déconseillé (upgrade du module).
Donc, pose-toi la question si le jeu en vaut la chandelle.

[edit]Je n'ai pas réussi à modifier $onchangetext sans avoir une erreur en sortie.
les templates des modules peuvent être modifiés sans danger si on les met dans modules_custom :
see http://docs.cmsmadesimple.org/customizin...-templates
Salut jissey,
Dans le template, le select est créé avec ceci : <p class="pageinput">{$inputcategory}</p>
Le problème est qu'il n'y a pas d'id sur le select et onchange est ajouté à partir de action.addarticle.php, qui n'est pas un template...
Code :
$onchangetext='onchange="document'.$id.'moduleform_1.submit()"';
[...]
$smarty->assign('inputcategory', $this->CreateInputDropdown($id, 'category', $categorylist, -1, $usedcategory, $onchangetext));
Voir l'apidoc
Ce qui donne en sortie :
Code :
<select class="cms_dropdown" onchange="documentm1_moduleform_1.submit()" name="m1_category">
<option value="1">G&eacute;n&eacute;rale</option>
<option value="2">test</option>
</select>
J'ai essayé d'ajouter changementCategory() ou un ID dans $onchangetext (voir le post #6 , mais ça renvoie une erreur).
Le seul moyen que j'ai trouvé est de modifier la classe dans le fichier \lib\classes\module_support\modform.inc.php ce qui est, bien entendu, impensable :p

Sans le getElementByID et le onchange(), ça me paraît bien compliqué Sad
Je crois qu'il vaut mieux se tourner vers JQuery et oublier JS, ou mieux, abandonner l'idée de cacher les champs inutiles :p
Salut JLC
Tu as sans doute raison, je n ai pas etudié le code, je propose juste une piste.
Si on doit ou veut modifier un des gabarit d un module, il faut créer un dossier module-custom.
Et tu as tout à fait raison, il ne faut pas modifier un fichier ou une classe php.
Ici si ça n est pas possible techniquement de masquer certains champs, il faudra trouver une autre solution, la piste n est pas la bonne!
Peut être même utiliser un autre module?
Merci, à Jissey et à sa Seigneurie Jean pour vos contributions, ceci étant je me vois dans l'obligation d'abandonner cette piste. Merci encore.

Cdt