diff --git a/classes/admincontroller.php b/classes/admincontroller.php index 72170e10..ef15ad0b 100644 --- a/classes/admincontroller.php +++ b/classes/admincontroller.php @@ -655,7 +655,12 @@ class AdminController extends AdminBaseController } $route = $data['route'] != '/' ? $data['route'] : ''; - $folder = ltrim($data['folder'], '_'); + $folder = $data['folder']; + // Handle @slugify-{field} value, automatically slugifies the specified field + if (substr($folder, 0, 9) == '@slugify-') { + $folder = \Grav\Plugin\Admin\Utils::slug($data[substr($folder, 9)]); + } + $folder = ltrim($folder, '_'); if (!empty($data['modular'])) { $folder = '_' . $folder; } diff --git a/classes/utils.php b/classes/utils.php index b8b7b2f9..b6c3f05c 100644 --- a/classes/utils.php +++ b/classes/utils.php @@ -35,4 +35,26 @@ class Utils // If a User with the provided email cannot be found, then load user with that email as the username return User::load($email); } + + /** + * Generates a slug of the given string + * + * @param string $str + * @return string + */ + public static function slug($str) + { + if (function_exists('transliterator_transliterate')) { + $str = transliterator_transliterate('Any-Latin; NFD; [:Nonspacing Mark:] Remove; NFC; [:Punctuation:] Remove;', $str); + } else { + $str = iconv('UTF-8', 'ASCII//TRANSLIT//IGNORE', $str); + } + + $str = strtolower($str); + $str = preg_replace('/[-\s]+/', '-', $str); + $str = preg_replace('/[^a-z0-9-]/i', '', $str); + $str = trim($str, '-'); + + return $str; + } } diff --git a/themes/grav/templates/pages.html.twig b/themes/grav/templates/pages.html.twig index e70be530..88a2f693 100644 --- a/themes/grav/templates/pages.html.twig +++ b/themes/grav/templates/pages.html.twig @@ -118,6 +118,12 @@ {% if mode == 'list' %} {{ "PLUGIN_ADMIN.BACK"|tu }} + {% for key, add_modal in config.plugins.admin.add_modals %} + {% if add_modal.show_in|defined('bar') == 'bar' %} + {{ add_modal.label }} + {% endif %} + {% endfor %} +
@@ -338,6 +349,12 @@