Suite

FlexViewer 2.1 - Ajouter un défilement pour le groupe de widgets


J'ai un site qui utilise ArcGIS Viewer for Flex version 2.1. Dans l'en-tête, j'ai un groupe de widgets qui contient 25 éléments. La liste est si longue qu'elle dépasse le bas de la fenêtre du navigateur et je ne peux pas voir les 5-6 derniers éléments. Est-il possible d'ajouter une capacité de défilement au groupe de widgets afin que je puisse faire défiler les éléments ?

Merci, Tim


Robert Scheitlin a fourni une réponse sur le forum ArcGIS Viewer for Flex. Relier:

http://forums.arcgis.com/threads/36322-FlexViewer-2.1-Add-scroll-for-widgetgroup

Sa réponse :

"Bien sûr, trouvez simplement ce bloc de code et effectuez les modifications indiquées en rouge dans le HeaderControllerWidget.mxml :"

    

Comme le rouge n'apparaît pas ici, j'ai dû ajouter leparties, et modifiez les propriétés widgetList pourwidth="{widgetListDG.width + 29}" height="300".


IHM graphique XNA : création d'un widget 'scroll pane'

J'essaie de créer un système d'interface graphique simple et je suis actuellement bloqué sur la façon d'implémenter une zone de texte avec une barre de défilement. En d'autres termes, le texte est trop volumineux pour tenir dans la zone d'affichage. Je veux apprendre à faire cela, donc je préfère ne pas utiliser une API déjà lancée.

Je pense que cela pourrait être fait si le texte faisait partie d'une texture, mais si le jeu avait beaucoup de dialogues uniques, cela semble cher.

J'ai fait des recherches pour créer une texture à la volée et écrire dessus, mais je n'ai rien trouvé.

Toute stratégie suggérée serait appréciée. Je crois que cela se résume à : du texte dans une texture et comment ? Ou quelque chose auquel je n'ai pas pensé.


3 réponses 3

J'ai finalement réussi à le comprendre, après des heures de codage (je suis nouveau sur Magento 2)

Tout ce que vous avez à faire est une injection de dépendance sur

Créez un helper avec la méthode _prepareForm, que nous voulons réécrire :

où nous définissons $config['add_widgets'] et (si vous le souhaitez également) $config['add_variables'] sur vrai. Ajustez la déclaration de retour et vous avez terminé avec votre assistant.

Créez/Modifiez votre di.xml et définissez une préférence :

Je ne sais pas si c'est la meilleure et la bonne façon de le faire, mais cela fonctionne réellement sur CE 2.0.4.

Et n'oubliez pas d'ajouter des méthodes de filtrage à votre sortie frontend.

Au cas où quelqu'un se demande comment faire cela dans Magento 2.1.x (et probablement 2.2+ aussi). Voici comment:

Créez votre propre module personnalisé et ajoutez view/adminhtml/ui_component/category_form.xml avec (au moins) le code suivant :

