web-dev-qa-db-fra.com

Commander des données de sous-formes

Se demandant si quelqu'un a jamais eu une solution à ce problème; Ma recherche me dit pas. Une explication un peu compliquée mais j'espère que vous pourrez comprendre ...

J'ai un composant qui a la vue sur le site et l'administrateur. Les deux ont ordering afin que je puisse contrôler la commande d'éléments renvoyés dans la vue de la liste pour le frontend. Super, donc "Sports" View peut répertorier chaque individu "sport" dans n'importe quel ordre que je mets dans l'administrateur. Parfait.

Dans la vue "Sport" unique, les données sont renvoyées à cette vue dans l'habituel getItem () return $this->_item;. Bien sûr, c'est toute la ligne de table.

Maintenant, mon problème est que nous devons ré-commander les colonnes sur une base par article ("sport").

Par exemple, l'objet renvoyé par GetItem () est comme ci-dessous. Remarque, organisations et teams sont des sous-formes de "Sports", par exemple dans des onglets distincts dans la vue "Edit" de Joomla Admin.

ID sport n ° 1:

Joomla\CMS\Object\CMSObject Object ( [_errors:protected] => Array ( ) [id] => [ordering] => [state] => [checked_out] => [checked_out_time] => [created_by] => [modified_by] => [sportname] => [invented] => [founders] => [description] => [organisations] => [teams] )

C'est génial, mais pour le sport ID n ° 2, nous voulons retourner cet objet avec les sous-formes dans un ordre différent, comme si:

Joomla\CMS\Object\CMSObject Object ( [_errors:protected] => Array ( ) [id] => [ordering] => [state] => [checked_out] => [checked_out_time] => [created_by] => [modified_by] => [sportname] => [description] => [founders] => [invented] => [teams] => [organisations] )

J'ai examiné l'ajout d'un champ entier "de commande" à chaque sous-formulaire, puis en utilisant ceci en vue de rendre les objets, mais ceux-ci ne peuvent pas être fabriqués uniques entre les sous-formes, la création d'une place pour une erreur utilisateur dans la définition de sous-formes pour avoir la même valeur entière.

Quelqu'un a-t-il rencontré ce scénario et quelles sont mes options ici?

Si vous avez réussi à comprendre cela, alors merci!

1
Grant G

Cela me semble étrange de savoir pourquoi vous devez modifier l'affichage de la commande entre les différents points de vue - cela ferait-il une UX incompatible?

Comme il semble être une personnalisation localisée, je envisagerais de programmer dans le modèle de remplacement de la vue en regardant l'identifiant de l'article, puis transpose la matrice d'objet dans un tableau temporaire avec la commande de champ souhaitée.

Si vous avez un certain nombre de groupes de commandes requis, vous devrez peut-être stocker la commande dans un champ JSON dans un champ personnalisé quelque part.

Une autre méthode que j'ai vue utilisée concerne une combinaison d'extensions de laboratoires régulières (www.regularlabs.com), y compris des artickes n'importe où et un sourceur. Vous pouvez ensuite créer des mises en page Vous pouvez basculer entre les champs.

2
Patrick Jackson

Voici ma suggestion, en supposant que je vous ai bien compris.

Utilisez une onglet distincte "Commande de colonne" dans le formulaire d'édition pour permettre à l'administrateur de spécifier la commande dans laquelle les différentes colonnes apparaissent. Cela devra être un champ personnalisé évidemment.

Je suggérerais de le stocker dans la base de données en tant que chaîne JSON, avec la touche étant le nom de la colonne et la valeur étant la commande (1, 2, 3, ..). Désignez donc une nouvelle colonne dans votre table de base de données de composants ou ajoutez cette chaîne JSON dans un champ JSON existant si vous en avez déjà une.

Vous pouvez essayer d'utiliser la même approche d'interface utilisateur que Joomla effectue pour activer la commande. Le code est dans Media/Jui/JS/Sortalliste.js, et il est basé sur le jQuery triable Je pense. Vous pouvez donc essayer de faire votre propre version du JavaScript pour ce champ personnalisé. Le code Joomla JS rend les appels AJAX au serveur chaque fois qu'une ligne est entraînée dans une nouvelle position dans la commande. Vous voudrez peut-être suivre cette approche.

2
Robbie Jackson