menus du tableau de bord ns
Ce filtre est utilisé pour modifier le menu latéral du tableau de bord. Il accepte un paramètre, qui correspond au menu dans son état actuel. Notez que le menu final peut être différent du résultat attendu, car d’autres modules peuvent remplacer le menu.
En utilisant une priorité plus élevée, faites en sorte que votre script s’exécute après tous les autres. Voici comment vous allez enregistrer un menu personnalisé.
<?php
namespace Modules\YourModuleNamespace\Providers;
use Illuminate\Support\ServiceProvider;
use App\Classes\Hook;
class ModuleSerivceProvider extends ServiceProvider
{
public function register()
{
Hook::addFilter( 'ns-dashboard-menus', function( $menus ) {
$menus[ 'my-menus' ] = [
'label' => __( 'Your Menu' ),
'href' => url( '/' ),
'permissions' => [], // accept an array of permissions
'icon' => 'fa-icon', // use https://icons8.com/line-awesome icons.
'childrens' => [
// sub menu having the same shape as the parent, excluding "childrens" and "icon".
]
];
return $menus;
});
}
}
Vous pouvez définir une priorité en passant un paramètre supplémentaire à la fonction « addFilter ».
Contrôler la visibilité du menu avec des autorisations
Si vos menus nécessitent certaines autorisations pour être visibles par un utilisateur, vous devrez utiliser l’attribut « permissions », qui accepte un tableau d’espaces de noms « permissions » (identifiants).
[
'permissions' => [ 'see.in.dark' ]
]
Si plus d’une autorisation est fournie, l’utilisateur doit avoir ces autorisations associées à son rôle.
Fournir des sous-menus
Le menu ne peut accepter qu’une hiérarchie avec un seul niveau en dessous. Cela signifie qu’un sous-menu ne peut pas contenir de sous-menus. La forme d’un sous-menu est similaire à celle du menu parent, mais n’inclut pas « icon » et « children », qui ne s’appliquent pas aux sous-menus.
[
//
'childrens' => [
'submenu' => [
'label' => 'Sub menu Label'
]
],
//
]
Chaque sous-menu, comme le parent, doit être défini comme une paire clé-valeur. Veillez à définir des clés uniques afin d’éviter tout conflit possible.
<?php
namespace Modules\YourModuleNamespace\Providers;
use Illuminate\Support\ServiceProvider;
use App\Classes\Hook;
class ModuleSerivceProvider extends ServiceProvider
{
public function register()
{
Hook::addFilter( 'ns-dashboard-menus', function( $menus ) {
$menus[ 'my-menus' ] = [
'label' => __( 'Your Menu' ),
'href' => url( '/' ),
'permissions' => [], // accept an array of permissions
'icon' => 'fa-icon', // use https://icons8.com/line-awesome icons.
'childrens' => [
'submenu' => [
'label' => __( 'First Submenu' ),
'href' => url( '/url/to/page' ),
'permissions' => [], // any permission to contro visibility.
]
]
];
return $menus;
});
}
}
Insérer un menu à une position spécifique
La plupart du temps, les menus sont injectés à la fin de la liste. Toutefois, il est possible d’insérer un menu ou un sous-menu avant ou après un autre menu. L’élément clé ici est de connaître l’identifiant du menu. Par exemple, si nous souhaitons ajouter un menu avant « Inventaire », nous inspecterons le tableau de bord et obtiendrons l’identifiant du menu qui affiche le menu « Inventaire ».
À partir de là, vous devriez pouvoir repérer l’identifiant du menu.
Dans notre exemple, l’identifiant de menu que nous utiliserons est « inventory » et non « menu-inventory ». Nous utiliserons ensuite cet identifiant pour insérer un menu avant « inventory ».
<?php
namespace Modules\YourModuleNamespace\Providers;
use Illuminate\Support\ServiceProvider;
use App\Classes\Hook;
class ModuleSerivceProvider extends ServiceProvider
{
public function register()
{
Hook::addFilter( 'ns-dashboard-menus', function( $menus ) {
$menus = array_insert_after( $menus, 'inventory', [
'my-menus' => [
'label' => __( 'Your Menu' ),
'href' => url( '/' ),
'permissions' => [], // accept an array of permissions
'icon' => 'fa-icon', // use https://icons8.com/line-awesome icons.
'childrens' => [
'submenu' => [
'label' => __( 'First Submenu' ),
'href' => url( '/url/to/page' ),
'permissions' => [], // any permission to contro visibility.
]
]
]
]);
return $menus;
});
}
}
La fonction « array_insert_before » peut être utilisée pour insérer un tableau avant une clé spécifique. La fonction « array_insert_after » peut être utilisée pour insérer un tableau après une clé spécifique.