Cela ajoutera les boutons de variable et de widget au champ de description lorsque vous éditez une catégorie. Mais les widgets/variables doivent également être rendus sur le frontend, sinon vous verriez simplement les balises du widget apparaître sous forme de texte sur le frontend (c'était la question posée par anujeet).


add_filter() et add_action() sont disponibles avant le chargement de tout plugin. Vous pouvez donc utiliser les deux dans la première ligne de votre plugin ou de votre thème.

Pour plus de lisibilité, je recommande de regrouper les actions et de filtrer les inscriptions tout en haut de votre fichier principal :

Il y a des exceptions à cette règle :

    . Dans cet exemple, j'enregistre une action pour l'arrêt uniquement lorsque le premier filtre pour wp_nav_menu_objects a été appelé. Le deuxième rappel ne peut donc pas être enregistré en même temps que le premier.

Style POO. Parfois, vous devez configurer les membres de la classe avant de pouvoir enregistrer les rappels. En utilisant un exemple très similaire…

… nous voyons que l'instanciation de la classe peut être arrêtée par un autre plugin, et une classe enfant pourrait enregistrer plus ou différents filtres et actions.

En plus du regroupement, vous pouvez aller plus loin et proposer une action personnalisée pour faciliter les personnalisations pour les autres développeurs.
Voici un exemple d'un thème sur lequel je travaille :

La dernière ligne est importante : un thème enfant ou un plugin peut s'accrocher à l'action t5_theme_hooks_registered maintenant et désinscrire tout hook précédent. Cela évitera de lutter avec les priorités, et je suis libre de changer ma priorités de rappel à tout moment.

Mais ne vous fiez pas uniquement à l'ordre du code source. Documentez les crochets que vous utilisez dans votre bloc doc. J'utilise un tag personnalisé wp-hook pour cela. Voici un exemple avec des crochets enchaînés du même thème :

Vous n'avez pas besoin de faire défiler vers le haut pour voir où ces fonctions sont appelées, un seul coup d'œil au bloc doc suffit. Cela demande quelques efforts, car il faut synchroniser à la fois l'inscription et le commentaire, mais à la longue cela fait gagner un temps précieux.


Un widget de démonstration

Pour mieux illustrer le fonctionnement interne, j'ai écrit un widget de démonstration très simple :

Notez le constructeur : 't5_demo_widget' est le $id_base , l'identifiant de ce widget. Comme vous pouvez le voir sur la capture d'écran, ses arguments sont stockés dans l'option widget_t5_demo_widget . Tous vos widgets personnalisés seront traités comme ceci. Vous n'avez pas à deviner le nom. Et depuis toi avez écrit vos widgets (probablement) vous connaissez tous les arguments des paramètres $instance de votre classe.


Le premier design est le pire en termes de convivialité car l'icône est ambiguë, et il y a une réelle possibilité que l'utilisateur ne le voie même pas. L'utilisateur va se concentrer sur (c'est-à-dire lire) le menu déroulant et il ne peut pas traiter l'icône en même temps, c'est physiquement impossible. Vous comptez sur l'utilisateur pour trouver l'icône par hasard ou par une supposition éclairée.

La deuxième conception est un peu plus utilisable car l'option Ajouter est plus importante bien qu'elle ait toujours les mêmes limitations. Cela dépend de la largeur de la liste déroulante et de l'importance de l'option Ajouter.

La troisième conception est probablement la plus sûre des trois car elle garantit que l'utilisateur numérisera au moins la liste existante. Ce n'est pas le plus joli, mais c'est le plus intuitif.

Une quatrième option serait de placer un lien texte sous le menu déroulant, où l'utilisateur a de très grandes chances de voir les deux. Vous pouvez désactiver le lien texte, puis l'activer une fois que l'utilisateur a activé le menu déroulant.

