Bonjour,
Je cherche à limiter l’affichage des extrafields de lignes de commande selon l’id d’une catégorie mais je ne parviens pas à trouver la bonne expression.
J’ai entré l’expression suivante dans le champ « visibilité »
($object->cat[$id_categ]==59?1:0) mais je ne fais sûremement pas référence à la bonne variable et je ne parviens pas à trouver l’information, quelqu’un aurait t-il la solution ?
Bonjour à tous,
Je pense avoir compris une partie du problème, je suis sur une ligne de commande et je teste un produit, j’ai donc voulu essayer de conditionner l’affichage à la référence produit dans la ligne de commande dans un premier temps.
J’essaie avec cette expression pour que mon extrafield s’affiche uniquement pour le produit ref 137 mais ça ne fonctionne pas non plus.
($reloadedobj = new OrderLine($db)) && ($reloadedobj->fetch($object->rowid)) && (($reloadedobj->ref) == 137) ? 1:0
Une petite piste ?
Bonjour,
Voulez l’afficher ou ? Sur quelle écran ?
Votre dolibarr version est bien la V12 ?
Bonjour, je cherche à les afficher ou à les masquer sur la page de saisie des commande pour plus de clarté, soit en en fonction d’un tag produit soit en fonction de la référence du produit.
Il s’agit d’attributs de ligne de commande.
J’ai une multitude d’attributs de lignes mais ils ne concernent que certains produits.
Mais impossible de trouver la bonne expression, rien ne fonctionne dans les essais que j’ai effectué, quelque chose doit m’échapper. Je suis bien en V12.
Alors ça avance le problème est qu’en V12 %object pointe sur la commande et non la ligne de commande, solution ici :
A partir de la V17 je comprend qu’en utilisant $objectoffield on pointe bien sur la ligne.
A partir de là j’arrive à filtrer l’affichage des extrafileds en testant les premiers caractères de la ref mais ce n’est pas l’idée de départ.
J’ai donc voulu récupérer la catégorie du produit pour voir ce que j’ai en retour avec ce code :
($reloadedobj = new Categorie($db)) && ($reloadedobj->fetch($object->myline->fk_product))
Résultat : Fatal error : Uncaught Error: Class ‹ Categorie › not found
Oui $object pointe sur la commande.
Et oui à partir de la V17 c’est $objectoffield
Pour la classe catégorie, peut-être pas chargée par le page commande, voir si vous rajoutez un
require_once DOL_DOCUMENT_ROOT.'/core/class/categorie.class.php';
En début de fichier index de commande.
Chose faite mais toujours erreur fatale malheureusement.
Bonjour,
je suis très intéressé par ce sujet également. Je n’ai pas réussi à réaliser cette opération après moulte essai de syntaxes …
Comme l’indique le sujet je souhaite limiter l’affichage des champs personnalisés à certaines catégories de produits pour d’une part cacher les champs inutiles et faciliter la saisie pour l’utilisateur final.
Autre problème que cela peut créer, les produits qui ne sont concernés par aucun des champs personnalisés m’oblige à mettre ces champs en mode facultatif pour ne pas bloquer l’enregistrement.
Voici ce que j’ai tenté de mettre dans le champ visibilité :
$object->category==2?1:0
$object->category->rowid==2?1:0
$object->category(2)?1:0
$object->getCategories()==2?1:0
$object->hasCategorie(2)?1:0
J’aimerai cacher le champ personnalisé lorsque l’ID de catégorie/tag est 2.
Quelqu’un aurait-il la bonne syntaxe ?
Merci d’avance.
Environnement :
Dolibarr 19.0.0
PHP 8.2.7
10.11.6-MariaDB
Bonjour,
Si vous regardez les précédents messages vous verrez que ce qui bloque c’est que la classe Categorie n’est pas chargée à ce moment. Si vous êtes en V19 c’est l’occasion de tester. Avec une expression du type ($reloadedobj = new Categorie($db)) && ($reloadedobj->fetch($objectoffiled->fk_product))?$reloadeobj:‹ erreur ›
Vous mettez ça en champ calculé pour voir la réponse.
Pour ma part je verrais ça après être monté en version, comme la majorité de mes références on un préfixe je filtre l’affichage en testant les deux premières lettres en attendant.
Bonjour,
oui j’avais bien lu les messages d’avant mais comme la version de Dolibarr mentionnée était beaucoup plus ancienne je me suis dit je vais tout de même tester.
Si je comprends bien votre méthode consiste à créer un champ personnalisé calculé pour récupérer la valeur ID de la catégorie du produit et récupérer cette information pour afficher ou non l’autre champ personnalisé en fonction de la catégorie.
J’ai mis votre instruction dans un champ calculé et à l’écran j’ai ceci :
« Calculé automatiquement » sur la fiche produit
Je ne connais pas la valeur en retour et si il y en a une.
De l’autre côté dois-je faire ceci sur mon autre champ personnalisé ?
$object->getCategories()==2?1:0
Merci
Bonjour j’ai réussi à faire ce que je voulais !
Je décris la procédure ci-dessous :
j’ai des articles avec des champs personnalisés différents en fonction du type d’article (de la catégorie d’article).
j’ai créé un champ personnalisé nommé « categories » pour identifier pour chaque article la catégorie de l’article. Imaginons je dois gérer 3 catégories d’articles cat_1, cat_2 et cat_3.
dans ce champ personnalisé qui sera renseigné sur chaque fiche article je vais via une liste de sélection choisir soit cat_1, cat_2 ou cat_3.
Donc mon champ personnalisé aura comme valeurs :
cat_1, catégorie 1
cat_2, catégorie 2
cat_3, catégorie 3
pour le test je vais créer 3 champs personnalisés un destiné à être affiché uniquement pour la catégorie de produit 1, un pour la catégorie de produit 2 et un champ commun à tous les produits quelque soit la catégorie.
Configuration du champ personnalisé 1
Je règle le paramètre Visibilité à
(json_decode(json_encode($object->array_options))->categories==‹ cat_1 ›?1:0)
Configuration du champ personnalisé 2
Je règle le paramètre Visibilité à
(json_decode(json_encode($object->array_options))->categories==‹ cat_2 ›?1:0)
Configuration du champ personnalisé 3
Je règle le paramètre Visibilité à 1
De ce fait quand je vais créer mon nouvel article je vais choisir dans la liste du champ categories soit cat_1 soit cat_2
et en fonction de ce choix après enregistrement de l’article je verrai sur la fiche produit les champs personnalisés associés à cette catégorie.
En ce qui concerne le champ personnalisé 3 il sera visible sur toutes les fiches produits. Commun à tous les produits.
Une précision importante. Si vous avez besoin d’afficher un champ personnalisé sur plusieurs catégories d’articles il suffit d’utiliser cette valeur dans le champ Visibilité du champ concerné :
(json_decode(json_encode(in_array($object->array_options[‹ categories ›], [‹ cat_1 ›, ‹ cat_2 ›, ‹ cat_3 ›])))?1:0)
Le champ ne sera pas commun à toutes les fiches produits mais uniquement visibles pour les catégories 1, 2 et 3.
Voilà
Hello @EasyConnect83,
Super si ça fonctionne !
Je reste perplexe sur le pourquoi du passage en json…
Un petit
($object->array_options['categories']=='cat_1'?1:0)
Ne marche pas ?
Bonjour et désolé pour le retard de ma réponse.
J’ai testé votre alternative mais ça ne marche pas le champ n’est plus visible.
Je n’ai pas trouvé mieux et plus simple.
Merci