Jump to:

5539 Posts in 1738 Topics by 1224 members

Customising the CMS

SilverStripe Forums » Customising the CMS » New Component on CMS

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1 2
Go to End
Author Topic: 3503 Views
  • luisq
    Avatar
    Community Member
    15 Posts

    New Component on CMS Link to this post

    So I'm trying to add a new component to my CMS. I'm following this tutorial:

    http://doc.silverstripe.org/doku.php?id=private:tutorial:creating-a-module&s=extending%20admin%20area

    Step by step (I have SilverStripe v2.3 installed). All my files and code are exactly like they it is in the first 2 basic steps. Where I created all the necessary directories. I also have the _config.php file and also set up the storage tables. But for some reason the new tab, it's not appearing in my CMS. So I cannot continue with the tutorial, I have try many things, go over the forum, and can't make it appear. I was able to show a link in the CMS using this:

    http://doc.silverstripe.org/doku.php?id=cmsmenu&s=admin%20main%20menu

    But I know this is not how it should be done (and also I cannot make it go to the module that I'm doing). Does it have any difference the version of SilverStripe that it's been used? Or am I doing something wrong, any help please?

    Attached it's the structure of my module, if you would like to take a quick look...

    Thank you in advance!

    Attached Files
  • luisq
    Avatar
    Community Member
    15 Posts

    Re: New Component on CMS Link to this post

    Any help? Does anybody know why that tutorial works fine on v2.2 and not v2.3? Is there another tutorial for v2.3?
    Thank you!

  • Jardiamj
    Avatar
    Community Member
    17 Posts

    Re: New Component on CMS Link to this post

    I was having the same problem as you. I could figure out how to add the new link on the top menu of the CMS using:
    CMSMenu::add_link('RandomLinksAdmin', 'Random Links', 'admin/randomlinks/', $priority = -1);

    And also figured out why it wasn't recognizing my new module, it's because in the tutorial in the file _config.php it has:

    Director::addRules(100, array(
       'admin/randomlinks/$Action/$ID' => 'RandomLinksAdmin',
    ));

    It renders the link to the class 'RandomLinksAdmin', and in the file RandomLinksAdmin.php it has:

    static $tree_class = "RandomLinks";

    And it should be:

    static $tree_class = "RandomLinksAdmin"; //So, it matches.

    But now I have the problem that it's not working well, I have problems adding links. And the xXx that are in the function below are appearing in my form. I will try to figure this out. Any help will be appreciated.

    function getEditForm($id) {
          // Create a validator
          $validator = new RequiredFields('LinkTitle', 'LinkURL');

          // Create form fields
          $fields = new FieldSet(
             // TODO The ID field needs to be hidden but while testing make it readonly
             new ReadonlyField('ID','id #',$id),
             new TextField('LinkTitle', _t('RandomLinksAdmin.LINKTITLE','Link Title xXx'), _t('RandomLinksAdmin.NEWRNDLINK','New Random Link xXx')),
             new TextField('LinkURL', _t('RandomLinksAdmin.LINKURL','Link URL xXx'), ""),
             new TextField('LinkImage', _t('RandomLinksAdmin.LINKIMAGE','Link Image xXx'), "")
          );

  • luisq
    Avatar
    Community Member
    15 Posts

    Re: New Component on CMS Link to this post

    Jardiamj,
    thnx for the answer, but it doesn't work for me, well only works half. I was able to get the title on the menu too, just like you did it. But when I click on the link, the page doesn't load and only appears a white page. Did you had the same issue? Once that I can pass that I think I know how continue... Any help will be appreciated!

    thnx again...

  • Jardiamj
    Avatar
    Community Member
    17 Posts

    Re: New Component on CMS Link to this post

    Hello luisq!
    I figured out how to do it, it seems that somethings that are in the tutorial has been deprecated. So Now you just need in the _config.php:

    <?php
    /**
    * Add Static Var for the Random Links menu item
    */
    CMSMenu::add_link('RandomLinksAdmin', 'Random Links', 'admin/randomlinks/', $priority = -1);

    ?>

    And in the file RandomLinksAdmin.php you need to define the next variables:

    class RandomLinksAdmin extends LeftAndMain {
       static $tree_class = 'RandomLinks';
       
       static $url_segment = 'randomlinks';

       static $url_rule = '/$Action/$ID';

       static $menu_title = 'Random Links';

       static $menu_priority = -1;

    I also have changed something in the function getEditForm(). And now mine looks like this:

    function getEditForm($id) {
          // Create a validator
          $validator = new RequiredFields('LinkTitle', 'LinkURL');

          // Create form fields
          $fields = new FieldSet(
             // TODO The ID field needs to be hidden but while testing make it readonly
             new TabSet(   'Root',
                new Tab($title = 'My Link',         
             new ReadonlyField('ID','id #',$id),
             new TextField('LinkTitle','Link Title', 'New Random Link'),
             new TextField('LinkURL', 'Link URL', ""),
             new TextField('LinkImage', 'Link Image', "")
                )
             )
          );
          
        if ($id != 'new') {
             $actions = new FieldSet(
                new FormAction('doUpdateLink', 'Update Link')
             );
          } else {
             $actions = new FieldSet(
                new FormAction('doSaveLink', 'Save Link')
             );
          }

          $form = new Form($this, "EditForm", $fields, $actions, $validator);

          if ($id != 'new') {
             $currentLink = DataObject::get_by_id('RandomLinks',$id);
             $form->loadDataFrom($currentLink);
          }
          return $form;
       }

    I hope this will help. I have played around a little bit with this. But now I think I will end up using ModelAdmin.
    Thanks.

  • le_banana
    Avatar
    Community Member
    21 Posts

    Re: New Component on CMS Link to this post

    Hello everybody.

    I've made your changes Jardiamj, and now this module works great. Thanks for that.
    But i've got some problems with security.
    I've created new group : Moderators. I've gave it access from security menu , to two modules:CMSMain and RandomLinksAdmin. After login to CMS, from this new group, I can see content of Site Content, but when i'm trying to check Random Links from menu, i'm redirecting to Security/login form.

    What do i need to add to RandomLinksAdmin class, or maybe _config.php file, to grant access for this group to RandomLinks?

    Thanks for any replies.

  • Martijn
    Avatar
    Community Member
    271 Posts

    Re: New Component on CMS Link to this post

    I almost got this module working, but when i click on the create link button the form is not showing.

    But it does when a link exist (added manually in db) the form does show...

    I get no server errors, javascript errors or firebug errors, but the form stays empty

    Now I see when adding a page in sitecontent. The id is already generated, but in the randomlinks module the id is called 'new'..

    the code wich generates a formpage:

       function getEditForm($id) {
       
    // Create a validator
    $validator = new RequiredFields('LinkTitle', 'LinkURL');

    // Create form f ields
    $fields = new FieldSet(
    // TODO The ID field needs to be hidden but while testing make it readonly
    new TabSet( 'Root',
    new Tab($title = 'My Link',
    new ReadonlyField('ID','id #',$id),
    new TextField('LinkTitle','Link Title', 'New Random Link'),
    new TextField('LinkURL', 'Link URL', ""),
    new TextField('LinkImage', 'Link Image', "")
    )
    )
    );

    if ($id != 'new') {
    $actions = new FieldSet(
    new FormAction('doUpdateLink', 'Update Link')
    );
    } else {
    $actions = new FieldSet(
    new FormAction('doSaveLink', 'Save Link')
    );
    }

    $form = new Form($this, "EditForm", $fields, $actions, $validator);
          
    if ($id != 'new') {
    $currentLink = DataObject::get_by_id('RandomLinks',$id);
    $form->loadDataFrom($currentLink);
    }
             
    return $form;
    }

    What is the right approach to generate a new record form.

    I realy need this to work, so I can build and learn further on building my own modules...

    Thanks in advance!!!!!!

  • theoldlr
    Avatar
    Community Member
    103 Posts

    Re: New Component on CMS Link to this post

    Martijn,

    Did you get this to work, I seem to be having the same problem as you.

    3503 Views
Page: 1 2
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.