Jump to:

23376 Posts in 18214 Topics by 2867 members

General Questions

SilverStripe Forums » General Questions » Translatable custom data object?

General questions about getting started with SilverStripe that don't fit in any of the categories above.

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

Page: 1 2 3
Go to End
Author Topic: 3390 Views
  • spyrosk
    Avatar
    Community Member
    16 Posts

    Translatable custom data object? Link to this post

    Hi! I'm new to Silverstripe and although I like it's approach very much, I'm a bit overwhelmed with all the information. Here is what I would like to do:
    Create something like a portfolio page with links to categories/types of projects and other attributes, e.g. client, year of completion, start date etc.
    Each project should have a few custom fields, like the ones mentioned above, and a few images that will be displayed on it's page. Some fields should be just custom text, but others should be selected from a drop-down list.
    And here is the funny part, the site should support 2 to 3 different languages..

    Has anyone implemented anything like this in the past? Is it possible using SS, without having separate installations?
    I don't seek a ready made solution, just a little guidance on how I should tackle this. I have already looked at modules like DOM, Uploadify etc, but I haven't found a solution regarding the multilingual and fields issue.
    Thank you and sorry if I posted this in the wrong section.

  • MarcusDalgren
    Avatar
    Community Member
    288 Posts

    Re: Translatable custom data object? Link to this post

    Yes this is very doable!

    Translatable is a part of the core so what you need to do is activate it in your _config.php file. Put this in the config

    Object::add_extension('SiteTree', 'Translatable');

    and then run dev/build?flush=all. After that you can use

    Translatable::set_allowed_locales(array('sv_SE','en_US'));
    Translatable::set_default_locale('sv_SE');

    to setup the languages you want to use on your site and the default language for your site. The fields issue isn't really an issue, you can add any fields you like to your classes. If you've used WordPress then SilverStripe handles "custom fields" very differently.

    If you haven't gone through the tutorials on doc.silverstripe.org then I recommend you start there. If you decide to do your portfolio and projects as page classes then this should get you pretty far.

  • swaiba
    Avatar
    Forum Moderator
    1785 Posts

    Re: Translatable custom data object? Link to this post

    Hi,

    Just in case the above does not answer the "dataobject" part of the question, this may be of interest.... http://www.silverstripe.org/data-model-questions/show/8397#post293654

  • spyrosk
    Avatar
    Community Member
    16 Posts

    Re: Translatable custom data object? Link to this post

    Hello and thank you for your help, I really appreciate it!
    I've gone through the tutorials/docs and I think I have my pages/dataObjects relationships planned out.
    I would like to ask some more questions though because I'm still confused about this. I'll try to explain it with an example.
    Let's say that my relationships are these:
    Project hasOne ProjectCountry (1 to many)
    Project hasMany ProjectTags (Many to many)
    Project hasMany ProjectImages (Many to many)

    Now, ProjectPage is, as the name suggests, extends the Page class. The question is should I implement the additional objects (ProjectCountry, ProjectTags) as sub-classes of Page or DataObject?
    How will the translations work in each case?
    Will I be able to make translations through the Translations tab in the case of the DataObject or not (so I must define them as Page extensions)?

    Thank you again for your help!

  • spyrosk
    Avatar
    Community Member
    16 Posts

    Re: Translatable custom data object? Link to this post

    Ok, I have tried both approaches but I am definitely doing something wrong. When I added DataObjects to my Project page they wouldn't get translated and they retained their original values. Then I switched to adding Page objects but this still doesn't work.
    I'm posting my code below just in case someone is interested:
    ProjectCountry.php

    <?php
    class ProjectCountry extends Page {

    static $has_many = array(
    'ProjectPages' => 'ProjectPage'
    );

    static $db = array(
    'Name' => 'Text',
    'CountryCode' => 'Text'
    );

    function getCMSFields_forPopup() {
    $fields = parent::getCMSFields();
    $fields->push( new TextField( 'Name' ) );
    $fields->push( new TextField( 'CountryCode' ) );
    return $fields;
    }

    function getCMSFields() {
    $fields = parent::getCMSFields();
    $fields->addFieldToTab( 'Root.Content.Main', new TextField( 'CountryCode' ), 'Content' );
    return $fields;
    }

    }
    class ProjectCountry_Controller extends Page_Controller {

    }
    ?>


    ProjectPage.php

    <?php
    class ProjectPage extends Page {

    static $db = array(
    'AwardingOrganization' => 'Text',
    'ProjectOwner' => 'Text'
    );

    static $has_one = array(
    'ProjectsCountry' => 'ProjectCountry'
    );
    function getCMSFields() {
    $fields = parent::getCMSFields();
    $tablefield = new HasManyComplexTableField(
    $this,
    'ProjectsCountry',
    'ProjectCountry',
       array(
        'Name' => 'Country Name',
        'CountryCode' => 'Country Code'
       ),
    'getCMSFields_forPopup'
    );
    $tablefield->setAddTitle('Project\'s Country');
    $tablefield->setParentClass('ProjectPage');
    $fields->addFieldToTab('Root.Content.ProjectDetails', $tablefield );
    $fields->addFieldToTab('Root.Content.ProjectDetails', new TextField('AwardingOrganization'));
    $fields->addFieldToTab('Root.Content.ProjectDetails', new TextField('ProjectOwner'));
    return $fields;
    }
    }

    class ProjectPage_Controller extends Page_Controller {

    }
    ?>

  • swaiba
    Avatar
    Forum Moderator
    1785 Posts

    Re: Translatable custom data object? Link to this post

    Hi,

    Did you follow the doc for page translation?

    http://doc.silverstripe.org/multilingualcontent?s[]=translatable
    http://doc.silverstripe.org/recipes:multilingual_content?s[]=translatable

    (this for nice flags for witch content)
    http://www.silverstripe.org/general-questions/show/13131#post287548

    Regarding the DataObject translation - I haven't done much apart from add it as an extension and try creating a translation back when I responded to that post, so there is not much I can help you there with yet...

    Barry

  • spyrosk
    Avatar
    Community Member
    16 Posts

    Re: Translatable custom data object? Link to this post

    Hi, yes I believe that I have followed them, but I could have done something wrong..
    Right now I'm giving TranslatableModelAdmin a try. The one thing I havent figured out yet is how will I be able to display the localized dataobject on the project page (for selection on the 1 to many relationship).
    It will be a shame if I can't get this to work as SS fits my needs perfectly for a CMS.
    But I won't quit!

  • swaiba
    Avatar
    Forum Moderator
    1785 Posts

    Re: Translatable custom data object? Link to this post

    Hi,

    Maybe if you could explain a little more with where you are at I might be able to help...

    Have you got the right stuff in your config.php? So you can see the option to translate a page within the cms?
    Are you creating a translation for the page in the CMS? If yes to all of this, what happens when you add the code for the switching with flags to Page.ss?

    Barry

    3390 Views
Page: 1 2 3
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.