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.

All other Modules /

Discuss all other Modules here.

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

DOM managed DataObjects not showing in ModelAdmin Search


Reply


712 Views

Avatar
KINKCreative

Community Member, 56 Posts

23 June 2011 at 2:06am

Edited: 23/06/2011 2:09am

This is strange. I may be doing something wrong. I created an Article DataObject that I am managing under a Category page with a DOM. I wanted to allow the users to manage the articles via ModelAdmin too. When I try do a search in ModelAdmin, no search results appear (even if I don't enter anything in the search form).

Please help :)

Article.php

<?php

class Article extends DataObject {

static $db = array(
   'Title' =>'Varchar(255)',
   'Subtitle' => 'Varchar(255)',
   'Summary' => 'Text',
   'Credits'=>'Text',
   'URLSegment'=>'Varchar(255)',
   
   "MetaTitle" => "Varchar(255)",
   "MetaDescription" => "Text",
   "MetaKeywords" => "Varchar(255)",
   
   "Published" => 'Boolean',
   
   "ToDo" => "Text"
);

   function fieldLabels() {
      ...
   }

   static $has_one = array(
      'Category' => 'Category',
      'Author'=>'Member'
   );
   
   static $has_many = array(
      'Pages' => 'ArticlePage',
      'Images' => 'ArticleImage'
   );
   
   static $casting = array(
      "LastEdited" => "SS_Datetime",
      "Created" => "SS_Datetime"
   );
         
   static $defaults = array(
      'Title'=>'New article',
      'URLSegment'=>'new-article'
   );

   static $can_create = true;
   
   static $summary_fields = array(
      'CategoryID',
      'Title',
      'AuthorID',
      'Subtitle',
      'URLSegment',
      'Created',
      'LastEdited'
   );
   
   static $searchable_fields = array(
      'CategoryID',
      'Title',
      'Subtitle',
      'Summary',
      'AuthorID',
      'Credits',
      'Created',
      'LastEdited',
      'Summary'
   );
   
   static $indexes = array (
      'URLSegment' => true
   );
   
   //*********CMS FIELDS
   
   public function getCMSFields()
   {   
      $pageManager = new DataObjectManager(
         $this, // Controller
         'Pages', // Source name
         'ArticlePage', // Source class
         array(
            'PageSubtitle' => 'Subtitle',
            'CharCount' => 'Length of text (chars)',
            'ShortContent' => 'Text'
         ), // Headings
         'getCMSFields', // Detail fields (function name or FieldSet object)
         '',          // Filter clause
         ''          // Sort clause
         // Join clause
      );
      $pageManager->setAddTitle(_t("Article.ADDPAGE","page"));
      $pageManager->setColumnWidths(array(
         'PageSubtitle' => 40,
         'CharCount' => 20,
         'ShortContent' => 40
      ));
      
      $photoManager = new ImageDataObjectManager(
         $this, // Controller
         'Images', // Source name
         'ArticleImage', // Source class
         'File', // File name on DataObject
         array(
            'Caption' => 'Caption'
         ), // Headings
         'getCMSFields'
      );
      $photoManager->setUploadFolder("gallery");
      $photoManager->setAddTitle(_t("Article.ADDPHOTO","photo"));
      
      $authorField = new DropdownField(
         'AuthorID',
         _t("Article.PICKAUTHOR","Pick author"),
         array(''=>_t("Article.SELECT","Select one")) + Dataobject::get("Member", "ID")->toDropdownMap()
      );
      
      $categoryField = new DropdownField(
         'CategoryID',
         _t("Article.PICKCATEGORY","Pick category"),
         array(''=>_t("Article.SELECT","Select one")) + Dataobject::get("Category", "ID", "Title")->toDropdownMap()
      );
      
      if($this->ID) {
      $extraFields = new TabSet ("Root",
         $contentTab = new Tab(_t("Article.TABCONTENT", "Content"),
            $categoryField,
            $authorField,
            new TextField("Credits", $this->fieldLabel('Credits')),
            new TextField("Title", $this->fieldLabel('Title')),
            new TextField("Subtitle", $this->fieldLabel('Subtitle')),
            new TextareaField("Summary", $this->fieldLabel('Summary'))
         ),
         $pageTab = new Tab(_t("Article.TABPAGES","Strani"),
            $pageManager
         ),
         $metaTab = new Tab("Meta",
            new TextField("URLSegment", $this->fieldLabel('URLSegment')),
            new TextField("MetaTitle", $this->fieldLabel('MetaTitle')),
            new TextareaField("MetaKeywords", $this->fieldLabel('MetaKeywords'), 1),
            new TextareaField("MetaDescription", $this->fieldLabel('MetaDescription'))
         ),
         $photoTab = new Tab(_t('Article.TABPHOTO', 'Slike'),
            $photoManager
         ),
         $tabPublish = new Tab(_t('Article.TABPUBLISH', 'Objava'),
            new DatetimeField_Readonly("Created",$this->fieldLabel('Created')),
            new DatetimeField_Readonly("LastEdited",$this->fieldLabel('LastEdited')),
            new CheckboxField("Published",$this->fieldLabel('Published'))
         ),
         $tabToDo = new Tab(_t('Article.TABTODO', 'Opomniki'),
            //new LiteralField("ToDoHelp","Tekst To-Do"),
            new TextareaField("ToDo", "", 10)
         )
      );
      } else {
         $extraFields = new TabSet ("Root",
            $contentTab = new Tab(_t("Article.TABCONTENT", "Vsebina"),
               new TextField("Title", _t('Article.TITLE',"Naslov članka")),
               new TextField("Subtitle", _t('Article.SUBTITLE',"Podnaslov    članka")),
               $authorField,
               new TextField("Credits", _t('Article.CREDITS',"Ostali soavtorji")),
               new TextareaField("Summary", _t('Article.SUMMARY',"Povzetek članka"))
            )
         );   
      }
      
      $f = new FieldSet(
         $extraFields
      );   
         
      return $f;
   }
   
   function onBeforeWrite() {
      if((!$this->URLSegment || $this->URLSegment=='nov-clanek') && $this->Title !='Nov članek') {
         $this->URLSegment = SiteTree::generateURLSegment($this->Title);
      }
      else if ($this->isChanged('URLSegment')) {
         $segment = preg_replace('/[^A-Za-z0-9]+/','-',$this->URLSegment);
         $segment = preg_replace('/-+/','-',$segment);
         
         if(!$segment) {
            $segment="clanek-$this->ID";
         }
         $this->URLSegment = $segment;   
      }
      
      $count=2;
      while($this->LookForExistingURLSegment($this->URLSegment)) {
         $this->URLSegment = preg_replace('/-[0-9]+$/', null, $this->URLSegment).'-'.$count;
         $count++;
      }
      parent::onBeforeWrite();
      
   }
   
   function LookForExistingURLSegment($URLSegment) {
      return(DataObject::get_one('Article', "URLSegment = '".$URLSegment."' AND ID != ".$this->ID));
   }
   
   public function AuthorName() {
      return $this->Author()->FirstName." ".$this->Author()->Surname;
   }
   
   public function isPublished() {
      return $this->Published ? _t("Article.YES","Da") : _t("Article.NO","Ne");
   }
}

ArticleAdmin.php

class ArticleAdmin extends ModelAdmin {

public static $managed_models = array(
'Article'
);

static $url_segment = 'articles';
static $menu_title = 'Article Admin';
public $showImportForm = false;
}