Sur la base de la réponse de @tim-huynh et du commentaire intelligent de @monkeyzeus, voici mes deux centimes.

  1. La conception 1 est ambiguë : l'utilisateur peut penser que l'icône signifie « ajouter ce groupe à quelque chose » avant de déclencher l'info-bulle.
  2. Le design 2 est meilleur, mais je suis d'accord qu'un utilisateur non éduqué ne pourra pas deviner que l'option "nouveau groupe" sera à droite derrière son centre d'attention, comme l'indique @tim-huynh.
  3. Le design 3 est un bon début:
    1. l'option "nouveau groupe" est proche du lieu d'attention de l'utilisateur,
    2. il est toujours bon de fournir à l'utilisateur un aperçu des groupes/tags/options existants avant de lui permettre d'en créer un nouveau,
    3. encore, cette conception échoue sur de longues listes, car le bouton "Nouveau groupe" sera placé tout en bas de la liste (ce qui peut dépasser la hauteur de l'écran dans certains cas).

    La solution que je suggère est d'implémenter un widget de sélection avancé, comme les gars intelligents de Gmail l'ont fait pour le bouton tag ci-dessous (désolé pour les termes italiens. "Etichetta" signifie "Tag")

    • la liste des balises est déroulante et a une hauteur fixe, ce qui permet la "Nouvelle balise" ("Crea nuova" dans l'image, une icône "+" aurait été sympa ici) bouton pour être toujours visible,
    • si la liste est trop longue, l'utilisateur dispose d'une barre de recherche pour trouver rapidement ce qu'elle cherche (ma copine a plus de 70 tags et n'envisage même pas de faire défiler).

    Je pense que les première et troisième options sont les deux possibilités, selon la façon dont elles seront utilisées.

    Si l'utilisateur doit ajouter des éléments assez fréquemment, le bouton + est définitivement préférable parmi ces deux-là, car il sera ennuyeux de parcourir la liste à chaque fois pour arriver à "ajouter de nouveaux". S'il peut s'agir d'une très longue liste d'éléments, cela augmentera également le désagrément d'accéder à l'option "ajouter un nouveau".

    je recommanderais aller avec la première option car il s'agit d'un indicateur visuel clair que les utilisateurs peuvent ajouter un nouvel élément à la liste s'il n'est pas trouvé. Voici un exemple de la façon dont vous pourriez le faire

    Le défi avec la troisième option est que vous vous attendez à ce que l'utilisateur défile vers le bas de la liste avant qu'il ne trouve l'option d'ajouter un nouvel élément. Si les éléments de votre liste sont organisés par ordre alphabétique et que l'utilisateur numérise par ordre alphabétique, une fois l'alphabet particulier terminé, l'utilisateur peut numériser davantage

    le la deuxième option peut également fonctionner mais le concept d'un lien n'est pas un appel fort à l'action qui pourrait être négligé en référence à la liste déroulante.

    j'irais avec la 2ème option car il énonce clairement l'action et il y a peu ou pas d'ambiguïté. Soit vous sélectionnez l'un des groupes existants dans la liste déroulante, soit vous créez le vôtre. L'expérience utilisateur ne peut pas être plus simple que cela !

    1ère option pourrait également fonctionner, mais nécessite une action de la part des utilisateurs. Je suppose que l'info-bulle n'est affichée qu'avec un survol de la souris et, par conséquent, ne l'emporte pas sur la 2ème option dans sa simplicité.

    Cependant, cette approche pourrait être plus soignée du point de vue du design et de l'esthétique. Un petit bouton simple (+) a l'air mieux qu'un lien texte (et dans le cas de l'internationalisation d'applications, vous ne savez jamais combien de temps vos chaînes de texte d'interface utilisateur vont durer et où elles peuvent casser une ligne et créer un désordre).

    Donc pour que cela fonctionne, vous pouvez afficher l'info-bulle au début, mais le masquer définitivement lorsque l'utilisateur a créé un nouveau groupe une ou deux fois, et, ainsi, sait à quoi sert ce bouton.

    Inutile de dire que cela nécessiterait une fonctionnalité de stockage de données/préférences utilisateur (peut-être localStorage qui est accessible dans tous les navigateurs modernes http://caniuse.com/#feat=namevalue-storage, ou si plus d'utilisateurs sont attendus en utilisant votre application à partir d'un seul appareil/pc puis stockez-le dans le backend.)

    La 3ème option est clairement la pire de toutes. L'utilisateur doit découvrir inutilement une partie cruciale des fonctionnalités, ce qui peut être très difficile si la liste des groupes est longue et nécessite un défilement.

    je voudrais ajouter que La troisième option dépendra de la taille de la liste. Si la liste déroulante est très longue, vous pouvez envisager une recherche prédictive, puis utiliser ce terme pour « Ajouter un nouveau groupe » s'il n'est pas trouvé.

    S'il s'agit d'une page à volume élevé, cela vaut la peine d'enquêter avec des outils d'analyse pour le savoir avec certitude.

    Idéalement, vous pourriez enquêter sur vos utilisateurs à l'aide d'analyses Web pour déterminer la meilleure réponse aux attentes de votre base d'utilisateurs. clicky.com, par exemple, vous permet de chronométrer chaque durée entre le clic sur l'élément de formulaire au-dessus du groupe d'éléments et l'élément de formulaire après le champ du groupe d'éléments. Ensuite, vous regardez le chronogramme analytique et faites un histogramme de la durée que les utilisateurs passent sur le champ "groupe d'articles".

    Vous n'avez pas nécessairement besoin de faire cette analyse temporelle avec une configuration A/B si vous le souhaitez, vous pouvez simplement en choisir une, construire et vérifier la gravité des défauts de conception plus tard. plus tard, vous regardez l'histogramme des personnes qui choisissent l'option "ajouter une nouvelle catégorie" et vérifiez l'utilisation hors séquence (elles ne l'ont pas vu au début et ont dû revenir à cet élément de formulaire plus tard). Si vous avez une taille d'échantillon suffisamment grande, vous devriez voir des pics distincts dans l'histogramme de synchronisation, chaque pic représentant un temps de modèle utilisateur différent pour reconnaître la fonctionnalité. Comme exercice amusant, vous pouvez profiler les groupes distincts de votre base d'utilisateurs en regardant les pics dans l'histogramme de synchronisation et en attribuant chaque pic à un modèle mental d'utilisateur différent sans avoir besoin d'une enquête ou d'un autre mécanisme de rétroaction ennuyeux normalement utilisé pour segmenter public.