public function updateCMSFields(\FieldList $fields) { if (!$this->owner->exists()) { return; } $fields->addFieldsToTab('Root.Recommended', [\TextField::create('Recommended_Title', _t('Product.Recommended_Title', 'Title'))->setAttribute('placeholder', $this->owner->config()->recommended_title ?: _t('Product.Default-Recommended_Title', 'Recommended Products')), \CheckboxField::create('Recommended_AlsoBought', _t('Product.Recommended_AlsoBought', 'Prioritise products that were bought with this product?'))->setDescription(_t('Product.Desc-Recommended_AlsoBought', 'This will use products that previous customers have bought with this product, otherwise it will select from your choice below.')), \SelectionGroup::create('Recommended_FindBy', $this->getMethodFormFields())]); }
public function getCMSFields($params = null) { //fields that shouldn't be changed once coupon is used $fields = new FieldList(array($tabset = new TabSet("Root", $maintab = new Tab("Main", TextField::create("Title"), CheckboxField::create("Active", "Active")->setDescription("Enable/disable all use of this discount."), HeaderField::create("ActionTitle", "Action", 3), $typefield = SelectionGroup::create("Type", array(new SelectionGroup_Item("Percent", $percentgroup = FieldGroup::create($percentfield = NumericField::create("Percent", "Percentage", "0.00")->setDescription("e.g. 0.05 = 5%, 0.5 = 50%, and 5 = 500%"), $maxamountfield = CurrencyField::create("MaxAmount", _t("MaxAmount", "Maximum Amount"))->setDescription("The total allowable discount. 0 means unlimited.")), "Discount by percentage"), new SelectionGroup_Item("Amount", $amountfield = CurrencyField::create("Amount", "Amount", "\$0.00"), "Discount by fixed amount")))->setTitle("Type"), OptionSetField::create("For", "Applies to", array("Order" => "Entire Order", "Cart" => "Cart Subtotal", "Shipping" => "Shipping Subtotal", "Items" => "Each Individual Item")), new Tab("Main", HeaderField::create("ConstraintsTitle", "Constraints", 3), LabelField::create("ConstraintsDescription", "Configure the requirements an order must meet for this discount to be valid:")), new TabSet("Constraints"))))); if (!$this->isInDB()) { $fields->addFieldToTab("Root.Main", LiteralField::create("SaveNote", "<p class=\"message good\">More constraints will show up after you save for the first time.</p>"), "Constraints"); } $this->extend("updateCMSFields", $fields, $params); if ($count = $this->getUseCount()) { $fields->addFieldsToTab("Root.Usage", array(HeaderField::create("UseCount", sprintf("This discount has been used {$count} time%s.", $count > 1 ? "s" : "")), HeaderField::create("TotalSavings", sprintf("A total of %s has been saved by customers using this discount.", $this->SavingsTotal), "3"), GridField::create("Orders", "Orders", $this->getAppliedOrders(), GridFieldConfig_RecordViewer::create()->removeComponentsByType("GridFieldViewButton")))); } if ($params && isset($params['forcetype'])) { $valuefield = $params['forcetype'] == "Percent" ? $percentfield : $amountfield; $fields->insertAfter($valuefield, "Type"); $fields->removeByName("Type"); } elseif ($this->Type && (double) $this->{$this->Type}) { $valuefield = $this->Type == "Percent" ? $percentfield : $amountfield; $fields->removeByName("Type"); $fields->insertAfter($valuefield, "ActionTitle"); $fields->replaceField($this->Type, $valuefield->performReadonlyTransformation()); if ($this->Type == "Percent") { $fields->insertAfter($maxamountfield, "Percent"); } } return $fields; }
/** * Display CMS link mapping configuration. */ public function getCMSFields() { $fields = parent::getCMSFields(); Requirements::css(MISDIRECTION_PATH . '/css/misdirection.css'); // Remove any fields that are not required in their default state. $fields->removeByName('MappedLink'); $fields->removeByName('IncludesHostname'); $fields->removeByName('Priority'); $fields->removeByName('RedirectType'); $fields->removeByName('RedirectLink'); $fields->removeByName('RedirectPageID'); $fields->removeByName('ResponseCode'); $fields->removeByName('ForwardPOSTRequest'); $fields->removeByName('HostnameRestriction'); // Update any fields that are displayed. $fields->dataFieldByName('LinkType')->addExtraClass('link-type')->setTitle('Type'); // Instantiate the required fields. $fields->insertBefore(HeaderField::create('MappedLinkHeader', 'Mapping', 3), 'LinkType'); // Retrieve the mapped link configuration as a single grouping. $URL = FieldGroup::create(TextField::create('MappedLink', '')->setRightTitle('This should <strong>not</strong> include the <strong>HTTP/S</strong> scheme'), CheckboxField::create('IncludesHostname', 'Includes Hostname?'))->addExtraClass('mapped-link')->setTitle('URL'); $fields->addFieldToTab('Root.Main', $URL); // Generate the 1 - 10 priority selection. $range = array(); for ($iteration = 1; $iteration <= 10; $iteration++) { $range[$iteration] = $iteration; } $fields->addFieldToTab('Root.Main', DropdownField::create('Priority', null, $range)); // Retrieve the redirection configuration as a single grouping. $fields->addFieldToTab('Root.Main', HeaderField::create('RedirectionHeader', 'Redirection', 3)); $redirect = FieldGroup::create()->addExtraClass('redirect-link'); $redirect->push(TextField::create('RedirectLink', '')->setRightTitle('This requires the <strong>HTTP/S</strong> scheme for an external URL')); // Allow redirect page configuration when the CMS module is present. if (ClassInfo::exists('SiteTree')) { // Allow redirect type configuration. if (!$this->RedirectType) { // Initialise the default redirect type. $this->RedirectType = 'Link'; } $fields->addFieldToTab('Root.Main', SelectionGroup::create('RedirectType', array('Link//To URL' => $redirect, 'Page//To Page' => TreeDropdownField::create('RedirectPageID', '', 'SiteTree')))->addExtraClass('field redirect')); } else { $redirect->setTitle('To URL'); $fields->addFieldToTab('Root.Main', $redirect); } // Use third party validation against an external URL. if ($this->canEdit()) { Requirements::javascript(MISDIRECTION_PATH . '/javascript/misdirection-link-mapping.js'); $redirect->push(CheckboxField::create('ValidateExternal', 'Validate External URL?')->addExtraClass('validate-external')); } // Retrieve the response code selection. $responses = Config::inst()->get('SS_HTTPResponse', 'status_codes'); $selection = array(); foreach ($responses as $code => $description) { if ($code >= 300 && $code < 400) { $selection[$code] = "{$code}: {$description}"; } } // Retrieve the response code configuration as a single grouping. $response = FieldGroup::create(DropdownField::create('ResponseCode', '', $selection), CheckboxField::create('ForwardPOSTRequest', 'Forward POST Request?'))->addExtraClass('response')->setTitle('Response Code'); $fields->addFieldToTab('Root.Main', $response); // The optional hostname restriction is now deprecated. if ($this->HostnameRestriction) { $fields->addFieldToTab('Root.Optional', TextField::create('HostnameRestriction')); } // Allow extension customisation. $this->extend('updateLinkMappingCMSFields', $fields); return $fields; }
/** * @return array */ protected function getTagFields() { $fields = new FieldList(LiteralField::create('BlockScrapeTitle', '<p>Block tag and meta keywords generation</p>'), SelectionGroup::create('BlockScrape', [new SelectionGroup_Item(true, [], 'Yes'), new SelectionGroup_Item(false, [new CheckboxField('ReGenerateTags', 'Regenerate tags on save'), new CheckboxField('ReGenerateKeywords', 'Regenerate keywords on save'), new CheckboxField('RestrictToKnownTags', 'Restrict to known terms when regenerating'), new CheckboxField('TreatHashTagsAsKnownTags', 'Treat hash tags as known tags')], 'No')])->addExtraClass('field'), new TextField('MetaKeywords', 'Meta Keywords (comma separated)'), new TextField('Tags', 'Tags (comma separated)')); return $fields; }
/** * Frontend fields * Simple list of the basic fields - how they're intended to be edited */ function getFrontEndFields($params = null) { //parent::getFrontEndFields($params); $timeFrameHeaderText = 'Time Frame'; if (!CalendarConfig::subpackage_setting('events', 'force_end')) { $timeFrameHeaderText = 'End Date / Time (optional)'; } $fields = FieldList::create(TextField::create('Title')->setAttribute('placeholder', 'Enter a title'), CheckboxField::create('AllDay', 'All-day'), $startDateTime = DatetimeField::create('StartDateTime', 'Start'), CheckboxField::create('NoEnd', 'Open End'), HeaderField::create('TimeFrameHeader', $timeFrameHeaderText, 5), SelectionGroup::create('TimeFrameType', array("Duration//Duration" => TimeField::create('Duration', '')->setRightTitle('up to 24h')->setAttribute('placeholder', 'Enter duration'), "DateTime//Date/Time" => $endDateTime = DateTimeField::create('EndDateTime', ''))), LiteralField::create('Clear', '<div class="clear"></div>')); //Date field settings $timeExpl = 'Time, e.g. 11:15am or 15:30'; //$startDateTime->setConfig('datavalueformat', 'YYYY-MM-dd HH:mm'); //$endDateTime->setConfig('datavalueformat', 'YYYY-MM-dd HH:mm'); $startDateTime->getDateField()->setConfig('showcalendar', 1)->setAttribute('placeholder', 'Enter date')->setAttribute('readonly', 'true'); //we only want input through the datepicker $startDateTime->getTimeField()->setConfig('timeformat', 'HH:mm')->setAttribute('placeholder', 'Enter time'); $endDateTime->getDateField()->setConfig('showcalendar', 1)->setAttribute('placeholder', 'Enter date')->setAttribute('readonly', 'true'); //we only want input through the datepicker $endDateTime->getTimeField()->setConfig('timeformat', 'HH:mm')->setAttribute('placeholder', 'Enter time'); //removing AllDay checkbox if allday events are disabled if (!CalendarConfig::subpackage_setting('events', 'enable_allday_events')) { $fields->removeByName('AllDay'); } //removing NoEnd checkbox if end dates are enforced if (CalendarConfig::subpackage_setting('events', 'force_end')) { $fields->removeByName('NoEnd'); } else { //we don't want the NoEnd checkbox when creating new events if (!$this->ID) { //$fields->removeByName('NoEnd'); } } $this->extend('updateFrontEndFields', $fields); return $fields; }