Version: current

      1 <?php
      2
      3 /**
      4  * Description of NewsEntry
      5  *
      6  * @author inxo
      7  */
      8 class NewsEntry extends Page {
      9
     10     static $can_be_root = false;
     11     static $allowed_children = "none";
     12     static $default_parent = "NewsHolder";
     13
     14     static $db = array(
     15         'Date' => 'Date',
     16         'Description' => 'Text',
     17         'Important' => 'Boolean', // важная новости
     18     );
     19
     20     static $has_one = array(
     21         'Photo' => 'Image',
     22     );
     23
     24     static $defaults = array(
     25         'ShowInMenus' => 0,
     26         'ShowInSiteMap' => 0,
     27         'ShowInSearch' => 1,
     28         'ShowOnlyInTab' => 1,
     29         'CanCreateChildren' => array(0),
     30         'Viewers' => 'Anyone',
     31         'Editors' => 'LoggedInUsers',
     32         'Date' => 'now()',
     33     );
     34
     35     static $summary_fields = array(
     36         'Date', 'Title', 'Description'
     37     );
     38
     39     static $searchable_fields = array(
     40         'Title', 'Description', 'Content'
     41     );
     42
     43     // флаг показа новостей только на вкладке или в дереве
     44     protected static $show_only_in_tab = 1;
     45
     46     static function set_show_only_in_tab($value) {
     47         self::$show_only_in_tab = $value;
     48     }
     49
     50     function getCMSFields() {
     51         $fields = parent::getCMSFields();
     52         $fields->removeByName('MenuTitle');
     53
     54         $dateField = new DateField('Date', $this->fieldLabel('Date'));
     55         if (!property_exists('FormField', 'use_html5') || !FormField::use_html5()) {
     56             $dateField->setLocale(Member::currentUser()->Locale);
     57             $dateField->setConfig('dateformat', 'dd/MM/yyyy');
     58             $dateField->setConfig('showcalendar', true);
     59         }
     60         $fields->addFieldToTab('Root.Content.Main', $dateField, 'Title');
     61
     62         $m = new TextareaField('Description', $this->fieldLabel('Description'));
     63         $fields->addFieldToTab('Root.Content.Main', $m, 'Content');
     64
     65         $fields->addFieldToTab('Root.Content.Main', new CheckboxField('Important', $this->fieldLabel('Important')), 'Description');
     66
     67         $fields->addFieldToTab('Root.Content', new Tab('Image', $this->fieldLabel('Photo')), 'PagePhotos');
     68         $i = new ImageField('Photo', $this->fieldLabel('Photo'));
     69         $folder = ($this->AssociatedFolderName) ? $this->AssociatedFolderName : 'News';
     70         $i->setFolderName($folder);
     71         $fields->addFieldToTab("Root.Content.Image", $i);
     72         return $fields;
     73     }
     74
     75     public function getCMSActions() {
     76         Requirements::javascript('webylon/javascript/SubpageAction.js');
     77         $fields = parent::getCMSActions();
     78         $fields->push(new HiddenField('backLink', '', $this->Parent()->ID));
     79         $fields->insertFirst(new FormAction('goBack', _t('News.BACKBUTTON', 'Back')));
     80         return $fields;
     81     }
     82
     83     public function getCMSValidator() {
     84         return new RequiredFields('Title');
     85 //        return new RequiredFields('Date', 'Title');
     86     }
     87
     88     public function populateDefaults() {
     89         parent::populateDefaults();
     90         $this->setField('Date', date('Y-m-d', strtotime('now')));
     91         $this->ShowOnlyInTab = (self::$show_only_in_tab) ? 1 : 0;
     92     }
     93
     94     function requireDefaultRecords() {
     95         parent::requireDefaultRecords();
     96         $state = (int)self::$show_only_in_tab;
     97         // черновые версии новостей
     98         DB::query("UPDATE `Page` SET `ShowOnlyInTab` = {$state} WHERE `ID` in (SELECT `ID` FROM `NewsEntry`)");
     99         // опубликованные новости
    100         DB::query("UPDATE `Page_Live` SET `ShowOnlyInTab` = {$state} WHERE `ID` in (SELECT `ID` FROM `NewsEntry_Live`)");
    101     }
    102
    103     function onBeforeWrite() {
    104         parent::onBeforeWrite();
    105         if ($this->PhotoID) {
    106             $img = DataObject::get_by_id('Image', $this->PhotoID);
    107             if (!$img || !$img->ID) {
    108                 $this->PhotoID = 0;
    109             }
    110         }
    111         $this->ShowOnlyInTab = (self::$show_only_in_tab) ? 1 : 0;
    112     }
    113
    114     function BackLink() {
    115         if (isset($_SERVER['HTTP_REFERER'])) {
    116             $baseURL = Director::absoluteBaseURL();
    117             if ($_SERVER['HTTP_REFERER'] == $baseURL) {
    118                 return $baseURL;
    119             }
    120             if ($archivePage = DataObject::get_one('NewsArchive')) {
    121                 $link = $archivePage->AbsoluteLink();
    122                 if (strpos($_SERVER['HTTP_REFERER'], $link) !== false) {
    123                     return $link;
    124                 }
    125             }
    126         }
    127         return $this->Parent()->Link();
    128     }
    129
    130     function RSSContent() {
    131         if (strlen($this->Description) > 0) {
    132             return $this->Description;
    133         }
    134         return $this->Content;
    135     }
    136 }
    137
    138 class NewsEntry_Controller extends Page_Controller {
    139
    140 }
    141
    142

[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the Silverstripe Forums to ask development related questions. -