Esempio n. 1
0
 /**
  * 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>&bull;&nbsp; <strong>' . $position . '</strong><br />&nbsp; &nbsp; 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;
 }