/** * Build positions array into dropdown key => value format for CMS fields * @return array **/ public static function get_positions_dropdown() { $array = []; foreach (ModuleManager::config()->positions as $position) { $array[$position] = $position; } return $array; }
/** * Get all modules for a specific position * @param $alias = string (the alias of the ModulePosition) * @param $limit = int (limit the number of modules to show, optional) * @return HTMLText **/ public function ModulePosition($alias, $limit = false) { if (!in_array($alias, ModuleManager::config()->positions)) { user_error("Trying to call module position \"" . $alias . "\" but this doesn't exist. Make sure you have setup your custom positions in your site config.", E_USER_NOTICE); } // get this page's module list for specified position $modules = $this->PageModules()->Filter('Position', $alias); // if we have no modules, then nothing doing if (count($modules) <= 0) { return false; } // allow limiting number of modules, per position if ($limit) { $modules = $modules->limit($limit); } // store them in a template array (for template loop) $items = array('Position' => $alias, 'Items' => $modules); return $this->owner->customise($items)->renderWith('ModuleHolder'); }
public function getEditForm($id = null, $fields = null) { // get the cmsfields from ModuleManager DataObject $moduleManager = ModuleManager::current_module_manager(); $fields = $moduleManager->getCMSFields(); // what pages is this module active on $modulesGridField = GridField::create("Modules_Gridfield", "Modules", Module::get(), $modulesGridFieldConfig = GridFieldConfig_RecordEditor::create()); // add multiclass dropdown for modules $modulesGridFieldConfig->removeComponentsByType('GridFieldAddNewButton'); $modulesGridFieldConfig->addComponent(new GridFieldAddNewMultiClass()); // add the fields $fields->addFieldToTab('Root.Modules', $modulesGridField); // module positions tab $positionsHtml = '<h2>Module positions</h2>'; $positionsHtml .= '<p class="message info">To change these you need to edit the positions specified in the <code>_config.php</code> file. These are your currently configured positions available:</p>'; foreach (ModuleManager::config()->positions as $position) { $positionsHtml .= '<p>• <strong>' . $position . '</strong><br /> Use in your template with <code>$ModulePosition("' . $position . '");</code></p>'; } $positionsHtml .= '</ul>'; $fields->addFieldToTab('Root.Positions', LiteralField::create('html', $positionsHtml)); // actions $actions = $moduleManager->getCMSActions(); $form = CMSForm::create($this, 'EditForm', $fields, $actions)->setHTMLID('Form_EditForm'); $form->setResponseNegotiator($this->getResponseNegotiator()); $form->addExtraClass('cms-content center cms-edit-form'); // don't add data-pjax-fragment=CurrentForm, its added in the content template instead if ($form->Fields()->hasTabset()) { $form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet'); } $form->setHTMLID('Form_EditForm'); $form->loadDataFrom($moduleManager); $form->setTemplate($this->getTemplatesWithSuffix('_EditForm')); // Use <button> to allow full jQuery UI styling $actions = $actions->dataFields(); if ($actions) { foreach ($actions as $action) { $action->setUseButtonTag(true); } } return $form; }