Version: current

     1 <?php
     2 // редиректы со старых страниц на новые
     3 class RedirectEntry extends DataObject {
     4     static $db = array(
     5         'OldURL' => 'Varchar(255)',
     6         'NewURL' => 'Varchar(255)',
     7     );
     8
     9     static $summary_fields = array('ID', 'OldURL', 'NewURL');
    10
    11     static $searchable_fields = array('OldURL', 'NewURL');
    12
    13 /*
    14     static $indexes = array(
    15         'OldURL' => true,
    16     );
    17 */
    18
    19     static function clear_url($url) {
    20         if (substr($url, 0, 1) == '/') {
    21             $url = substr($url, 1);
    22         }
    23         if (substr($url, -1, 1) == '/') {
    24             $url = substr($url, 0, -1);
    25         }
    26         $p = strpos($url, '?');
    27         if ($p !== false) {
    28             $url = substr($url, 0, $p+1);
    29         }
    30         $url = preg_replace('!/index$!', '', $url);
    31         return $url;
    32     }
    33
    34     function validate() {
    35         $this->OldURL = self::clear_url($this->OldURL);
    36
    37         if ($this->ID) {
    38             if (!$this->OldURL || !$this->NewURL) {
    39                 return new ValidationResult(false, 'Both URLs must be set');
    40             }
    41             $other = DataObject::get_one('RedirectEntry', "OldURL = '{$this->OldURL}' and ID != {$this->ID}");
    42             if ($other) {
    43                 return new ValidationResult(false, 'OldURL already used');
    44             }
    45         }
    46
    47         return parent::validate();
    48     }
    49
    50     function onBeforeWrite() {
    51         parent::onBeforeWrite();
    52
    53         if (substr($this->NewURL, 0, 1) == '/') {
    54             $this->NewURL = substr($this->NewURL, 1);
    55         }
    56         $this->OldURL = self::clear_url($this->OldURL);
    57     }
    58 }
    59
    60 class RedirectEntry_Admin extends ModelAdmin {
    61     static $url_segment = 'redirect';
    62     static $menu_title = 'Редиректы';
    63     static $managed_models = 'RedirectEntry';
    64
    65 }

[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. -