Skip to main content

This site requires you to update your browser. Your browsing experience maybe affected by not having the most up to date version.

Customising the CMS

TreeDropDownField in Popup (SS 2.3.2 / 2.3.3)


Reply

8 Posts   2489 Views

Avatar
Andre

5 August 2009 at 7:03am Community Member, 126 Posts

Hi there,
I was trying to write a Module for having a Menu with Shortlinks. Therefore my Idea was a class Shortlink, inheriting from DataObject and a ShortlinkPage having many shortlinks.
This is the Code:
class ShortLink extends DataObject{
static $db = array (
'LinkTitle' => 'Text'
);
static $has_one = array (
'ShortLink' => 'Page'
);
function getCMSFields_forPopup(){
$fields = new FieldSet();
$fields->push(new TextField('LinkTitle', _t("ShortLink.LINKTITLE", "Link Title:")));
$fields->push(new TreeDropdownField("ShortLink", _t("ShortLink.SHORTLINK", "Link Target:"), "Page"));
return $fields;
}

}
class ShortLinkPage extends Page {

static $has_many = array (
'ShortLinks' => 'ShortLink'
);
public function getCMSFields() {
$fields = parent::getCMSFields();
$shortLinks = new ComplexTableField(
$this,
_t("ShortLinkPage.SHORTLINKS", "Short Links:"),
'ShortLink',
null,
null
//"ShortLink.ShortLinkPageID = {$this->ID}"
);
$fields->addFieldToTab('Root.Content.Shortlinks', $shortLinks);
return $fields;
}
public function getShortLinks(){
$page = $this;
$Shortlinks = $this->ShortLinks();
print_r($Shortlinks); // this is still not ready, but isn't my problem at the moment
/*while(!$Menublock->ID && $page->ParentID != 0){
$page = $page->Parent();
if(!method_exists($page, 'LinkToMenublock') && $page->ParentID != 0){
$page = $page->Parent();
$Menublock = $page->LinkToMenublock();
}else{
$Menublock = $page->LinkToMenublock();
}
}
//return new DataObjectSet($Menublock->Children());
return $Menublock->Children();*/
}

}
class ShortLinkPage_Controller extends ExtendedPage_Controller {
}
What doesn't work is the TreeDropDownField inside the Popup for creating a new shortlink (in Version 2.3.2 and 2.3.3, didn't tested 2.3.1). Is this a general Problem, that doesn't work or have I been doing something wrong? Elsewhere is the an alternative way, to slect a page for a collection of Links?

Avatar
BurtOfOz

5 August 2009 at 9:34am Community Member, 3 Posts

Gday Andre,

What do you mean by "doesn't work"? I ran up against some issues with the TreeDropdownField, but have things working ok now.

If you mean that it creates a single line box underneath the initial box, that makes it next to impossible to select a page from the tree, try changing the order of your fields in the FieldSet, such that the TreeDropdownField isn't the last one on the pop-up.

If it's something else, let me know and I'll see if I can help.

Avatar
Andre

5 August 2009 at 10:25pm Community Member, 126 Posts

Now I'm a little confused. With "It doesn't work", I mean, the TreeDropdownField doesn't show up. Now I now I changed the order, which didn't help, and, what is more confusing, I commented the Textfield, but it still shows up (did /dev/build?flush=1 already a few times).

Here is My code again plus a Screenshot:

<?php

class ShortLink extends DataObject{
   static $has_one = array (
'ShortLink' => 'Page'
);

static $db = array (
      'LinkTitle' => 'Text'
   );

   function getCMSFields_forPopup(){
      $fields = new FieldSet();
      $fields->push(new TreeDropdownField("ShortLink", _t("ShortLink.SHORTLINK", "Link Target:"), "Page"));
//$fields->push(new TextField('LinkTitle', _t("ShortLink.LINKTITLE", "Link Title:")));

      return $fields;
   }
   
}

?>

Attached Files
Avatar
Andre

6 August 2009 at 1:14am Community Member, 126 Posts

Hi, me again,

the following is also not working. Now I get no fields inside the Popup.

<?php

class ShortLink extends DataObject{
   static $has_one = array (
'ShortLink' => 'Page'
);

static $db = array (
      //'LinkTitle' => 'Text'
   );

   function getCMSFields_forPopup(){
      $fields = new FieldSet(
new TreeDropdownField("ShortLink", _t("ShortLink.SHORTLINK", "Link Target:"), "Page")
//new TextField('LinkTitle', _t("ShortLink.LINKTITLE", "Link Title:"))
);

      return $fields;
   }
   
}

?>

Do I have a stupid mistake, or is this a bug wtihin TreeDropdown or Popup?

Avatar
Andre

6 August 2009 at 11:41pm Community Member, 126 Posts

Got it working now. Also changed Complextablefield to Dataobjectmanager.

<?php

class ShortLink extends DataObject{
public static $has_one = array (
'ShortLink' => 'SiteTree'
);

public static $db = array (
'LinkTitle' => 'Text'
);

public function getCMSFields_forPopup(){
$fields = new FieldSet(
new TreeDropdownField("ShortLink", _t("ShortLink.SHORTLINK", "Link Target:"), "SiteTree"),
new TextField('LinkTitle', _t("ShortLink.LINKTITLE", "Link Title:"))
);

return $fields;
}
}

?>

<?php

class ShortLinkPage extends ExtendedPage {
   
   static $has_many = array (
      'ShortLinks' => 'ShortLink'
   );

   public function getCMSFields() {
      $fields = parent::getCMSFields();
      $fields->addFieldToTab('Root.Content.Shortlinks', new DataObjectManager(
$this,
_t("ShortLinkPage.SHORTLINKS", "Short Links:"),
'ShortLink',
array('LinkTitle' => _t("ShortLinkPage.LINKTITLE", "Link Title")),
'getCMSFields_forPopup'
));

      return $fields;
   }
}

class ShortLinkPage_Controller extends ExtendedPage_Controller {
}

?>

Avatar
Garrett

18 May 2011 at 8:21am Community Member, 245 Posts

I am using SS 2.4.5 and am unable to get a TreeDropdownField to open in the popup modal window. Also, it completely breaks SimpleTinyMCEField.

//Garrett

Avatar
rodolfocartas

20 September 2011 at 5:39am Community Member, 2 Posts

I'm facing the same problem. Did you fix it?

Avatar
Garrett

20 September 2011 at 7:18am Community Member, 245 Posts

No, so I am using the SimpleTreeDropDownField object from DataObjectManager module. It's not as fancy but it works for my purposes.

//Garrett