2013-02-06 4 views
4

J'ai un widget qui utilise une requête pour afficher les détails. Est-il possible de spécifier le type d'affichage du widget (la requête utilise Résumé et tout est affiché comme je veux) parce que l'en-tête du widget a un type d'affichage de Détail et je veux qu'il utilise résumé afin que je puisse contourner la forme quand je le place dans différentes sections (principalement le texte d'en-tête), mais quand dans la zone de contenu je voudrais que ce soit des détails. J'utilise le thème bootstrap. Donc, fondamentalement, si je colle mon widget n'importe où autre que le contenu que je veux utiliser résuméWidget Orchard CMS Type d'affichage

Espérons que cela a du sens.

Merci

+2

Je ne suis pas certain de comprendre exactement ce que vous essayez de faire, mais il semble que vous cherchiez des alternatives de widget, sans modifier le type d'affichage. –

+0

J'espérais le faire par un autre type d'affichage, mais le widget s'affiche comme détail du type d'affichage à chaque fois, donc je n'ai pas vraiment beaucoup à faire. Si vous créez un widget, vous pouvez spécifier sa vue ou similaire. J'ai peut-être tort, mais je n'arrive pas à trouver une alternative. – Jonnymaboy

+0

@BertrandLeRoy, j'ai essayé beaucoup de formes écrasées mais elles ont seulement: display (model.content) pas d'accès au titre ou à d'autres parties. Suis-je manquer un tour ici, comme je ne peux pas trouver comment changer une chose simple comme la façon de changer l'affichage du titre du widget, soit h3 au lieu de h2 etc. – Jonnymaboy

Répondre

3

Ah, nous nous rencontrons à nouveau.

Les widgets sont créés et injectés dans la mise en page dans une classe appelée Orchard.Widgets.Filters.WidgetFilter. Il ne semble pas y avoir moyen de modifier le type d'affichage utilisé pour un widget (la valeur par défaut WidgetFilter utilise la valeur par défaut "Détail").

Pour contourner ce problème, vous pouvez utiliser votre propre implémentation de WidgetFilter. Copiez le code existant dans votre propre classe et ajoutez un attribut [OrchardSuppressDependency("Orchard.Widgets.Filters.WidgetFilter")] à votre classe. Cela permettra de s'assurer que le WidgetFilter existant n'est pas utilisé, et le vôtre est.

Si vous lisez la méthode OnResultExecuting, vous verrez que vers la fin il y a un appel à BuildDisplay. Le second argument de cette méthode peut être un type d'affichage. Vous pouvez vérifier widgetPart.Record.Zone pour voir où le widget a été placé et transmettre des valeurs différentes pour le paramètre displayType en conséquence.

Je ne sais pas si c'est la façon la plus élégante, mais c'est par où je commencerai. Peut-être que quelqu'un d'autre pourrait avoir une solution plus propre.

+0

Je ne suis pas cette solution (probablement de ma faute). Tout d'abord, j'espère que vous n'avez pas à faire quelque chose d'aussi lourd que de remplacer une partie de la structure du widget. Cela mis à part, il semble que votre solution persiste le 'DisplayType' et je pense que @Jon veut obtenir cette valeur de manière dynamique en fonction des informations d'exécution. Ai-je mal lu ceci? –

+0

@Philip Vous avez raison, je dois avoir un peu emporté avec mon exemple - ont édité pour répondre plus directement à la question de Jon. Je ne dirais pas que remplacer une partie de la structure du widget est "lourde", tout est conçu pour être surchargé de cette façon. – mdm

+0

@Philip Vous m'avez fait parano que j'ai manqué quelque chose de douloureusement évident maintenant;) Pour autant que je puisse voir, une fois que vous entrez dans 'BuildDisplay 'd'IContentManager, le type d'affichage devient immuable parce qu'il est transmis dans un BuildDisplayContext. Vous pouvez donc accéder au type d'affichage dans les implémenteurs de IContentHandler et IContentTemplateFilter, mais ne pas le modifier. J'apprends encore Orchard donc par tous les moyens me prouver le contraire! – mdm