Un plugin d'administration pour ajouter un filtre personnalisé à votre page d'index. Le filtre sera rendu en tant que composant hors canevas, il ne prendra donc pas trop de place sur votre page d'index. Fortement inspiré du filtre d'ActiveAdmin.
Admettons que l'équipe d'administration a fait un excellent travail avec la fonctionnalité de recherche ou de filtrage par défaut. Il prend déjà en charge plusieurs champs de recherche et recherches de tables relationnelles. Il est facile à personnaliser (comme activer/désactiver la recherche, définir des champs de recherche personnalisés, etc.).
Mais j'ai trouvé quelques inconvénients :
registration_status
et employment_status
et que vous souhaitez rechercher uniquement le statut d'inscription « actif », vous obtiendrez tous les enregistrements « actifs », y compris le statut d'emploi.Veuillez partager vos réflexions si vous avez d'autres raisons.
Ajoutez administrate_filterable
à votre Gemfile :
gem 'administrate_filterable'
Et puis exécutez :
$ bundle install
Ou bien, exécutez simplement :
$ bundle add administrate_filterable
Pour chaque ressource à laquelle vous souhaitez ajouter un filtre personnalisé, ajoutez respectivement la ligne suivante à leur contrôleur d'administration.
include AdministrateFilterable :: Filterer
Exemple:
class UsersController < Administrate :: ApplicationController
include AdministrateFilterable :: Filterer
# ...
end
Par défaut, tous les attributs de COLLECTION_ATTRIBUTES
seront affichés sous forme de champs de filtre. Vous pouvez remplacer cela en ajoutant FILTER_ATTRIBUTES
au fichier du tableau de bord de votre administration.
Exemple ( app/dashboards/user_dashboard.rb
) :
class UserDashboard < Administrate :: BaseDashboard
# ..
FILTER_ATTRIBUTES = [
:first_name ,
:last_name ,
:email ,
:created_at
] . freeze
# ..
end
Il est possible de personnaliser le modèle de filtre (par exemple en changeant l'icône du bouton de filtre, etc.). Vous pouvez le faire en remplaçant le modèle par défaut dans votre application, créez simplement un nouveau fichier appelé _index_filter.html.erb
dans le dossier de ressources souhaité.
Par exemple, si vous souhaitez remplacer le modèle de filtre pour la ressource users
, vous devez créer le fichier dans app/views/admin/users/_index_filter.html.erb
. Ensuite, copiez et collez simplement le contenu du modèle par défaut ici et modifiez-le en fonction de vos besoins.
Si vous utilisez un pipeline d'actifs, vous devez inclure les actifs de cette gem dans votre fichier app/assets/config/manifest.js
:
// ... other code here ...
//= link administrate_filterable/application.css
//= link administrate_filterable/application.js
Exécutez rails assets:precompile
si les actifs ne sont pas chargés.
Par défaut, cette gemme ajoutera un bouton de filtre à views/admin/application/_search.html.erb
partiel. Mais si vous avez remplacé ce partiel dans votre application, vous pouvez ajouter le bouton manuellement en ajoutant la ligne suivante :
<%= render 'index_filter' %>
Exemple ( app/views/admin/users/_search.html.erb
) :
< form class =" search " role =" search " >
... other code here ...
</ form >
<%= render 'index_filter' %>
scoped_resource
remplacée Cette gemme utilise la méthode scoped_resource
pour filtrer les ressources en remplaçant son comportement par défaut. Si, par hasard, vous remplacez également cette méthode dans votre contrôleur d'application, vous remplacerez également la fonctionnalité de filtre et cela ne fonctionnera pas.
Pour résoudre ce problème, vous devez ajouter le code suivant dans la dernière ligne de votre méthode scoped_resource
remplacée :
filtered_resources ( your_scoped_resource )
Par exemple:
def scoped_resource
# Your custom filter logic here
resources = super . where ( status : 'active' )
# Add this line to make the filter work
filtered_resources ( resources )
end
Étant donné que j'utilise le partiel _search.html.erb
pour ajouter le bouton de filtre, il se peut qu'il ne s'affiche pas si vous définissez tous les attributs de recherche sur false dans le tableau de bord du modèle. Assurez-vous donc d'avoir au moins un attribut consultable pour faire apparaître le bouton de filtre.
La raison pour laquelle j'utilise le partiel est parce que :
_index_header.html.erb
, mais il entre en conflit avec le bouton d'exportation d'administrate_exportable. L'utilisation des deux gemmes entraîne l'absence d'un bouton, en raison de la substitution partielle. Il y a encore beaucoup de choses à faire pour améliorer ce joyau. En voici quelques-uns (triés par priorité la plus élevée) :
belongs_to
, etc.) prompt
, ajouter une option include_blank
, etc.) scoped_resource
) scoped_resource
remplacée) Si vous avez des idées ou des suggestions, faites-le-moi savoir en créant un problème ou une pull request.
Vous pouvez m'aider à améliorer ce joyau en contribuant à ce projet. Toute aide est très appréciée.
bundle exec rspec
Licence MIT
Un grand merci pour les ressources suivantes qui m'ont beaucoup aidé dans la création de ce joyau :