Développer avec RBS Change : Extensibilité de RBS Change : structure des données
-
03/10/2011 14:25 Ce sujet est dédié au guide de découverte Structures de données : modifier les produits. Vous avez des questions sur l'extensibilité (injection, extension, surcharge) ? Nous sommes là pour vous répondre !Édité par Jean-Michel 26/03/2012 15:47
-
44249.2 en réponse à 44249.1 écrit par Franck Stauffer
27/12/2011 09:49 Bonjour,
Développant un site pour un artisan bijoutier, votre proposition nous à séduit tout de suite et je l'ai implémenté immédiatement avec succès (elle à survécue à la mise à jour 3.5.1 vers 3.5.2).
Ma seule frustration est de ne pas savoir comment afficher ces valeurs dans la vue détaillée en front-office ?
Ma deuxième question est de savoir comment en back-office indexer les frais de livraisons et/ou les prix en fonction de poids ? -
Concernant le frontoffice, ajouter une propriété à un document va générer automatiquement le ou les getters correspondants. Du coup si on reprend l'exemple du champ "weight" ajouté dans le tutoriel, vous aurez un getter getWeight sur le produit.
Dans le template vous pouvez directement appeler ce getter sur l'instance de votre produit (dans le bloc de détail d'un produit, cette instance est disponible sous le nom "product") via la notation PHPTAL : product/getWeight.
Référez-vous à la documentation du moteur de templates PHPTAL pour plus de détails sur les notations.
Concernant votre second point, vous parlez bien de gérer des frais dépendant du poids total du panier, c'est bien ça ? (et pas de moteur de recherche) -
Bonjour et meilleurs voeux pour cette nouvelle année à l'équipe dév de RBS.
En effet nous parlons bien de gérer des frais dépendant du poids total du panier. -
Merci et bonne année à vous aussi.
Pour utiliser cette nouvelle propriété dans un filtre d'application d'un frais il faudra créer un filtre. Pour cela vous pouvez utiliser la commande filter.add-filter et vous inspirer du filtre order_SommeProductAttributeFilter (dans le module order).
Ce n'est pas très compliqué de faire un filtre mais il y a quelques choses à savoir pour bien comprendre. Je vais rédiger une page de documentation à ce sujet dans les prochains jours. Je posterai le lien ici quand ce sera fait.Édité par Gaël Port 03/01/2012 17:09
-
Bonjour,
J'ai suivi tout le tutoriel cependant la sélection d'une matière fonctionne mais enregistre l'id de l'item de la liste (dans une string) au lieu de sa valeur dans ma table m_catalog_doc_product_i18n, Ainsi comment afficher la valeur de la matière en front ou plutôt enregistrer la valeur a la place de l'id lors de l’édition en BO?
MerciÉdité par ecoco 20/03/2012 14:35
-
Bonjour,
Concernant votre premier problème ; sur la non prise en compte de la contrainte, je n'arrive pas à reproduire votre problème, en suivant les indications décrites dans les différentes étapes et en faisant des copier/coller des fragments de codes fournis. Avez-vous rechargé votre interface backoffice après le "compile-all" ou n'y a-t-il pas une faute de frappe dans la déclaration des contraintes?
A noter : l'ajout de la contrainte ne va pas rendre impossible la saisie d'une valeur négative dans le champ, mais va plutôt empêcher l'enregistrement du document, comme le montrent les zones entourées en rouge dans la capture d'écran ci-jointe.
Pour le second point, disons que ça n'a pas trop de sens de localiser la propriété "material" mais c'est l'item de la liste qui doit être localisé (le matériel utilisé ne change pas quelque soit la langue que l'on utilise).
La question soulevée a permis de découvrir un bug sur l'absence du getter adapté (getMaterialLabelAsHtml() dans notre cas) lorsque l'on fait appel à une propriété localisée définie par une liste, ce qui adonné lieu au ticket 56046.
Deux choix se présentent à vous
* soit vous souhaitez conserver cette propriété comme localisée (même si ça n'a pas vraiment de sens) et vous ajoutez dans la classe finale du document (modules/project/persistentdocument/product.class.php) le code suivant :/** * @return String */ public function getMaterialLabelAsHtml() { $list = list_ListService::getInstance()->getByListId('modules_project/materiallist'); if ($list === null) { return null; } $listItem = $list->getItemByValue($this->getMaterial()); if ($listItem === null) { return null; } return f_util_HtmlUtils::textToHtml($listItem->getLabel()); }
Après avoir modifié la classe finale du document product n'oubliez pas de lancer la commande "php framework/bin/change.php compile-aop" (contenu dans compile-all) afin que ce soit bien pris en compte (exécutez la commande pour chaque modification que vous ferez dans cette classe).
* soit vous abandonnez le côté localisé de cette propriété en supprimant du modèle l'attribut "localized" de la propriété "material" et vous exécutez la commande "php framework/bin/change.php compile-all" qui fera le nécessaire. A ce moment le getter "getMaterialLabelAsHtml()" est disponible.Édité par Jean-Michel 20/03/2012 17:29
-
44249.8 en réponse à 44249.7 écrit par Jean-Michel
20/03/2012 17:58 D'accord merci bien, le premier point était du à une erreur de ma part...
Merci de prendre connaissance et de respecter les règles des forums.

