本文整理汇总了PHP中Tab::push方法的典型用法代码示例。如果您正苦于以下问题:PHP Tab::push方法的具体用法?PHP Tab::push怎么用?PHP Tab::push使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Tab
的用法示例。
在下文中一共展示了Tab::push方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: getCMSFields
public function getCMSFields()
{
$message = sprintf('<p>%s</p><p><a href="%2$s">%2$s</a></p>', _t('ElementVirtualLinked.DESCRIBE', 'This is a virtual copy of a block. To edit, visit'), $this->LinkedElement()->getEditLink());
$fields = new FieldList(new TabSet('Root', $main = new Tab('Main')));
if ($this->isInvalidPublishState()) {
$warning = 'Error: The original block is not published. This block will not work on the live site until you click the link below and publish it.';
$main->push(new LiteralField('WarningHeader', '<p class="message error">' . $warning . '</p>'));
}
$main->push(new LiteralField('Existing', $message));
$this->extend('updateCMSFields', $fields);
return $fields;
}
示例2: getCMSFields
public function getCMSFields()
{
$fields = parent::getCMSFields();
$fields->addFieldToTab("Root", $subscriptionTab = new Tab(_t('Newsletter.SUBSCRIPTIONFORM', 'SubscriptionForm')));
Requirements::javascript('newsletter/javascript/SubscriptionPage.js');
Requirements::css('newsletter/css/SubscriptionPage.css');
$subscriptionTab->push(new HeaderField("SubscriptionFormConfig", _t('Newsletter.SUBSCRIPTIONFORMCONFIGURATION', "Subscription Form Configuration")));
$subscriptionTab->push(new TextField('CustomisedHeading', 'Heading at the top of the form'));
//Fields selction
$frontFields = singleton('Recipient')->getFrontEndFields()->dataFields();
$fieldCandidates = array();
if (count($frontFields)) {
foreach ($frontFields as $fieldName => $dataField) {
$fieldCandidates[$fieldName] = $dataField->Title() ? $dataField->Title() : $dataField->Name();
}
}
//Since Email field is the Recipient's identifier,
//and newsletters subscription is non-sence if no email is given by the user,
//we should force that email to be checked and required.
//FisrtName should be checked as default, though it might not be required
$defaults = array("Email", "FirstName");
$extra = array('CustomLabel' => "Varchar", "ValidationMessage" => "Varchar", "Required" => "Boolean");
$extraValue = array('CustomLabel' => $this->CustomLabel, "ValidationMessage" => $this->ValidationMessage, "Required" => $this->Required);
$subscriptionTab->push($fieldsSelection = new CheckboxSetWithExtraField("Fields", _t('Newsletter.SelectFields', "Select the fields to display on the subscription form"), $fieldCandidates, $extra, $defaults, $extraValue));
$fieldsSelection->setCellDisabled(array("Email" => array("Value", "Required")));
//Mailing Lists selection
$mailinglists = MailingList::get();
$newsletterSelection = $mailinglists && $mailinglists->count() ? new CheckboxSetField("MailingLists", _t("Newsletter.SubscribeTo", "Newsletters to subscribe to"), $mailinglists->map('ID', 'FullTitle'), $mailinglists) : new LiteralField("NoMailingList", sprintf('<p>%s</p>', sprintf('You haven\'t defined any mailing list yet, please go to ' . '<a href=\\"%s\\">the newsletter administration area</a> ' . 'to define a mailing list.', singleton('NewsletterAdmin')->Link())));
$subscriptionTab->push($newsletterSelection);
$subscriptionTab->push(new TextField("SubmissionButtonText", "Submit Button Text"));
$subscriptionTab->push(new LiteralField('BottomTaskSelection', sprintf('<div id="SendNotificationControlls" class="field actions">' . '<label class="left">%s</label>' . '<ul><li class="ss-ui-button no" data-panel="no">%s</li>' . '<li class="ss-ui-button yes" data-panel="yes">%s</li>' . '</ul></div>', _t('Newsletter.SendNotif', 'Send notification email to the subscriber'), _t('Newsletter.No', 'No'), _t('Newsletter.Yes', 'Yes'))));
$subscriptionTab->push(CompositeField::create(new HiddenField("SendNotification", "Send Notification"), new TextField("NotificationEmailSubject", _t('Newsletter.NotifSubject', "Notification Email Subject Line")), new TextField("NotificationEmailFrom", _t('Newsletter.FromNotif', "From Email Address for Notification Email")))->addExtraClass('SendNotificationControlledPanel'));
$subscriptionTab->push(new HtmlEditorField('OnCompleteMessage', _t('Newsletter.OnCompletion', 'Message shown on subscription completion')));
return $fields;
}
示例3: getCMSFields
public function getCMSFields()
{
$fields = new FieldList();
$imageTab = new Tab('Image');
$seoTab = new Tab('Metadata');
$tabset = new TabSet("Root", $imageTab, $seoTab);
$fields->push($tabset);
$image_field = new UploadField("FullsizeImage", "Image");
$image_field->setAllowedFileCategories('image');
$imageTab->push($image_field);
$imageTab->push(new TextField("Alt", "Image Alt Tag"));
$imageTab->push(new TextField("Title"));
$imageTab->push(new HTMLEditorField("Description"));
$seoTab->push(new TextField("MetaTitle", "Meta Title"));
$seoTab->push(new TextField("MetaKeywords", "Meta Keywords"));
$seoTab->push(new TextAreaField("MetaDescription", "Meta Description"));
return $fields;
}
示例4: getCMSFields
/**
* Returns a FieldSet with which to create the CMS editing form.
* You can use the extend() method of FieldSet to create customised forms for your other
* data objects.
*/
function getCMSFields($controller = null)
{
require_once "forms/Form.php";
$group = DataObject::get_by_id("Group", $this->Parent()->GroupID);
$sent_status_report = $this->renderWith("Newsletter_SentStatusReport");
$ret = new FieldSet(new TabSet("Root", $mailTab = new Tab(_t('Newsletter.NEWSLETTER', 'Newsletter'), new TextField("Subject", _t('Newsletter.SUBJECT', 'Subject'), $this->Subject), new HtmlEditorField("Content", _t('Newsletter.CONTENT', 'Content'))), $sentToTab = new Tab(_t('Newsletter.SENTREPORT', 'Sent Status Report'), new LiteralField("Sent Status Report", $sent_status_report))));
if ($this->Status != 'Draft') {
$mailTab->push(new ReadonlyField("SendDate", _t('Newsletter.SENTAT', 'Sent at'), $this->SendDate));
}
return $ret;
}
示例5: getCMSFields
/**
* Returns a FieldSet with which to create the CMS editing form.
* You can use the extend() method of FieldSet to create customised forms for your other
* data objects.
*
* @param Controller
* @return FieldSet
*/
function getCMSFields($controller = null)
{
$group = DataObject::get_by_id("Group", $this->Parent()->GroupID);
$sentReport = $this->renderWith("Newsletter_SentStatusReport");
$previewLink = Director::absoluteBaseURL() . 'admin/newsletter/preview/' . $this->ID;
$trackedLinks = $this->renderWith("Newsletter_TrackedLinksReport");
$ret = new FieldSet(new TabSet("Root", $mailTab = new Tab(_t('Newsletter.NEWSLETTER', 'Newsletter'), new TextField("Subject", _t('Newsletter.SUBJECT', 'Subject'), $this->Subject), new HtmlEditorField("Content", _t('Newsletter.CONTENT', 'Content')), new LiteralField('PreviewNewsletter', "<a href=\"{$previewLink}\" target=\"_blank\">" . _t('PREVIEWNEWSLETTER', 'Preview this newsletter') . "</a>")), $sentToTab = new Tab(_t('Newsletter.SENTREPORT', 'Sent Status Report'), new LiteralField("SentStatusReport", $sentReport)), $trackLink = new Tab(_t('Newsletter.TRACKEDLINKS', 'Tracked Links'), new LiteralField("TrackedLinks", $trackedLinks))));
if ($this->Status != 'Draft') {
$mailTab->push(new ReadonlyField("SentDate", _t('Newsletter.SENTAT', 'Sent at'), $this->SentDate));
}
$this->extend("updateCMSFields", $ret);
return $ret;
}
示例6: updateCMSFields
function updateCMSFields(FieldList $fields)
{
$fields->insertAfter($tabset = new TabSet('ColoredImages'), 'Image');
$tabset->push($uploadtab = new Tab('UploadImages'));
$tabset->push($attributetab = new Tab('AssignAttribute'));
$uploadtab->push($uf = new UploadField('Images', 'Images'));
$uf->setDescription('Note: The product must be saved before attributes can be assigned to new uploaded images.');
$attributetab->push($gf = GridField::create("ImageAttributes", "Images", $this->owner->Images(), GridFieldConfig_RelationEditor::create()->removeComponentsByType("GridFieldAddNewButton")->removeComponentsByType("GridFieldEditButton")->removeComponentsByType("GridFieldDataColumns")->removeComponentsByType("GridFieldDeleteAction")->addComponent($cols = new GridFieldEditableColumns())->addComponent(new GridFieldOrderableRows('Sort'))));
$displayfields = array('Title' => array('title' => 'Title', 'field' => new ReadonlyField("Name")));
//add drop-down color selection
$colors = $this->owner->getColors();
if ($colors->exists()) {
$displayfields['ColorID'] = function ($record, $col, $grid) use($colors) {
return DropdownField::create($col, "Color", $colors->map('ID', 'Value')->toArray())->setHasEmptyDefault(true);
};
}
$cols->setDisplayFields($displayfields);
}
示例7: updateCMSFields
public function updateCMSFields(FieldList $fields)
{
$fields->removeByName('FlexiFormFields');
$fields->removeByName('FlexiFormConfigID');
if ($this->owner->exists()) {
$fields_tab = new Tab('Fields');
$settings_tab = new Tab('Settings');
$fields->addFieldToTab($this->getFlexiFormTab(), $flexi_tabs = new TabSet('flexiform', $fields_tab, $settings_tab), $this->getFlexiFormInsertBefore());
// Fields
/////////
$field_types = array();
foreach ($this->getFlexiFormFieldTypes() as $className) {
$singleton = singleton($className);
if ($singleton->canCreate(Member::currentUser())) {
$field_types[$className] = "{$singleton->Label()}";
}
}
$config = new GridFieldConfig_FlexiForm();
$component = $config->getComponentByType('GridFieldAddNewMultiClass');
$component->setTitle($this->getFlexiFormAddButton());
$component->setClasses($field_types);
// hint allowed types to FlexiFormField search fields
singleton('FlexiFormField')->set_stat('allowed_types', $field_types);
$component = $config->getComponentByType('GridFieldAddExistingSearchButton');
$component->setSearchList(FlexiFormField::get()->filter('ClassName', array_keys($field_types)));
$fields_tab->push(new GridField('FlexiForm', 'Form Fields', $this->owner->FlexiFormFields(), $config));
// Settings
///////////
$settings_tab->push(new HiddenField('FlexiFormConfigs'));
// trigger setFlexiFormConfigs method
$settings_tab->push(new TextField('FlexiFormConfig[FormIdentifier]', 'Form Identifier', $this->FlexiFormConf('FormIdentifier')));
$settings_tab->push(new DropdownField('FlexiFormConfig[HandlerID]', 'Form Handler', FlexiFormHandler::get()->map(), $this->FlexiFormConf('HandlerID')));
$field = new ToggleCompositeField('ManageHandlers', 'Manage Handlers', array(new GridField('FlexiHandlers', 'Handlers', FlexiFormHandler::get(), new GridFieldConfig_FlexiFormHandler())));
$settings_tab->push($field);
// Handler-specific Fields
//////////////////////////
$handler = $this->FlexiFormHandler();
if ($handler->exists()) {
$handler->updateCMSFlexiTabs($flexi_tabs, $settings_tab, $this->owner);
}
} else {
$fields->addFieldToTab($this->getFlexiFormTab(), new LiteralField('FlexiForm', '<p>Please save before editing the form.</p>'));
}
}
示例8: updateCMSFields
public function updateCMSFields(FieldList $fields)
{
/** @var Page|MapaelCountryPageExtension $page */
$page = $this->getOwner();
$labels = $page->fieldLabels();
$name = MapaelCountryPage::create()->i18n_singular_name();
$tab = $fields->findOrMakeTab('Root.CountryPageTab', $name);
$tab->push(new TabSet('CountryPageTabSet', $main = new Tab('CountryPageMain', _t('CMSMain.TabContent', 'Content')), $cities = new Tab('CountryPageCities', $page->fieldLabel('MapaelCities'))));
$arr = array();
foreach (MapaelMap::getAreasArray() as $code => $attrs) {
$arr[$code] = $attrs['tooltip']['content'];
}
$main->push($dd = new CountryDropdownField('CountryCode', $page->fieldLabel('CountryCode'), $arr, $page->CountryCode));
$dd->setEmptyString(_t(__CLASS__ . '.CountryCodeNone', 'None'));
$main->push($tf = self::getTooltipContentField($page));
$tf->setDescription(MapaelMap::getCountryName($page->CountryCode));
$main->push(self::getTargetField($page));
$main->push(self::getHrefField($page));
if ($page->CountryHolderPageID) {
$main->push(new ReadonlyField('CountryHolderPageReadonly', $page->fieldLabel('CountryHolderPage'), $page->CountryHolderPage()->Title));
}
$cities->push(GridField::create('MapaelCities', $page->fieldLabel('MapaelCities'), $page->MapaelCities(), GridFieldConfig_RelationEditor::create()));
}
示例9: getCMSFields
function getCMSFields()
{
$fields = parent::getCMSFields();
$fields->addFieldToTab("Root.Content", $subscriptionTab = new Tab(_t('Newsletter.SUBSCRIPTIONFORM', 'SubscriptionForm')));
$subscriptionTab->push(new HeaderField("SubscriptionFormConfig", _t('Newsletter.SUBSCRIPTIONFORMCONFIGURATIONS', "Subscription Form Configurations")));
//Fields selction
$dataFields = singleton('Member')->getCMSFields()->dataFields();
//Since the subscription form is focuse add a member to newsletter groups, we should avoid Password stuff and leave it to member forget/reset password mechanism.
if (isset($dataFields['Password'])) {
unset($dataFields['Password']);
}
$fieldCandidates = array();
if (count($dataFields)) {
foreach ($dataFields as $fieldName => $dataField) {
$fieldCandidates[$fieldName] = $dataField->Title() ? $dataField->Title() : $dataField->Name();
}
}
$memberFields = singleton('Member')->getMemberFormFields()->dataFields();
//Since Email field is the member's identifier, and newsletters subscription is non-sence if no email is given by the user, we should force that email to be checked and required.
$defaults = array("Email");
if (count($memberFields)) {
foreach ($memberFields as $fieldName => $memberField) {
$defaults[] = $fieldName;
}
}
$extra = array('CustomisedLables' => "Varchar", "CustomisedErrors" => "Varchar", "Required" => "Boolean");
$extraValue = array('CustomisedLables' => $this->CustomisedLables, "CustomisedErrors" => $this->CustomisedErrors, "Required" => $this->Required);
$subscriptionTab->push($fieldsSelection = new CheckboxSetWithExtraField("Fields", "<h4>Select the fields that you want to appearing in the subscription form</h4>", $fieldCandidates, $extra, $defaults));
$fieldsSelection->setCellDisabled(array("Email" => array("Value", "Required")));
//NewsletterTypes selection
$newsletterTypes = DataObject::get("NewsletterType");
$newsletterSelection = $newsletterTypes ? new CheckboxSetField("NewsletterTypes", "<h4>Select the newsletters that you want the user subscript to</h4>", $newsletterTypes, $newsletterTypes) : new LiteralField("NoNewsletters", "<p>You haven't define any newsletter yet, please go to <a href=\"admin/newsletter\">newsletter</a> to define some newsletter types</p>");
$subscriptionTab->push($newsletterSelection);
$subscriptionTab->push(new TextField("SubmissionButtonText", "Text appearing in the submit button"));
$subscriptionTab->push(new ToggleCompositeField("SendNotificationToggle", "Send notification email to the subscriber?", new SelectionGroup("SendNotification", array("0//no" => new CompositeField(), "1//yes" => new FieldGroup(new TextField("NotificationEmailSubject", "Notification Email Subject Line:"), new TextField("NotificationEmailFrom", "From Email Address for Notification Email"))))));
$subscriptionTab->push(new HtmlEditorField('OnCompleteMessage', "<h3>Message shown on completion</h3>"));
return $fields;
}
示例10: testRootFieldSet
function testRootFieldSet()
{
/* Given a nested set of FormField, CompositeField, and FieldSet objects */
$fieldSet = new FieldSet($root = new TabSet("Root", $main = new Tab("Main", $a = new TextField("A"), $b = new TextField("B"))));
/* rootFieldSet() should always evaluate to the same object: the topmost fieldset */
$this->assertSame($fieldSet, $fieldSet->rootFieldSet());
$this->assertSame($fieldSet, $root->rootFieldSet());
$this->assertSame($fieldSet, $main->rootFieldSet());
$this->assertSame($fieldSet, $a->rootFieldSet());
$this->assertSame($fieldSet, $b->rootFieldSet());
/* If we push additional fields, they should also have the same rootFieldSet() */
$root->push($other = new Tab("Other"));
$other->push($c = new TextField("C"));
$root->push($third = new Tab("Third", $d = new TextField("D")));
$this->assertSame($fieldSet, $other->rootFieldSet());
$this->assertSame($fieldSet, $third->rootFieldSet());
$this->assertSame($fieldSet, $c->rootFieldSet());
$this->assertSame($fieldSet, $d->rootFieldSet());
}
示例11: getEditForm
public function getEditForm($id = null, $fields = null)
{
$form = parent::getEditForm($id, $fields);
$folder = $id && is_numeric($id) ? DataObject::get_by_id('Folder', $id, false) : $this->currentPage();
$fields = $form->Fields();
$title = $folder && $folder->exists() ? $folder->Title : _t('AssetAdmin.FILES', 'Files');
$fields->push(new HiddenField('ID', false, $folder ? $folder->ID : null));
// File listing
$gridFieldConfig = GridFieldConfig::create()->addComponents(new GridFieldToolbarHeader(), new GridFieldSortableHeader(), new GridFieldFilterHeader(), new GridFieldDataColumns(), new GridFieldPaginator(self::config()->page_length), new GridFieldEditButton(), new GridFieldDeleteAction(), new GridFieldDetailForm(), GridFieldLevelup::create($folder->ID)->setLinkSpec('admin/assets/show/%d'));
$gridField = GridField::create('File', $title, $this->getList(), $gridFieldConfig);
$columns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns');
$columns->setDisplayFields(array('StripThumbnail' => '', 'Title' => _t('File.Title', 'Title'), 'Created' => _t('AssetAdmin.CREATED', 'Date'), 'Size' => _t('AssetAdmin.SIZE', 'Size')));
$columns->setFieldCasting(array('Created' => 'SS_Datetime->Nice'));
$gridField->setAttribute('data-url-folder-template', Controller::join_links($this->Link('show'), '%s'));
if ($folder->canCreate()) {
$uploadBtn = new LiteralField('UploadButton', sprintf('<a class="ss-ui-button ss-ui-action-constructive cms-panel-link" data-pjax-target="Content" data-icon="drive-upload" href="%s">%s</a>', Controller::join_links(singleton('CMSFileAddController')->Link(), '?ID=' . $folder->ID), _t('Folder.UploadFilesButton', 'Upload')));
} else {
$uploadBtn = null;
}
if (!$folder->hasMethod('canAddChildren') || $folder->hasMethod('canAddChildren') && $folder->canAddChildren()) {
// TODO Will most likely be replaced by GridField logic
$addFolderBtn = new LiteralField('AddFolderButton', sprintf('<a class="ss-ui-button ss-ui-action-constructive cms-add-folder-link" data-icon="add" data-url="%s" href="%s">%s</a>', Controller::join_links($this->Link('AddForm'), '?' . http_build_query(array('action_doAdd' => 1, 'ParentID' => $folder->ID, 'SecurityID' => $form->getSecurityToken()->getValue()))), Controller::join_links($this->Link('addfolder'), '?ParentID=' . $folder->ID), _t('Folder.AddFolderButton', 'Add folder')));
} else {
$addFolderBtn = '';
}
if ($folder->canEdit()) {
$syncButton = new LiteralField('SyncButton', sprintf('<a class="ss-ui-button ss-ui-action ui-button-text-icon-primary ss-ui-button-ajax" data-icon="arrow-circle-double" title="%s" href="%s">%s</a>', _t('AssetAdmin.FILESYSTEMSYNCTITLE', 'Update the CMS database entries of files on the filesystem. Useful when new files have been uploaded outside of the CMS, e.g. through FTP.'), $this->Link('doSync'), _t('AssetAdmin.FILESYSTEMSYNC', 'Sync files')));
} else {
$syncButton = null;
}
// Move existing fields to a "details" tab, unless they've already been tabbed out through extensions.
// Required to keep Folder->getCMSFields() simple and reuseable,
// without any dependencies into AssetAdmin (e.g. useful for "add folder" views).
if (!$fields->hasTabset()) {
$tabs = new TabSet('Root', $tabList = new Tab('ListView', _t('AssetAdmin.ListView', 'List View')), $tabTree = new Tab('TreeView', _t('AssetAdmin.TreeView', 'Tree View')));
$tabList->addExtraClass("content-listview cms-tabset-icon list");
$tabTree->addExtraClass("content-treeview cms-tabset-icon tree");
if ($fields->Count() && $folder->exists()) {
$tabs->push($tabDetails = new Tab('DetailsView', _t('AssetAdmin.DetailsView', 'Details')));
$tabDetails->addExtraClass("content-galleryview cms-tabset-icon edit");
foreach ($fields as $field) {
$fields->removeByName($field->getName());
$tabDetails->push($field);
}
}
$fields->push($tabs);
}
// we only add buttons if they're available. User might not have permission and therefore
// the button shouldn't be available. Adding empty values into a ComposteField breaks template rendering.
$actionButtonsComposite = CompositeField::create()->addExtraClass('cms-actions-row');
if ($uploadBtn) {
$actionButtonsComposite->push($uploadBtn);
}
if ($addFolderBtn) {
$actionButtonsComposite->push($addFolderBtn);
}
if ($syncButton) {
$actionButtonsComposite->push($syncButton);
}
// List view
$fields->addFieldsToTab('Root.ListView', array($actionsComposite = CompositeField::create($actionButtonsComposite)->addExtraClass('cms-content-toolbar field'), $gridField));
$treeField = new LiteralField('Tree', '');
// Tree view
$fields->addFieldsToTab('Root.TreeView', array(clone $actionsComposite, new LiteralField('Tree', FormField::create_tag('div', array('class' => 'cms-tree', 'data-url-tree' => $this->Link('getsubtree'), 'data-url-savetreenode' => $this->Link('savetreenode')), $this->SiteTreeAsUL()))));
// Move actions to "details" tab (they don't make sense on list/tree view)
$actions = $form->Actions();
$saveBtn = $actions->fieldByName('action_save');
$deleteBtn = $actions->fieldByName('action_delete');
$actions->removeByName('action_save');
$actions->removeByName('action_delete');
if (($saveBtn || $deleteBtn) && $fields->fieldByName('Root.DetailsView')) {
$fields->addFieldToTab('Root.DetailsView', CompositeField::create($saveBtn, $deleteBtn)->addExtraClass('Actions'));
}
$fields->setForm($form);
$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
// TODO Can't merge $FormAttributes in template at the moment
$form->addExtraClass('cms-edit-form cms-panel-padded center ' . $this->BaseCSSClasses());
$form->setAttribute('data-pjax-fragment', 'CurrentForm');
$form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet');
$this->extend('updateEditForm', $form);
return $form;
}
示例12: getEditForm
public function getEditForm($id = null, $fields = null)
{
Requirements::javascript(FRAMEWORK_DIR . '/javascript/AssetUploadField.js');
Requirements::css(FRAMEWORK_DIR . '/css/AssetUploadField.css');
$form = parent::getEditForm($id, $fields);
$folder = $id && is_numeric($id) ? DataObject::get_by_id('Folder', $id, false) : $this->currentPage();
$fields = $form->Fields();
$title = $folder && $folder->exists() ? $folder->Title : _t('AssetAdmin.FILES', 'Files');
$fields->push(new HiddenField('ID', false, $folder ? $folder->ID : null));
// File listing
$gridFieldConfig = GridFieldConfig::create()->addComponents(new GridFieldToolbarHeader(), new GridFieldSortableHeader(), new GridFieldFilterHeader(), new GridFieldDataColumns(), new GridFieldPaginator(self::config()->page_length), new GridFieldEditButton(), new GridFieldDeleteAction(), new GridFieldDetailForm(), GridFieldLevelup::create($folder->ID)->setLinkSpec('admin/assets/show/%d'));
$gridField = GridField::create('File', $title, $this->getList(), $gridFieldConfig);
$columns = $gridField->getConfig()->getComponentByType('GridFieldDataColumns');
$columns->setDisplayFields(array('StripThumbnail' => '', 'Title' => _t('File.Title', 'Title'), 'Created' => _t('AssetAdmin.CREATED', 'Date'), 'Size' => _t('AssetAdmin.SIZE', 'Size')));
$columns->setFieldCasting(array('Created' => 'SS_Datetime->Nice'));
$gridField->setAttribute('data-url-folder-template', Controller::join_links($this->Link('show'), '%s'));
if (!$folder->hasMethod('canAddChildren') || $folder->hasMethod('canAddChildren') && $folder->canAddChildren()) {
// TODO Will most likely be replaced by GridField logic
$addFolderBtn = new LiteralField('AddFolderButton', sprintf('<a class="ss-ui-button font-icon-folder-add no-text cms-add-folder-link" title="%s" data-icon="add" data-url="%s" href="%s"></a>', _t('Folder.AddFolderButton', 'Add folder'), Controller::join_links($this->Link('AddForm'), '?' . http_build_query(array('action_doAdd' => 1, 'ParentID' => $folder->ID, 'SecurityID' => $form->getSecurityToken()->getValue()))), Controller::join_links($this->Link('addfolder'), '?ParentID=' . $folder->ID)));
} else {
$addFolderBtn = '';
}
// Move existing fields to a "details" tab, unless they've already been tabbed out through extensions.
// Required to keep Folder->getCMSFields() simple and reuseable,
// without any dependencies into AssetAdmin (e.g. useful for "add folder" views).
if (!$fields->hasTabset()) {
$tabs = new TabSet('Root', $tabList = new Tab('ListView', _t('AssetAdmin.ListView', 'List View')), $tabTree = new Tab('TreeView', _t('AssetAdmin.TreeView', 'Tree View')));
$tabList->addExtraClass("content-listview cms-tabset-icon list");
$tabTree->addExtraClass("content-treeview cms-tabset-icon tree");
if ($fields->Count() && $folder->exists()) {
$tabs->push($tabDetails = new Tab('DetailsView', _t('AssetAdmin.DetailsView', 'Details')));
$tabDetails->addExtraClass("content-galleryview cms-tabset-icon edit");
foreach ($fields as $field) {
$fields->removeByName($field->getName());
$tabDetails->push($field);
}
}
$fields->push($tabs);
}
// we only add buttons if they're available. User might not have permission and therefore
// the button shouldn't be available. Adding empty values into a ComposteField breaks template rendering.
$actionButtonsComposite = CompositeField::create()->addExtraClass('cms-actions-row');
if ($addFolderBtn) {
$actionButtonsComposite->push($addFolderBtn);
}
// Add the upload field for new media
if ($currentPageID = $this->currentPageID()) {
Session::set("{$this->class}.currentPage", $currentPageID);
}
$folder = $this->currentPage();
$uploadField = UploadField::create('AssetUploadField', '');
$uploadField->setConfig('previewMaxWidth', 40);
$uploadField->setConfig('previewMaxHeight', 30);
$uploadField->setConfig('changeDetection', false);
$uploadField->addExtraClass('ss-assetuploadfield');
$uploadField->removeExtraClass('ss-uploadfield');
$uploadField->setTemplate('AssetUploadField');
if ($folder->exists()) {
$path = $folder->getFilename();
$uploadField->setFolderName($path);
} else {
$uploadField->setFolderName('/');
// root of the assets
}
$exts = $uploadField->getValidator()->getAllowedExtensions();
asort($exts);
$uploadField->Extensions = implode(', ', $exts);
// List view
$fields->addFieldsToTab('Root.ListView', array($actionsComposite = CompositeField::create($actionButtonsComposite)->addExtraClass('cms-content-toolbar field'), $uploadField, new HiddenField('ID'), $gridField));
// Tree view
$fields->addFieldsToTab('Root.TreeView', array(clone $actionsComposite, new LiteralField('Tree', FormField::create_tag('div', array('class' => 'cms-tree', 'data-url-tree' => $this->Link('getsubtree'), 'data-url-savetreenode' => $this->Link('savetreenode')), $this->SiteTreeAsUL()))));
// Move actions to "details" tab (they don't make sense on list/tree view)
$actions = $form->Actions();
$saveBtn = $actions->fieldByName('action_save');
$deleteBtn = $actions->fieldByName('action_delete');
$actions->removeByName('action_save');
$actions->removeByName('action_delete');
if (($saveBtn || $deleteBtn) && $fields->fieldByName('Root.DetailsView')) {
$fields->addFieldToTab('Root.DetailsView', CompositeField::create($saveBtn, $deleteBtn)->addExtraClass('Actions'));
}
$fields->setForm($form);
$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
// TODO Can't merge $FormAttributes in template at the moment
$form->addExtraClass('cms-edit-form ' . $this->BaseCSSClasses());
$form->setAttribute('data-pjax-fragment', 'CurrentForm');
$form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet');
$this->extend('updateEditForm', $form);
return $form;
}
示例13: push
/**
* @inheritdoc
*/
public function push(FormField $field)
{
return $this->tab->push($field);
}
示例14: getCustomFieldsFor
/**
* Get the pop-up fields for the given record.
*/
function getCustomFieldsFor($childData)
{
if (!$childData) {
user_error("AssetTableField::DetailForm No record found");
return null;
}
if ($childData->ParentID) {
$folder = DataObject::get_by_id('File', $childData->ParentID);
} else {
$folder = singleton('Folder');
}
$urlLink = "<div class='field readonly'>";
$urlLink .= "<label class='left'>" . _t('AssetTableField.URL', 'URL') . "</label>";
$urlLink .= "<span class='readonly'><a href='{$childData->Link()}'>{$childData->RelativeLink()}</a></span>";
$urlLink .= "</div>";
$detailFormFields = new FieldSet(new TabSet("BottomRoot", $mainTab = new Tab('Main', new TextField("Title", _t('AssetTableField.TITLE', 'Title')), new TextField("Name", _t('AssetTableField.FILENAME', 'Filename')), new LiteralField("AbsoluteURL", $urlLink), new ReadonlyField("FileType", _t('AssetTableField.TYPE', 'Type')), new ReadonlyField("Size", _t('AssetTableField.SIZE', 'Size'), $childData->getSize()), new DropdownField("OwnerID", _t('AssetTableField.OWNER', 'Owner'), Member::mapInCMSGroups()), new DateField_Disabled("Created", _t('AssetTableField.CREATED', 'First uploaded')), new DateField_Disabled("LastEdited", _t('AssetTableField.LASTEDIT', 'Last changed')))));
$mainTab->setTitle(_t('AssetTableField.MAIN', 'Main'));
if (is_a($childData, 'Image')) {
$tab = $detailFormFields->findOrMakeTab("BottomRoot.Image", _t('AssetTableField.IMAGE', 'Image'));
$big = $childData->URL;
$formattedImage = $childData->getFormattedImage('AssetLibraryPreview');
$thumbnail = $formattedImage ? $formattedImage->URL : '';
// Hmm this required the translated string to be appended to BottomRoot to add this to the Main tab
$detailFormFields->addFieldToTab('BottomRoot.Main', new ReadonlyField("Dimensions", _t('AssetTableField.DIM', 'Dimensions')));
$tab->push(new LiteralField("ImageFull", "<img id='thumbnailImage' src='{$thumbnail}?r=" . rand(1, 100000) . "' alt='{$childData->Name}' />"));
}
if (!$childData instanceof Folder) {
$mainTab->push(new CheckboxField("ShowInSearch", $childData->fieldLabel('ShowInSearch')));
}
if ($childData && $childData->hasMethod('BackLinkTracking')) {
if (class_exists('Subsite')) {
Subsite::disable_subsite_filter(true);
}
$links = $childData->BackLinkTracking();
if (class_exists('Subsite')) {
Subsite::disable_subsite_filter(false);
}
if ($links && $links->exists()) {
$backlinks = array();
foreach ($links as $link) {
$backlinks[] = "<li><a href=\"admin/show/{$link->ID}\">" . $link->Breadcrumbs(null, true) . "</a></li>";
}
$backlinks = "<div style=\"clear:left\">" . _t('AssetTableField.PAGESLINKING', 'The following pages link to this file:') . "<ul>" . implode("", $backlinks) . "</ul></div>";
}
if (!isset($backlinks)) {
$backlinks = "<p>" . _t('AssetTableField.NOLINKS', "This file hasn't been linked to from any pages.") . "</p>";
}
$detailFormFields->addFieldToTab("BottomRoot.Links", new LiteralField("Backlinks", $backlinks));
}
// the ID field confuses the Controller-logic in finding the right view for ReferencedField
$detailFormFields->removeByName('ID');
if ($childData) {
$childData->extend('updateCMSFields', $detailFormFields);
}
return $detailFormFields;
}
示例15: getEditForm
/**
* Returns a GridField of messages
* @return CMSForm
*/
public function getEditForm($id = null, $fields = null)
{
if (!$id) {
$id = $this->currentPageID();
}
$form = parent::getEditForm($id);
$record = $this->getRecord($id);
if ($record && !$record->canView()) {
return Security::permissionFailure($this);
}
// Build gridfield
$messageListConfig = GridFieldConfig::create()->addComponents(new GridFieldSortableHeader(), new GridFieldDataColumns(), new GridFieldFooter());
$messages = $this->Messages();
if (is_string($messages)) {
// The api returned an error
$messagesList = new LiteralField("MessageAlert", '<div class="message bad">' . $messages . '</div>');
} else {
$messagesList = GridField::create('Messages', false, $messages, $messageListConfig)->addExtraClass("messages_grid");
$columns = $messageListConfig->getComponentByType('GridFieldDataColumns');
$columns->setDisplayFields(['transmission_id' => _t('SparkPostAdmin.EventTransmissionId', 'Id'), 'timestamp' => _t('SparkPostAdmin.EventDate', 'Date'), 'type' => _t('SparkPostAdmin.EventType', 'Type'), 'rcpt_to' => _t('SparkPostAdmin.EventRecipient', 'Recipient'), 'subject' => _t('SparkPostAdmin.EventSubject', 'Subject'), 'friendly_from' => _t('SparkPostAdmin.EventSender', 'Sender')]);
$columns->setFieldFormatting(['timestamp' => function ($value, &$item) {
return date('Y-m-d H:i:s', strtotime($value));
}]);
// Validator setup
$validator = null;
if ($record && method_exists($record, 'getValidator')) {
$validator = $record->getValidator();
}
if ($validator) {
$messageListConfig->getComponentByType('GridFieldDetailForm')->setValidator($validator);
}
}
// Create tabs
$messagesTab = new Tab('Messages', _t('SparkPostAdmin.Messages', 'Messages'), $messagesList, new HiddenField('ID', false, 0));
$fields = new FieldList($root = new TabSet('Root', $messagesTab));
if ($this->CanConfigureApi()) {
$settingsTab = new Tab('Settings', _t('SparkPostAdmin.Settings', 'Settings'));
$webhookTabData = $this->WebhookTab();
$settingsTab->push($webhookTabData);
$domainTabData = $this->DomainTab();
$settingsTab->push($domainTabData);
$fields->addFieldToTab('Root', $settingsTab);
}
// Tab nav in CMS is rendered through separate template
$root->setTemplate('CMSTabSet');
// Manage tabs state
$actionParam = $this->getRequest()->param('Action');
if ($actionParam == 'setting') {
$settingsTab->addExtraClass('ui-state-active');
} elseif ($actionParam == 'messages') {
$messagesTab->addExtraClass('ui-state-active');
}
$actions = new FieldList();
// Create cms form
$form = CMSForm::create($this, 'EditForm', $fields, $actions)->setHTMLID('Form_EditForm');
$form->setResponseNegotiator($this->getResponseNegotiator());
$form->addExtraClass('cms-edit-form');
$form->setTemplate($this->getTemplatesWithSuffix('_EditForm'));
// Tab nav in CMS is rendered through separate template
if ($form->Fields()->hasTabset()) {
$form->Fields()->findOrMakeTab('Root')->setTemplate('CMSTabSet');
}
$form->addExtraClass('center ss-tabset cms-tabset ' . $this->BaseCSSClasses());
$form->setAttribute('data-pjax-fragment', 'CurrentForm');
$this->extend('updateEditForm', $form);
return $form;
}