|
Perforce Chronicle 2012.2/486814
API Documentation
|
This is the menu widget configuration form. More...
Public Member Functions | |
| init () | |
| Defines the elements that make up the menu widget config form. | |
| isValid ($data) | |
| Extends parent to ensure root options are updated. | |
| setDefaults (array $defaults) | |
| Extends parent to ensure root options are updated. | |
Protected Member Functions | |
| _loadRootOptions ($menuId=null) | |
| Populates the root options based on the currently set menu. | |
This is the menu widget configuration form.
| Menu_Form_Widget::_loadRootOptions | ( | $ | menuId = null | ) | [protected] |
Populates the root options based on the currently set menu.
| string | $menuId | optional - the menu (or handler id) to base root options on (defaults to current value of menu field). |
{
// if the menu root element isn't present just return
if (!$this->getElement(P4Cms_Menu::MENU_ROOT)) {
return;
}
$options = array(
'' => 'Show Entire Menu'
);
// if no menu was passed, get current setting
if ($menuId === null) {
$menuId = $this->getValue('menu');
}
// If no valid menu set, can't load root options
try {
$menu = P4Cms_Menu::fetchMenuOrHandlerAsMenu($menuId);
} catch (Exception $e) {
$this->getElement(P4Cms_Menu::MENU_ROOT)->setMultiOptions($options);
return;
}
// use a recursive iterator iterator to flatten the list of menu items
$iterator = new RecursiveIteratorIterator(
$menu->getExpandedContainer(),
RecursiveIteratorIterator::SELF_FIRST
);
// add each item to the list of available roots; keyed on ID and with an indented label
$roots = array();
foreach ($iterator as $item) {
$id = P4Cms_Menu::getItemId($item);
// skip over any items that don't have IDs
if (empty($id)) {
continue;
}
$indent = str_repeat(P4Cms_Form::UTF8_NBSP, $iterator->getDepth() * 2);
$roots[$id] = $indent . $item->label;
}
if (count($roots)) {
$options['Display Root'] = $roots;
} else {
$options['Empty Menu'] = array();
}
$this->getElement(P4Cms_Menu::MENU_ROOT)->setMultiOptions($options);
}
| Menu_Form_Widget::init | ( | ) |
Defines the elements that make up the menu widget config form.
Called automatically when the form object is created.
{
$menus = P4Cms_Menu::fetchAll();
$menuNames = array();
foreach ($menus as $menu) {
$menuNames[$menu->getId()] = $menu->getLabel();
}
// tack on the various dynamic items so they can
// pick from those as well
$group = 'Dynamic';
$menuNames[$group] = array();
$dynamicTypes = P4Cms_Navigation_DynamicHandler::fetchAll();
foreach ($dynamicTypes as $dynamicType) {
$label = $dynamicType->getLabel();
$value = 'P4Cms_Navigation_DynamicHandler/' . $dynamicType->getId();
$menuNames[$group][$value] = $label;
}
natcasesort($menuNames[$group]);
$this->addElement(
'select',
'menu',
array(
'label' => 'Menu',
'value' => P4Cms_Menu::DEFAULT_MENU,
'required' => true,
'description' => "Choose a menu to display",
'multiOptions' => $menuNames,
'onChange' => "p4cms.menu.refreshSubForm(this.form);"
)
);
// add option to select the display root
$this->addElement(
'select',
P4Cms_Menu::MENU_ROOT,
array(
'value' => '',
'label' => 'Display Root',
)
);
$this->getElement(P4Cms_Menu::MENU_ROOT)
->getDecorator('htmlTag')
->setOption('class', 'menu-root');
$this->_loadRootOptions();
// add option to toggle inclusion of root item, when rooting a menu.
$this->addElement(
'checkbox',
P4Cms_Menu::MENU_KEEP_ROOT,
array(
'label' => 'Include Root Item',
'description' => 'Set the display root (starting point) to display from.<br/>'
. 'Optionally show the root item in the displayed menu.'
)
);
P4Cms_Form::moveCheckboxLabel($this->getElement(P4Cms_Menu::MENU_KEEP_ROOT));
$this->getElement(P4Cms_Menu::MENU_KEEP_ROOT)
->getDecorator('htmlTag')
->setOption('class', 'keep-root');
$this->getElement(P4Cms_Menu::MENU_KEEP_ROOT)
->getDecorator('Description')
->setEscape(false);
// add option to limit depth of the displayed menu.
$options = array('' => 'Unlimited') + range(1, 10);
$this->addElement(
'select',
P4Cms_Menu::MENU_MAX_DEPTH,
array(
'value' => '',
'label' => 'Maximum Depth',
'description' => 'Set the maximum depth of items to display.',
'multiOptions' => $options
)
);
// add option to limit depth of the displayed menu.
$options = array('' => 'Unlimited')
+ array_combine(range(1, 10), range(1, 10))
+ array_combine(range(15, 50, 5), range(15, 50, 5))
+ array_combine(range(60, 100, 10), range(60, 100, 10));
$this->addElement(
'select',
P4Cms_Menu::MENU_MAX_ITEMS,
array(
'value' => '',
'label' => 'Maximum Items',
'description' => 'Set the maximum number of items to display.',
'multiOptions' => $options
)
);
}
| Menu_Form_Widget::isValid | ( | $ | data | ) |
Extends parent to ensure root options are updated.
| array | $data | The form data to check for validity. |
{
// populate root options according to selected menu.
$menu = isset($data['config']['menu'])
? $data['config']['menu']
: '';
$this->_loadRootOptions($menu);
return parent::isValid($data);
}
| Menu_Form_Widget::setDefaults | ( | array $ | defaults | ) |
Extends parent to ensure root options are updated.
| array | $defaults | Defaults for the menu widget. |
{
$return = parent::setDefaults($defaults);
$this->_loadRootOptions();
return $return;
}