48 Nachrichten unter 17 Themen von 24 Mitgliedern
[SilverStripe Roadmap][Changelog]

many_many in Decorator

Seite: 1 623 mal gelesen
  • joern
    joern Community Member
    8 Beiträge

    many_many in Decorator

    Hi,
    ich erweiter gerade Member um eine Favorites-Funktion, bei der verschiedene Nutzergruppen die Möglichkeit bekommen sollen, Seiten als Favorit zu speichern.
    Da ich dies später auf mehrere Nutzerklassen ausdehnen möchte habe ich es als Decorator angelegt.

    Der Decorator:

    class MemberFavorites extends DataObjectDecorator
    {
       function updateCMSFields(FieldSet &$fields)
       {
          $source = DataObject::get('Record');
          $favorites = new MultiSelectField(
          "Favorites", // Relationship
          "Favorites", // Field name
             $source->toDropdownMap('ID','Title') // Source records (array)
          );

          $fields->addFieldsToTab('Root.Favorites', $favorites);
          
          return $fields;
       }

       function extraStatics()
       {
          return array(
             'many_many' => array(
                'Favorites' => 'Favorite'
             )
          );
       }
    }
    DataObject::add_extension('RegistredUser', 'MemberFavorites');


    Class Favorites:

    class Favorite extends DataObject
    {
       static $has_one = array(
           'Record'   => 'Record'
       );
       
       static $belongs_many_many = array(
          'Member' => 'Member'
       );
    }


    Class Record:

    class Record … {

       $has_one = array(
          …
          'Favorite' = 'Favorite'
       )

    }

    Auch wenn ich die Records im MultiSelectField sehe und auswählen kann, werden sie nicht gespeichert. Kann es an der ungenauen belongs_many_many-Class im Favorite-Object liegen? Ich habe dort "nur" die Basisklasse von den Usern…

    Ich hoffe ihr wisst was ich meine.

    Danke
    Jörn




  • brokemeister
    brokemeister Community Member
    76 Beiträge

    Re: many_many in Decorator

    H joern,

    Wenn ich mich nicht täusche müsste es wie folgt aussehen:


    class Favorite extends DataObject
    {
    static $has_one = array(
    'Record' => 'Record'
    );

    static $belongs_many_many = array(
    'Member' => 'RegistredUser'
    );
    }


    Du kannst aber auch alternativ, folgendes machen, was wahrscheinlich sinnvoller ist, wenn du es mehren Gruppen zu weisen willst...


    DataObject::add_extension('Member', 'MemberFavorites');


    Gruß

    Malte

    EOS Uptrade GmbH - Komplexes einfach machen | Certified Silverstripe Partner | www.eos-uptrade.de

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: saerdna