/** * Form element validation handler for validating the primary region setting for zones. */ function alpha_theme_settings_validate_primary(&$element, &$form_state) { if ($element['#value'] != '_none') { $values = $form_state['values']; if ($values['alpha_region_' . $element['#value'] . '_zone'] != $element['#zone']) { form_set_value($element, NULL, $form_state); } else { $theme = $form_state['build_info']['args'][0]; $regions = alpha_regions(NULL, $theme); $zones = alpha_zones(NULL, $theme); $element['#sum'] = 0; foreach ($regions as $region => $item) { if ($values['alpha_region_' . $region . '_zone'] == $element['#zone']) { $element['#sum'] += $values['alpha_region_' . $region . '_columns']; $element['#sum'] += $values['alpha_region_' . $region . '_prefix']; $element['#sum'] += $values['alpha_region_' . $region . '_suffix']; } } if ($element['#sum'] > $values['alpha_zone_' . $element['#zone'] . '_columns']) { form_error($element, t('You have specified the %region region as the primary region for the %zone zone but the summed region width is greater than the number of available columns for that zone.', array('%region' => $regions[$element['#value']]['name'], '%zone' => $zones[$element['#zone']]['name']))); } } } }
/** * Implements hook_page_alter(). */ function alpha_page_alter(&$vars) { $settings = alpha_settings(); $regions = $columns = array(); $reference =& drupal_static('alpha_regions'); if ($settings['debug']['access']) { if ($settings['debug']['block']) { foreach (alpha_regions() as $region => $item) { if ($item['enabled']) { $block = new stdClass(); $block->delta = 'debug-' . $region; $block->region = $region; $block->module = 'alpha-debug'; $block->subject = $item['name']; $vars[$region]['#sorted'] = FALSE; $vars[$region]['alpha_debug_' . $region] = array('#block' => $block, '#weight' => -999, '#markup' => t('This is a debugging block'), '#theme_wrappers' => array('block')); } } } if ($settings['debug']['grid']) { $class = 'alpha-grid-toggle alpha-grid-toggle-' . ($settings['debug']['active'] ? 'active' : 'inactive'); if (empty($vars['page_bottom'])) { $vars['page_bottom']['#region'] = 'page_bottom'; $vars['page_bottom']['#theme_wrappers'] = array('region'); } if ($settings['responsive']) { $vars['page_bottom']['alpha_resize_indicator'] = array('#type' => 'markup', '#markup' => '<div class="alpha-resize-indicator"></div>'); } $vars['page_bottom']['alpha_grid_toggle'] = array('#type' => 'markup', '#markup' => '<a class="' . $class . '" href="#"></a>'); } } foreach (alpha_regions() as $region => $item) { if ($item['enabled'] && ($item['force'] || !empty($vars[$region]))) { $zone = $item['zone']; $regions[$zone][$region] = isset($vars[$region]) ? $vars[$region] : array(); $regions[$zone][$region]['#region'] = $region; $regions[$zone][$region]['#theme_wrappers'] = array('region'); $regions[$zone][$region]['#data'] = $item; $regions[$zone][$region]['#weight'] = (int) $item['weight']; if ($children = element_children($regions[$zone][$region])) { $last = count($children) - 1; foreach ($children as $element) { $regions[$zone][$region][$element]['#first'] = $element == $children[0]; $regions[$zone][$region][$element]['#last'] = $element == $children[$last]; } } } unset($vars[$region]); } foreach (alpha_zones() as $zone => $item) { if ($item['enabled'] && ($item['force'] || !empty($regions[$zone]))) { $section = $item['section']; $columns[$item['columns']] = $item['columns']; if (!empty($item['primary']) && !empty($regions[$zone][$item['primary']])) { $children = element_children($regions[$zone]); $theme = $GLOBALS['theme_key']; $primary =& $regions[$zone][$item['primary']]; $primary['#weight'] = -999; $primary['#data']['columns'] = $item['columns'] - $primary['#data']['prefix'] - $primary['#data']['suffix']; $primary['#data']['width'] = $item['columns']; foreach ($children as $region) { if (!$regions[$zone][$region]['#data']['primary']) { $primary['#data']['columns'] -= $regions[$zone][$region]['#data']['width']; $primary['#data']['width'] -= $regions[$zone][$region]['#data']['width']; if ($primary['#data']['weight'] > $regions[$zone][$region]['#data']['weight']) { $primary['#data']['push'] += $regions[$zone][$region]['#data']['width']; } } } $reference[$theme][$item['primary']]['columns'] = $primary['#data']['columns']; $reference[$theme][$item['primary']]['width'] = $primary['#data']['width']; $reference[$theme][$item['primary']]['push'] = $primary['#data']['push']; foreach ($children as $region) { if (!$regions[$zone][$region]['#data']['primary'] && $primary['#data']['weight'] > $regions[$zone][$region]['#data']['weight']) { $regions[$zone][$region]['#data']['pull'] = $primary['#data']['width']; $reference[$theme][$region]['pull'] = $primary['#data']['width']; } } } $vars[$section][$zone] = !empty($regions[$zone]) ? $regions[$zone] : array(); $vars[$section][$zone]['#theme_wrappers'] = array('zone'); $vars[$section][$zone]['#zone'] = $zone; $vars[$section][$zone]['#weight'] = (int) $item['weight']; $vars[$section][$zone]['#sorted'] = FALSE; $vars[$section][$zone]['#data'] = $item; $vars[$section][$zone]['#data']['type'] = !empty($item['primary']) && !empty($vars[$section][$zone][$item['primary']]) ? 'dynamic' : 'static'; } } foreach (alpha_sections() as $section => $item) { if (isset($vars[$section])) { $vars[$section]['#theme_wrappers'] = array('section'); $vars[$section]['#section'] = $section; } } alpha_include_grid($settings['grid'], $columns); }