PHP code example of marshmallow / nova-4-menu-builder
1. Go to this page and download the library: Download marshmallow/nova-4-menu-builder library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
marshmallow / nova-4-menu-builder example snippets
// in app/Providers/NovaServiceProvider.php
public function tools()
{
return [
// ...
\Marshmallow\MenuBuilder\MenuBuilder::make(),
// Optional customization
->title('Menus') // Define a new name for sidebar
->icon('adjustments') // Customize menu icon, supports heroicons
->hideMenu(false) // Hide MenuBuilder defined MenuSection.
];
}
# Choose table names of your liking by editing the two key/values:
'menus_table_name' => 'nova_menu_menus',
'menu_items_table_name' => 'nova_menu_menu_items',
# Define the locales for your project:
# If your project doesn't have localization, you can just leave it as it is.
# When there's just one locale, anything related to localization isn't displayed.
'locales' => ['en' => 'English'],
# Define the list of possible menus (ie 'footer', 'header', 'main-menu'):
'menus' => [
// 'header' => [
// 'name' => 'Header',
// 'unique' => true,
// 'menu_item_types' => []
// ]
],
# If you're just setting up, this is probably of no importance to you,
# but later on, when you want custom menu item types with custom fields
# , you can register them here:
'menu_item_types' => [],
# Run the automatically loaded migrations
php artisan migrate
// in config/nova-menu.php
return [
// ...
'locales' => [
'en' => 'English',
'et' => 'Estonian',
],
// or using a closure (not cacheable):
'locales' => function() {
return nova_lang_get_locales();
}
// or if you want to use a function, but still be able to cache it:
'locales' => '\App\Configuration\NovaMenuConfiguration@getLocales',
// or
'locales' => 'nova_lang_get_locales',
// ...
];
/**
* Get the menu link identifier that can be used to tell different custom
* links apart (ie 'page' or 'product').
*
* @return string
**/
public static function getIdentifier(): string {
// Example usecase
// return 'page';
return '';
}
/**
* Get menu link name shown in a dropdown in CMS when selecting link type
* ie ('Product Link').
*
* @return string
**/
public static function getName(): string {
// Example usecase
// return 'Page Link';
return '';
}
/**
* Get list of options shown in a select dropdown.
*
* Should be a map of [key => value, ...], where key is a unique identifier
* and value is the displayed string.
*
* @return array
**/
public static function getOptions($locale): array {
// Example usecase
// return Page::all()->pluck('name', 'id')->toArray();
return [];
}
/**
* Get the subtitle value shown in CMS menu items list.
*
* @param $value
* @param $data The data from item fields.
* @param $locale
* @return string
**/
public static function getDisplayValue($value, ?array $data, $locale) {
// Example usecase
// return 'Page: ' . Page::find($value)->name;
return $value;
}
/**
* Get the enabled value
*
* @param $value
* @param $data The data from item fields.
* @param $locale
* @return string
*/
public static function getEnabledValue($value, ?array $data, $locale)
{
return true;
}
/**
* Get the value of the link visible to the front-end.
*
* Can be anything. It is up to you how you will handle parsing it.
*
* This will only be called when using the nova_get_menu()
* and nova_get_menus() helpers or when you call formatForAPI()
* on the Menu model.
*
* @param $value The key from options list that was selected.
* @param $data The data from item fields.
* @param $locale
* @return any
*/
public static function getValue($value, ?array $data, $locale)
{
return $value;
}
/**
* Get the fields displayed by the resource.
*
* @return array An array of fields.
*/
public static function getFields(): array
{
return [];
}
/**
* Get the rules for the resource.
*
* @return array A key-value map of attributes and rules.
*/
public static function getRules(): array
{
return [];
}
/**
* Get data of the link visible to the front-end.
*
* Can be anything. It is up to you how you will handle parsing it.
*
* This will only be called when using the nova_get_menu()
* and nova_get_menus() helpers or when you call formatForAPI()
* on the Menu model.
*
* @param null $data Field values
* @return any
*/
public static function getData($data = null)
{
return $data;
}
public function getMenus(Request $request) {
$menusResponse = nova_get_menus();
return response()->json($menusResponse);
}