Skip to content
Snippets Groups Projects

Issue #3345071: Add menu setting type

3 unresolved threads
Files
3
+ 131
0
 
<?php
 
 
namespace Drupal\ui_patterns_settings\Helpers;
 
 
use Drupal\Core\Template\Attribute;
 
use Drupal\Core\Url;
 
 
/**
 
*
 
*/
 
class Menu {
 
 
/**
 
* Normalize menu items.
 
*
 
* Don't inject URL object into patterns templates, use "title" as item
 
* label and "url" as item target.
 
*
 
* @param array $items
 
* The items to convert.
 
*
 
* @return array
 
*/
 
public static function normalize(array $items): array {
 
foreach ($items as $index => &$item) {
 
if (!is_array($item)) {
 
unset($items[$index]);
 
continue;
 
}
 
if (array_key_exists("text", $item)) {
 
// Examples: links.html.twig, breadcrumb.html.twig, pager.html.twig,
 
// views_mini_pager.html.twig.
 
$item["title"] = $item["text"];
 
unset($item["text"]);
 
}
 
if (!array_key_exists("title", $item)) {
 
$item["title"] = $index;
 
}
 
if (array_key_exists("href", $item)) {
 
// Examples: pager.html.twig, views_mini_pager.html.twig.
 
$item["url"] = $item["href"];
 
unset($item["href"]);
 
}
 
if (!isset($item["url"]) && isset($item["link"])) {
 
// Example: links.html.twig.
 
$item["url"] = $item["link"]["#url"];
 
$item["url"]->setOptions($item["link"]["#options"]);
 
unset($item["link"]);
 
}
 
if (array_key_exists("url", $item) && ($item["url"] instanceof Url)) {
 
// Examples: menu.html.twig, links.html.twig.
 
$url = $item["url"];
 
$item["url"] = $url->toString();
 
$options = $url->getOptions();
 
if (isset($options["attributes"])) {
 
$item["link_attributes"] = new Attribute($options["attributes"]);
 
}
 
}
 
if (array_key_exists("below", $item)) {
 
$item["below"] = self::normalize($item["below"]);
 
}
 
}
 
$items = array_values($items);
 
return $items;
 
}
 
 
/**
 
* Convert pager to menu.
 
*
 
* Convert pager data structure to menu data structure. Useful for
 
* pager.html.twig presenter template.
 
*
 
* @param array $items
 
* The pager items to convert.
 
* @param int $current
 
* The current page.
 
*
 
* @return array
 
*/
 
public static function convertPagerToMenu(array $pager, int $current): array {
 
$items = [];
 
if (isset($pager["first"])) {
 
$items[] = $pager["first"];
 
}
 
if (isset($pager["previous"])) {
 
$items[] = $pager["previous"];
 
}
 
if (isset($pager["pages"])) {
 
foreach ($pager["pages"] as $index => $item) {
 
$item["text"] = $index;
 
if ($index == $current) {
 
unset($item["href"]);
 
}
 
$items[] = $item;
 
}
 
}
 
if (isset($pager["next"])) {
 
$items[] = $pager["next"];
 
}
 
if (isset($pager["last"])) {
 
$items[] = $pager["last"];
 
}
 
return $items;
 
}
 
 
/**
 
* Convert mini pager to menu.
 
*
 
* Convert views mini pager data structure to menu data structure. Useful for
 
* views-mini-pager.html.twig presenter template.
 
*
 
* @param array $items
 
* The pager items to convert.
 
*
 
* @return array
 
*/
 
public static function convertMiniPagerToMenu(array $pager): array {
 
$items = [];
 
if ($pager["previous"]) {
 
$items[] = $pager["previous"];
 
}
 
$items[] = [
 
"text" => $pager["current"],
 
];
 
if ($pager["next"]) {
 
$items[] = $pager["next"];
 
}
 
return $items;
 
}
 
 
}
Loading